Azure Key Vaultシークレットインポート

azure-secrets-import コマンドは、Azure Key Vault内の有効なシークレットをすべて読み取り、指定した共有フォルダにKeeperレコードとして取り込みます。各シークレット名がレコードのタイトルとなり、シークレットの値はレコード上の名前付きフィールドに解析されます。

  • エイリアス: azsi

  • 要件: azure-keyvault-secrets および azure-identitypip install keeper-commander[azure] でインストール


認証

1

サービスプリンシパルフラグ

--tenant-id--client-id--client-secret をすべて指定した場合、ClientSecretCredential による認証が行われます。3つのフラグはセットで指定する必要があり、一部だけの指定はエラーになります。

2

DefaultAzureCredential

明示的なフラグがない場合は、Azure SDKの DefaultAzureCredential チェーンが使用され、以下の順序で確認されます。

  • 環境変数 (AZURE_TENANT_IDAZURE_CLIENT_IDAZURE_CLIENT_SECRET など)

  • ワークロードID (Kubernetes)

  • 実行中のAzure VM、App Service、コンテナにアタッチされたマネージドID

  • Azure CLI (az login)

  • Azure PowerShell

  • Azure Developer CLI

本番環境では、認証情報フラグを省略し、マネージドIDまたはAzure CLIに任せることが多いです。


基本的な使い方

azure-secrets-import <vault-name> <folder-uid> [options]

2つの位置引数が必須です。

  • vault-name — Azure Key Vaultの短い名前 (例: my-vault)。https://<vault-name>.vault.azure.net/ という完全なVault URLが自動的に構築されます。

  • folder-uid — インポート先となるKeeper共有フォルダの一意識別子。コマンダー内で list-sf を実行すると確認できます。

My Vault> list-sf

引数とフラグ

位置引数

引数
説明

vault_name

必須。 Azure Key Vaultの短い名前 (例: my-vault)。

folder

必須。 シークレットのインポート先となる共有フォルダUID。

認証情報フラグ

フラグ
説明

--tenant-id ID

Azure ADテナントID。--client-id および --client-secret とセットで必須。

--client-id ID

Azure ADアプリケーション (クライアント) ID。--tenant-id および --client-secret とセットで必須。

--client-secret SECRET

Azure ADクライアントシークレット。--tenant-id および --client-id とセットで必須。

サービスプリンシパル認証では、3つの認証情報フラグをすべて指定する必要があります。3つとも省略すると DefaultAzureCredential が使用されます。

動作フラグ

フラグ
説明

--record-type TYPE

インポートするレコードのKeeperレコードタイプ。既定値は login

--dry-run

レコードを作成せず、インポート対象のシークレットを一覧表示。

フィルタフラグ

すべてのフィルタフラグは任意で、AND条件で組み合わされます。指定したすべてのフィルタを満たすシークレットのみがインポートされます。

フラグ
説明

--name NAME

この名前と完全一致するシークレットのみインポート。

--name-starts-with PREFIX

名前が PREFIX で始まるシークレットのみインポート。

--name-ends-with SUFFIX

名前が SUFFIX で終わるシークレットのみインポート。

--name-contains SUBSTRING

名前に SUBSTRING を含むシークレットのみインポート。

--tags KEY=VALUE[,KEY=VALUE,...]

指定したキー/値のタグをすべて持つシークレットのみインポート。


シークレットのフィルタリング

フィルタを使うと、残りのシークレットに触れずに対象のサブセットだけをインポートできます。指定した各フィルタに一致する必要があります。

無効なシークレットは、フィルタ設定にかかわらず常にスキップされます。

名前フィルタ

名前フィルタは、Azure Key Vaultに保存されているシークレット名に対して適用されます。

複数の名前フィルタを組み合わせることもできます。それぞれが追加の条件になります。

タグフィルタ

Azure Key Vaultのシークレットには任意のキー/値タグを付与できます。--tags フラグは、カンマ区切りの KEY=VALUE ペアのリストを受け取ります。指定したタグをすべて、かつ与えた値と完全一致で持つシークレットのみが対象になります。

タグのキーと値は大文字と小文字を区別し、Azureに保存されている値と完全一致する必要があります。

フィルタの組み合わせ

すべてのフィルタ種別を1つのコマンドで併用できます。

リストしたすべてのフィルタを満たすシークレットのみがインポートされます。


シークレット値の形式

Azure Key Vaultからシークレットを取得すると、その値は以下のルールに従い、優先順位の高い順に名前付きフィールド値へ解析されます。

1. JSONオブジェクト

シークレット値が { で始まり、オブジェクトを表す有効なJSONである場合、オブジェクト内の各キー/値ペアがKeeperレコード上の個別フィールドになります。

usernamepasswordhost の3フィールドになります。

2. KEY=VALUE行 (シェル形式)

シークレット値がJSONでない場合、改行区切りの KEY=VALUE ペア (.env ファイルと同じ形式) として解析を試みます。# で始まる行と空行は無視されます。

usernamepasswordhost の3フィールドになります。

3. 代替 — プレーン文字列

JSONでも KEY=VALUE 行でも解析できない場合、文字列全体が value という名前の単一フィールドに保存されます。

value = s3cur3P@ss! の1フィールドになります。


Keeperレコードの構造

インポートされた各シークレットは、対象の共有フォルダにTypedRecordが1件作成されます。

  • タイトル — 元のAzure Key Vaultシークレット名 (例: prod-database-primary)

  • レコードタイプ--record-type で制御 (既定値: login)

フィールドの配置

シークレットから解析したキー/値ペアは、レコードに配置する前にKeeperフィールドタイプへマッピングされます。

解析キー (大文字小文字を区別しない)
Keeperフィールドタイプ
配置

username, user, login

login

型付きフィールド

password, pass, secret, secret_value

password

型付きフィールド

url, endpoint, host

url

型付きフィールド

email, mail

email

型付きフィールド

note, notes

レコードのNotesセクション

上記以外

text

型付きフィールド

note および notes キーは、型付きフィールドやカスタムフィールドではなく、レコードのNotesフィールドに書き込まれます。上記以外のキーは text 型付きフィールドとして保存されます。同じ意味のタイプ (loginpasswordurlemail など) が複数ある場合、最初の出現が型付きフィールドのスロットを占め、以降はカスタムフィールドに保存されます。


DefaultAzureCredentialですべてのシークレットをインポート

マネージドID、Azure CLIログイン、または環境変数を自動的に使用します。

サービスプリンシパルで認証

インポート対象のプレビュー (ドライラン)

すべてのフィルタを通過するシークレット名を表示し、レコードは作成しません。

paymentsチームが所有する本番シークレットのみインポート

既知の単一シークレットをインポート

ステージングのデータベースシークレットを serverCredentials レコードとしてインポート

複雑なフィルタをコミット前にドライラン

別テナントのVaultをサービスプリンシパル認証でインポート

最終更新