LogoLogo
KeeperPAMとシークレットマネージャー
KeeperPAMとシークレットマネージャー
  • KeeperPAM
  • 特権アクセス管理
    • セットアップ手順
    • クイックスタート (Sandbox)
    • はじめに
      • アーキテクチャ
        • アーキテクチャ図
        • ボルト (保管庫) のセキュリティ
        • ルータのセキュリティ
        • ゲートウェイのセキュリティ
        • 接続とトンネルのセキュリティ
      • KeeperPAMのライセンス
      • 強制適用ポリシー
      • ボルトの構造
      • レコードリンク
      • アプリケーション
      • デバイス
      • ゲートウェイ
        • ゲートウェイの作成
        • Dockerにインストール
        • Linuxにインストール
        • Windowsにインストール
        • 自動アップデータ
        • 高度な設定
          • AWS KMSでのゲートウェイ構成
          • カスタムフィールドを使用したゲートウェイ構成
      • PAM構成
        • AWS環境のセットアップ
        • Azure環境のセットアップ (英語)
        • ローカル環境のセットアップ (英語)
      • PAMリソース
        • PAMマシン
          • 例: Linuxマシン (英語)
          • 例: Azure仮想マシン (英語)
        • PAMデータベース
          • 例: MySQLデータベース (英語)
          • 例: PostgreSQLデータベース (英語)
          • 例: Microsoft SQL Serverデータベース (英語)
        • PAMディレクトリ
        • PAMリモートブラウザ
        • PAMユーザー
      • 共有とアクセス制御 (英語)
      • ジャストインタイムアクセス (JIT) (英語)
    • パスワードローテーション
      • ローテーションの概要
      • ローテーションの活用事例
        • Azure
          • Azure ADユーザー
          • Azure VMユーザーアカウント
          • Azureマネージドデータベース
            • Azure SQL
            • Azure MySQL - シングル/フレキシブルデータベース
            • Azure MariaDBデータベース
            • Azure PostgreSQL - シングル/フレキシブルデータベース
          • Azureアプリケーションシークレットローテーション
        • AWS
          • IAMユーザーのパスワード
          • Managed Microsoft ADユーザー
          • EC2仮想マシンユーザー
          • IAMユーザーのアクセスキー
          • マネージドデータベース
            • AWS RDS for MySQL
            • AWS RDS for SQL Server
            • AWS RDS for PostgreSQL
            • AWS RDS for MariaDB
            • AWS RDS for Oracle
        • ローカルネットワーク
          • Active DirectoryやOpenLDAPユーザー
          • Windowsユーザー
          • Linuxユーザー
          • macOSユーザー
          • データベース
            • ネイティブMySQL
            • ネイティブMariaDB
            • ネイティブPostgreSQL
            • ネイティブMongoDB
            • ネイティブMS SQL Server
            • ネイティブOracle
        • SaaSアカウント
          • Oktaユーザー
          • Snowflakeユーザー
          • REST APIを使用した認証情報のローテーション (英語)
        • ネットワークデバイス
          • Cisco IOS XE
          • Cisco Meraki
      • サービス管理
      • ポストローテーションスクリプト
        • 入力と出力
        • スクリプトの添付
        • コード例
    • 接続
      • はじめに
      • セッションプロトコル
        • SSH接続
        • RDP接続 (英語)
        • RBI接続 (英語)
        • MySQL接続 (英語)
        • SQL Server接続 (英語)
        • PostgreSQL接続 (英語)
        • VNC接続 (英語)
        • Telnet接続 (英語)
      • 具体例 (英語)
        • SSHプロトコル - Linuxマシン (英語)
        • RDPプロトコル - Azure仮想マシン (英語)
        • MySQLプロトコル - MySQLデータベース (英語)
        • PostgreSQLプロトコル - PostgreSQLデータベース (英語)
    • トンネル
      • トンネルの設定
    • リモートブラウザ分離
      • RBI (リモートブラウザ分離) の設定
        • URLパターンとリソースURLパターン
        • ブラウザの自動入力
    • セッションの録画と再生
    • SSHエージェント
      • Gitとの統合
    • 検出
      • コマンダーを使用した検出 (英語)
      • ボルトを使用した検出 (英語)
    • オンプレミス用コネクションマネージャー
    • 参考資料
      • ポートマッピング
      • SSHの設定
      • WinRMを設定
      • SQL Serverの設定 (英語)
      • Linuxへのsqlcmdのインストール (英語)
      • LinuxでのDockerインストール
      • ローテーション用のKSMアプリの作成
      • Active Directoryの最小権限
      • イベントレポート
      • PAMレコードのインポート
      • CLIによるローテーション管理
      • Commander SDK
      • Cron式で自動ローテーション設定
      • プレビュー版へのアクセス方法
  • エンドポイント特権マネージャー
    • 概要
  • セットアップ
  • デプロイメント (展開)
  • ポリシー
  • リクエストの管理
  • よくある質問
  • シークレットマネージャー
    • 概要
    • クイックスタートガイド
    • Keeperシークレットマネージャー (KSM) について
      • アーキテクチャ
      • 用語
      • セキュリティと暗号化モデル
      • ワンタイムアクセストークン
      • Secrets Managerの設定
      • Keeper表記法
      • イベントレポート
      • フィールド/レコードタイプ
    • シークレットマネージャーCLI
      • profileコマンド
      • initコマンド
      • secretコマンド
      • folderコマンド
      • syncコマンド
      • execコマンド
      • configコマンド
      • versionコマンド
      • 各種コマンド
      • Dockerコンテナ
      • カスタムのレコードタイプ
    • パスワードローテーション
    • 開発者用SDK
      • Python SDK
      • Java/Kotlin SDK
        • レコードフィールドクラス
      • JavaScript SDK
      • .NET SDK
      • Go SDK
        • レコードフィールドクラス
      • PowerShell
      • ボルトのSDK
    • インテグレーション
      • Ansible
        • Ansibleプラグイン
        • Ansible Tower
      • AWS CLI認証プロセス
      • AWSシークレットマネージャー同期
      • AWS KMSでの暗号化
      • Azure DevOps拡張機能
      • Azure Key Vaultとの同期
      • Azure Key Vaultでの暗号化
      • Bitbucketプラグイン
      • Dockerイメージ
      • Dockerランタイム
      • Docker Writerイメージ
      • Entrust HSM
      • Git - SSHでコミットに署名
      • GitHub Actions
      • GitLab
      • GCPシークレットマネージャー
      • Google Cloud Key Management Encryption (英語)
      • Hashicorp Vault
      • Heroku
      • Jenkinsプラグイン
      • Keeper Connection Manager
      • Kubernetes外部シークレットオペレータ
      • Kubernetes
      • Linux Keyring
      • Octopus Deploy
      • Oracle Key Vault Encryption (英語)
      • PowerShellプラグイン
      • ServiceNow
      • TeamCity
      • Teller
      • Terraformプラグイン
        • Terraformレジストリ
      • Windows資格情報マネージャー
      • XSOAR
    • トラブルシューティング
  • コマンダーCLI
    • コマンダーの概要
    • インストールとセットアップ
      • WindowsでのCLIインストール
      • MacでのCLIインストール
      • LinuxでのCLIインストール
      • Python開発者用セットアップ
      • .NET開発者用セットアップ
      • PowerShellモジュール
      • ログイン
      • 設定と使用法
        • AWS Secrets Manager
        • AWS Key Management Service
      • Windowsタスクによる自動化
      • AWS Lambdaで自動化
      • アンインストール
    • コマンドリファレンス
      • データのインポートとエクスポート
        • インポート/エクスポートコマンド
        • CyberArkからのインポート
        • LastPassデータのインポート
        • Delinea/Thycotic Secret Serverインポート
        • Keepassインポート
        • ManageEngineインポート
        • Mykiインポート
        • Proton Passインポート
        • CSVインポート
        • JSONインポート
      • レポート作成コマンド
        • レポートの種類
      • エンタープライズ管理コマンド
        • ユーザーの作成と招待
        • コンプライアンスコマンド
        • Breachwatchコマンド
        • SCIMプッシュ配信設定
      • レコードに関するコマンド
        • レコードタイプに関するコマンド
        • レコードタイプの作成
      • 共有コマンド
      • KeeperPAMコマンド
      • 接続コマンド
        • SSH
        • SSHエージェント
        • RDP
        • connectコマンド
        • SFTP同期
      • シークレットマネージャーコマンド
      • MSP管理コマンド
      • 各種コマンド
      • パスワードローテーション
        • パスワードローテーションコマンド
        • AWSプラグイン
        • Azureプラグイン
        • Microsoft SQL Serverのプラグイン
        • MySQLプラグイン
        • Oracleプラグイン
        • PostgreSQLプラグイン
        • PSPasswdプラグイン
        • SSHプラグイン
        • Unix Passwdプラグイン
        • Windowsプラグイン
        • Active Directoryプラグイン
        • 自動実行
    • サービスモードREST API
    • トラブルシューティング
GitBook提供
このページ内
  • 概要
  • 要件
  • Ciscoデバイスのテスト手順
  • 1. Cisco Sandboxにログインする
  • 2. デバイスを選択して起動する
  • 3. メールまたはDevNet環境で詳細情報を受け取る
  • 4. Cisco AnyConnect VPNをダウンロード
  • 5. VPNに接続
  • 6. 開発者の認証情報を保存する
  • 7. Cisco Authentication Recordにカスタムフィールドを追加
  • 8. ユーザーを作成
  • 9. ユーザー作成手順
  • 10. 新しいユーザーをテスト
  • ボルトでローテーションを設定
  • 1. ローテーションレコードをセットアップ
  • 2. PAMスクリプトを追加
  • 3. NOOPカスタムフィールドを追加
  • 4. パスワードローテーション設定を構成
  • Pythonスクリプト
  • Cisco IOS XEネットワークユーザー認証情報のローテーション
GitHubで編集
  1. 特権アクセス管理
  2. パスワードローテーション
  3. ローテーションの活用事例
  4. ネットワークデバイス

Cisco IOS XE

Cisco IOS XEネットワーク認証情報をローテーション

前へネットワークデバイス次へCisco Meraki

最終更新 5 か月前

概要

本ページでは、Cisco IOS XEネットワーク認証情報をローテーションするためのパスワードローテーションを設定する方法について解説します。

要件

Ciscoデバイスのテスト手順

以下は、Cisco デバイスをテストし、Ciscoサンドボックス環境で新しいユーザーを作成する手順です。

注: 仮想環境を使用する場合は、 Python環境設定に基づいてスクリプトの先頭にシェバン行を追加します。

1. Cisco Sandboxにログインする

  • Ciscoアカウントの認証情報を使用してログインします。

  • サンドボックスを選択して起動します。

2. デバイスを選択して起動する

  • サンドボックスカタログに移動します。

  • Ciscoデバイス (Cisco IOS XE など) に適したサンドボックスを選択します。

  • サンドボックスを起動します。

3. メールまたはDevNet環境で詳細情報を受け取る

サンドボックスを起動すると、接続の詳細情報が記載されたメールが届きます。または、DevNet環境の「Quick Access」で詳細情報を確認できます。

4. Cisco AnyConnect VPNをダウンロード

  • Cisco AnyConnect Secure Mobility Clientをダウンロードしてインストールします。

5. VPNに接続

  • Cisco AnyConnectセキュアモビリティクライアントを開きます。

  • メールまたはDevNet 環境からのVPN接続の詳細情報を入力します。

  • 提供されたユーザー名とパスワードを使用して接続します。

6. 開発者の認証情報を保存する

この時点で、開発者認証情報 (ホスト、ユーザー名、パスワード) が表示されます。これらの値を、Cisco Authentication Recordという名前でLoginタイプのKeeperレコードに保存します。ポストローテーションスクリプトを実行するには、このKeeperレコード名が必要になります。

7. Cisco Authentication Recordにカスタムフィールドを追加

Cisco Authentication Recordにhost_endpointという名前のカスタムフィールドを追加し、その値をホストアドレス (例: 10.10.20.48) に設定します。

8. ユーザーを作成

  • ターミナルまたはSSHクライアントを開きます。

  • 提供されたIP アドレスと認証情報を使用してCiscoデバイスに接続します。

9. ユーザー作成手順

  1. 管理者ユーザー (開発者) でログインします。

    ssh developer@<device-ip>
  2. 特権コマンドを有効にします。

    enable
  3. 構成モードに入ります。

    configure terminal
  4. パスワードを使用する新しいユーザーを作成します。

    username <user> password <pass>

10. 新しいユーザーをテスト

新しいユーザーでログインします。

ssh <user>@<device-ip>

注:<user>を作成したユーザー名に、<device-ip>をCiscoデバイスのIPアドレスに置き換えます。

ボルトでローテーションを設定

上記の準備が完了した後、以下を確認します。

1

すべての要件が満たされていることを確かにします。

2

ポストローテーションスクリプトが、Cisco管理者の認証情報を含むKeeperレコードを参照するようにします。

3

Keeper PAMユーザーレコードにポストローテーション スクリプトを添付します。このレコードのシークレットがローテーションされると、ポストローテーションスクリプトが実行され、指定されたCiscoデバイスユーザーのパスワードが更新されます。

1. ローテーションレコードをセットアップ

新しいPAMユーザーレコードを作成し、パスワードをローテーションするSnowflakeユーザーの詳細情報を保存します。

  • Ciscoデバイスの管理者認証情報と一致するようにユーザー名を設定します。

  • パスワードを、ユーザーに設定されている現在のパスワードに設定します。

  • Cisco Authentication Recordにhost_endpointという名前のカスタムフィールドを追加し、その値をホストアドレス (例: 10.10.20.48) に設定します。

2. PAMスクリプトを追加

3. NOOPカスタムフィールドを追加

  • ノーオペレーション (NOOP) アトミック実行を有効にします。

    • ユーザーの詳細情報が保存されている現在のPAMユーザーレコードで、 NOOPという名前の新しいカスタムテキストフィールドを作成し、その値をTrueに設定します。

4. パスワードローテーション設定を構成

  1. Rotation Typo (ローテーションタイプ): この例では、「On-Demand」に設定します。

  2. Password Complexity (パスワードの複雑さ): 特別な要件がない限り、デフォルトのままにしておきます。

  3. Rotation Settings (ローテーション設定): 先ほど設定したPAM構成を指定します。

  4. Administrative Credentials Record (管理者認証情報レコード): 空白のままでも構いません。

Pythonスクリプト

以下は、Cisco IOS XEのユーザー認証情報をローテーションする PAMスクリプトです。

'''
Ciscoユーザーアカウントのパスワードローテーションスクリプト

このスクリプトで、指定されたCiscoユーザーのパスワードがローテーションされます。
Cisco環境内でのユーザーパスワードの自動更新が容易になります。

注: Pythonインタープリタへのパスにスペースが含まれている場合、スクリプトの実行が失敗します。
これはLinuxのシバン行における既知の制限であり、
スペースを含まないパスにPythonインタープリタへのシンボリックリンクを作成する必要があります。
    例: sudo ln -s "/usr/local/bin/my python3.7" /usr/local/bin/pam_rotation_venv_python3
'''

import sys
import base64
import json
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
'''
デバッグのためにインストールされているパッケージを表示するオプションです。必要に応じてコメントを外して使用してください。
import pkg_resources
print("# \n# Installed packages for debugging:")
installed_packages = pkg_resources.working_set
installed_packages_list = sorted(["%s==%s" % (i.key, i.version) for i in installed_packages])
for m in installed_packages_list:
    print(f"  {m}")
'''

# requestsパッケージをインポート
try:
    import requests
except ImportError:
    print("# Error: The 'requests' package is not installed. Run 'pip install requests' to install it.")
    exit(1)

def get_username_details(cisco_url, cisco_admin_username, cisco_admin_password, cisco_user_name):
    """
    Verify the Cisco user.
    Args:
    - cisco_url (str): The host endpoint of the Cisco account to connect to.
    - cisco_admin_username (str): The username of the Cisco admin account.
    - cisco_admin_password (str): The password of the Cisco admin account.
    - cisco_user_name (str): The name of the Cisco user whose password needs to be rotated.
    Returns:
    - True if username found.
    """
    
    # ユーザー名APIエンドポイント用のリクエストURLを構築します。
    request_url = f"{cisco_url}username/"
    
    # RESTCONFリクエストのヘッダーを設定し、送受信するYANGデータをJSON形式に指定します。
    headers = {
    'Accept': 'application/yang-data+json',
    'Content-Type': 'application/yang-data+json'
    }
    try:
        # Ciscoルーターに対してGETリクエストを送信し、ユーザー詳細を取得します。
        response = requests.get(request_url, headers=headers, auth=(cisco_admin_username,cisco_admin_password), verify=False)
        response.raise_for_status()
        data = response.json()
        # レスポンスデータからユーザー名のリストを抽出します。
        usernames = data["Cisco-IOS-XE-native:username"]
        # ユーザー名のリストを反復処理して、指定されたユーザーを探します。
        for user in usernames:
            if user["name"]==cisco_user_name:
                # 指定されたユーザー名が見つかった場合、True を返します。
                return True
    except requests.exceptions.HTTPError as http_err:
        print(f"HTTP error occurred while fetching username details from Cisco router: {http_err}")
    except Exception as err:
        print(f"An error occurred: {err}")
    return False

def rotate(cisco_url, cisco_admin_username, cisco_admin_password, cisco_user_name, new_password):
    """
    Rotate the password for a given Cisco user.
    Args:
    - cisco_url (str): The host endpoint of the Cisco account to connect to.
    - cisco_admin_username (str): The username of the Cisco admin account.
    - cisco_admin_password (str): The password of the Cisco admin account.
    - cisco_user_name (str): The name of the Cisco user whose password needs to be rotated.
    - new_password (str): The new password to be set for the Cisco user.
    Returns:
    - None
    """
    
    # 指定されたユーザーがCiscoルーターに存在するか確認するために、get_username_details 関数を呼び出します。
    user = get_username_details(cisco_url, cisco_admin_username, cisco_admin_password, cisco_user_name)

    # ユーザーが存在しない場合、エラーメッセージを表示してプログラムを終了します。
    if not user:
        print(f"No user found with the username: {cisco_user_name}")
        exit(1)
    
    # RESTCONFリクエストのヘッダーを設定し、YANGデータをJSON形式で送受信することを指定します。
    headers = {
    'Accept': 'application/yang-data+json',
    'Content-Type': 'application/yang-data+json'
    }

    # ユーザーのパスワードを更新するためのPATCHリクエストのデータペイロードを作成します。
    data = {
    "Cisco-IOS-XE-native:native": {
        "username": [
                {
                "name": cisco_user_name,
                "password": {
                    "password": new_password
                    }
                }
            ]
        }
    }
    
    try:
        # CiscoルーターにPATCHリクエストを送信して、ユーザーのパスワードを更新します。
        response = requests.patch(cisco_url, headers=headers, auth=(cisco_admin_username,cisco_admin_password), data=json.dumps(data), verify=False)
        response.raise_for_status()
        print(f"Password updated successfully for user {cisco_user_name}")
    except requests.exceptions.HTTPError as http_err:
        print(f"HTTP error occurred while updating the password for the given user: {http_err}")
    except Exception as err:
        print(f"An error occurred: {err}")

def main():
    """
    Main function to rotate the password for a Cisco device user.

    Reads and decodes input parameters from stdin, including the authentication record details
    and the new password. Then, updates the password of the specified Cisco device user.
    """
    record_title = 'Cisco Authentication Record' #ユーザー名、パスワード、およびホストエンドポイントの詳細を含むレコードのタイトルと同じである必要があります。
    api_access_token_record = None
    params = None
    
    # 標準入力(stdin)から入力パラメータを読み取り、デコードします。
    for base64_params in sys.stdin:
        params = json.loads(base64.b64decode(base64_params).decode())

        # PAMスクリプトセクションで「Rotation Credential」レコードとして渡されたJSON文字列をデコードして読み込みます。
        records = json.loads(base64.b64decode(params.get('records')).decode())
        # 指定されたタイトルと一致するレコードを検索します。
        api_access_token_record = next((record for record in records if record['title'].lower() == record_title.lower()), None)
        break

    if api_access_token_record is None:
        print(f"# Error: No Record with the access token found. Title: {record_title}")
        exit(1)
    
    # レコードから詳細情報を抽出します。
    # Ciscoデバイスのエンドポイントであるホスト名(HostName)です。
    cisco_router_endpoint = api_access_token_record.get('host_endpoint') 
    # Ciscoデバイスの管理者ユーザー名。
    cisco_admin_username = api_access_token_record.get('login')
    # Ciscoデバイスの管理者パスワード。
    cisco_admin_password = api_access_token_record.get('password')

    # パスワードをローテーションする必要があるCiscoデバイスのユーザー名。
    cisco_user_name = params.get('user')
    # Ciscoデバイスのユーザーに設定する新しいパスワード。
    new_password = params.get('newPassword')
    
    # 必要なすべてのフィールドが存在するか確認します。
    if not all([cisco_router_endpoint, cisco_admin_username, cisco_admin_password, cisco_user_name]):
        print("# Error: One or more required fields are missing in the access token record.")
        exit(1)
    
    # Cisco API URLを構築します。
    cisco_url = f"https://{cisco_router_endpoint}/restconf/data/Cisco-IOS-XE-native:native/"

    # 指定されたCiscoデバイスユーザーのパスワードをローテーションします。
    rotate(cisco_url, cisco_admin_username, cisco_admin_password, cisco_user_name, new_password)

if __name__ == "__main__":
    main()

上記のSnowflakeポストローテーションスクリプトは、以下でも入手できます。

Cisco IOS XEネットワークユーザー認証情報のローテーション

注: パスワードがローテーションされるユーザーは管理者であってはならず、クライアントVPNに対して認証されている必要があります (ユーザー管理ポータルでユーザーを追加する際、認証オプションに「Yes」を選択する必要があります)。

PAMユーザーレコードでCiscoユーザー認証情報のローテーションを設定した後、[スクリプトのみを実行]をクリックすると認証情報がローテーションします。

へ移動します。

接続手順について、詳しくはをご覧ください。

パスワードのローテーションを実行する以下のを添付します。スクリプトにはコメントが含まれています。

Cisco DevNetサンドボックス
こちらのウェブサイト
Pythonスクリプト
https://github.com/Keeper-Security/Zero-Trust-KeeperPAM-Scripts/blob/main/cisco-ios-xe/update-cisco-user.pygithub.comgithub.com
  • KSMアプリケーション: Keeperシークレットマネージャー (KSM) アプリケーションが設定されていること。

  • 共有フォルダ: すべてのレコードが保存される共有フォルダを設定されていること。

  • PAM構成: PAM構成が設定されており、ゲートウェイが実行中でこの構成に接続されていること。

  • requestsライブラリ: Python環境にリクエストライブラリがインストールされていること。このライブラリは、CiscoデバイスへのHTTPリクエストを行うために必要となります。

  • AnyConnect Cisco VPNの設定: Ciscoデバイスに接続するために、KeeperゲートウェイをホストしているマシンにCisco AnyConnect VPNがインストールされ、適切に設定されていること。

  • Ciscoデバイスの接続テスト

requrstライブラリをインストール

requestsライブラリを使用すると、HTTPリクエストを簡単に送信できます。Keeperゲートウェイ環境で Python仮想環境をアクティブ化し、以下のコマンドを使用してライブラリをインストールします。

pip install requests

AnyConnect Cisco VPNの設定

KeeperゲートウェイをホストしているマシンにCisco AnyConnect VPNがインストールされており、Ciscoデバイスに接続できるように適切に設定されていることを確かにします。この設定は、Ciscoデバイスへの安全な接続を確立するために必要となります。