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提供
このページ内
  • 概要
  • 要件
  • Snowflakeコネクタをインストール
  • Snowflakeユーザー認証情報のローテーション設定
  • 1. ローテーションレコードをセットアップ
  • 2. PAMスクリプトを追加
  • 3. パスワードローテーション設定を構成
  • ポストローテーションPythonスクリプト
  • Snowflakeユーザー認証情報のローテーション
GitHubで編集
  1. 特権アクセス管理
  2. パスワードローテーション
  3. ローテーションの活用事例
  4. SaaSアカウント

Snowflakeユーザー

Keeperボルト内でSnowflakeユーザーのローテーション

前へOktaユーザー次へREST APIを使用した認証情報のローテーション (英語)

最終更新 3 か月前

概要

本ページでは、SnowflakeコネクタライブラリとKeeper PAMゲートウェイの「NOOP モード」を使用してパスワードローテーションを設定する方法を解説します。これは、で、ゲートウェイに主なローテーション方式を飛ばして、ポストローテーションスクリプトを直接実行するように指示します。

本ページには、要件、手順、Pythonスクリプトの例が含まれています。

要件

  1. KSMアプリケーション: Keeperシークレットマネージャー (KSM) アプリケーションが設定されていること。

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

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

  4. snowflake.connectorライブラリ: Python環境にsnowflakeコネクタライブラリがインストールされていること。

Snowflakeコネクタをインストール

Python用のSnowflakeコネクタは、PythonアプリケーションがSnowflakeに接続し、標準的な操作をすべて実行できるインターフェースです。ポストローテーションスクリプトを正常に実行するためには、Python環境にSnowflakeコネクタライブラリがインストールされている必要があります。Snowflakeコネクターをインストールするには、keeper-gateway環境内でPythonの仮想環境を有効にし、以下のコマンドを実行してください:

pip install snowflake-connector-python

Snowflakeユーザー認証情報のローテーション設定

以下は、Snowflakeユーザーレコードのローテーションを設定する手順となります。

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

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

  • ユーザー名をSnowflakeユーザーのメールアドレスと一致するように設定します。

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

2. PAMスクリプトを追加

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

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

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

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

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

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

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

ポストローテーションPythonスクリプト

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

#!/usr/local/bin/pam_rotation_venv_python3

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

このスクリプトでは、指定されたSnowflakeユーザーのパスワードを
Snowflake Connectorパッケージを使用してローテーションします。
これにより、Snowflake環境内でユーザーパスワードの自動更新が可能になります。

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

'''
デバッグのためにインストールされているパッケージを表示するオプションです。必要に応じてコメントを外して使用してください。
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}")
'''

# snowflakeコネクタパッケージをインポート
try:
    import snowflake.connector
except ImportError:
    print("# Error: The 'snowflake connector' package could not be imported. Run 'pip install snowflake-connector-python' to install it.")
    exit(1)

def rotate(snowflake_account_name, snowflake_admin_user, snowflake_admin_pass, snowflake_user_name, new_password):
    """
    Connects with Snowflake using the snowflake.connector module.
    Rotate the password for a given Snowflake user.

    Args:
    - snowflake_account_name (str): The name of the Snowflake account to connect to.
    - snowflake_admin_user (str): The username of the Snowflake admin account.
    - snowflake_admin_pass (str): The password of the Snowflake admin account.
    - snowflake_user_name (str): The name of the Snowflake user whose password needs to be rotated.
    - new_password (str): The new password to be set for the Snowflake user.

    Returns:
    - None
    """

    # snowflake.connectorモジュールを使用して、Snowflakeアカウントに接続します。
    try:
        conn = snowflake.connector.connect(
        user=snowflake_admin_user,
        password=snowflake_admin_pass,
        account=snowflake_account_name
        )
    except Exception as E:
        print(f"Unable to connect to snowflake account. Error: {E}")
        exit(1)
    
    # カーソルオブジェクトを作成
    cur = conn.cursor()
    
    # 新しいユーザーのパスワードを変更
    try:
        change_pass_query = f"ALTER USER {snowflake_user_name} SET PASSWORD = '{new_password}'"
        cur.execute(change_pass_query)
    except Exception as E:
        print(f"Unable to update the password. Error: {E}")
        exit(1)

    # カーソルと接続を閉じる
    cur.close()
    conn.close()

    print(f"Password successfully rotated for the given Snowflake User - {snowflake_user_name}")

def main():
    """
    Main function to rotate the password for a given Snowflake User.

    Reads and decodes input parameters from stdin, including the authentication record details
    and the new password. Then, updates the password of the specified Snowflake user.

    Args:
    - None

    Returns:
    - None
    """
    record_title = 'Snowflake Authentication Record' #これは、管理者認証情報を含むレコードのタイトルと同じである必要があります。
    admin_credential_record = None
    params = None
    
    # 標準入力からパラメータを読み取り、デコードする
    for base64_params in sys.stdin:
        params = json.loads(base64.b64decode(base64_params).decode())
        '''
        # Optionally print available params for debugging. Uncomment if needed.
        # print(f"# \n# Available params for the script:")
        # for key, value in params.items():
        #     print(f"#     {key}={value}")
        '''

        records = json.loads(base64.b64decode(params.get('records')).decode()) # PAMスクリプトセクションで「Rotation Credential」レコードとしてJSON文字列で渡されたレコードをデコードしてロードする

        # タイトルを使って、管理者アカウントの詳細を含むレコードを見つける
        admin_credential_record = next((record for record in records if record['title'].lower() == record_title.lower()), None)
        break

    if admin_credential_record is None:
        print(f"# Error: No Record with the access token found. Title: {record_title}")
        exit(1)

    # レコードから詳細を抽出する
    snowflake_account_name = admin_credential_record.get('snowflake_account_name')
    snowflake_admin_user = admin_credential_record.get('login')
    snowflake_admin_pass = admin_credential_record.get('password')
    
    # パスワードをローテーションする必要があるユーザーのユーザー名
    snowflake_user_name = params.get('user')

    # 新しくローテーションされたパスワードを抽出
    new_password = params.get('newPassword')
    
    if not all([snowflake_account_name, snowflake_admin_user, snowflake_admin_pass]):
        print("# Error: One or more required fields are missing in the authentication record.")
        exit(1)
   
    # 指定されたSnowflakeユーザーのパスワードをローテーションする
    rotate(snowflake_account_name, snowflake_admin_user, snowflake_admin_pass, snowflake_user_name, new_password)

if __name__ == "__main__":
    main()

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

Snowflakeユーザー認証情報のローテーション

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

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

Pythonスクリプト
Keeperレコードに設定されるフラグ
https://github.com/Keeper-Security/Zero-Trust-KeeperPAM-Scripts/tree/main/snowflakegithub.comgithub.com

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