Azure のロールベースのアクセス制御を使用して Key Vault のキー、証明書、シークレットへのアクセス権を付与する
Note
Key Vault リソース プロバイダーでは、コンテナーとマネージド HSM という 2 種類のリソースがサポートされています。 この記事で説明するアクセス制御は、コンテナーにのみ適用されます。 マネージド HSM のアクセス制御の詳細については、「マネージド HSM アクセス制御」を参照してください。
Note
Azure portal を使った Azure App Service 証明書の構成では、Key Vault RBAC アクセス許可モデルはサポートされていません。 App Service グローバル ID (パブリック クラウド内の Microsoft Azure App Service など) に対する Key Vault Certificate User ロールの割り当てでは、Azure PowerShell、Azure CLI、ARM テンプレートのデプロイを使用できます。
Azure ロールベースのアクセス制御 (Azure RBAC) は Azure Resource Manager 上に構築された認可システムであり、Azure リソースに対する一元的なアクセス管理を提供します。
Azure RBAC を使用すると、ユーザーはキー、シークレット、証明書のアクセス許可を管理でき、すべてのキー コンテナーにわたるすべてのアクセス許可を 1 か所で管理できます。
Azure RBAC モデルを使用すると、ユーザーはさまざまなスコープ レベル (管理グループ、サブスクリプション、リソース グループ、または個別のリソース) にアクセス許可を設定することができます。 また、キー コンテナー用の Azure RBAC を使用すると、個々のキー、シークレット、および証明書に対して個別のアクセス許可を持つことができます。
詳細については、Azure ロールベースのアクセス制御 (Azure RBAC) に関するページを参照してください。
個々のキー、シークレット、証明書のロールの割り当てのベスト プラクティス
キー コンテナーのスコープでロールが割り当てられている環境 (開発、運用前、運用) ごとに、アプリケーションごとのコンテナーを使用することをお勧めします。
個々のキー、シークレット、証明書にロールを割り当てることは避ける必要があります。 例外は、個々のシークレットを複数のアプリケーション間で共有する必要があるシナリオです。たとえば、あるアプリケーションが別のアプリケーションのデータにアクセスする必要がある場合です。
Azure Key Vault 管理ガイドラインの詳細については、以下を参照してください。
Key Vault データ プレーン操作のための Azure の組み込みロール
Note
Key Vault Contributor
ロールは、キー コンテナーを管理するためのみの管理プレーン操作用です。 キー、シークレット、証明書へのアクセスは許可されていません。
組み込みのロール | 説明 | id |
---|---|---|
Key Vault Administrator | キー コンテナーとその内部にあるすべてのオブジェクト (証明書、キー、シークレットを含む) に対して、すべてのデータ プレーン操作を実行します。 キー コンテナー リソースの管理やロール割り当ての管理はできません。 「Azure ロールベースのアクセス制御」アクセス許可モデルを使用するキー コンテナーでのみ機能します。 | 00482a5a-887f-4fb3-b363-3b7fe8e74483 |
Key Vault Reader | キー コンテナーとその証明書、キー、シークレットのメタデータを読み取ります。 シークレット コンテンツやキー マテリアルなどの機密値を読み取ることはできません。 「Azure ロールベースのアクセス制御」アクセス許可モデルを使用するキー コンテナーでのみ機能します。 | 21090545-7ca7-4776-b22c-e363652d74d2 |
Key Vault の消去演算子 | 論理的に削除されたコンテナーの完全な削除を許可します。 | a68e7c17-0ab2-4c09-9a58-125dae29748c |
Key Vault Certificates Officer | キー コンテナーの証明書に対して、シークレットとキーの部分の読み取りと、アクセス許可の管理を除く、すべての操作を実行します。 「Azure ロールベースのアクセス制御」アクセス許可モデルを使用するキー コンテナーでのみ機能します。 | a4417e6f-fecd-4de8-b567-7b0420556985 |
Key Vault Certificate User | シークレットおよびキー部分を含む証明書の内容全体を読み取ります。 「Azure ロールベースのアクセス制御」アクセス許可モデルを使用するキー コンテナーでのみ機能します。 | db79e9a7-68ee-4b58-9aeb-b90e7c24fcba |
Key Vault Crypto Officer | キーコンテナーのキーに対して、アクセス許可の管理を除く任意の操作を実行します。 「Azure ロールベースのアクセス制御」アクセス許可モデルを使用するキー コンテナーでのみ機能します。 | 14b46e9e-c2b7-41b4-b07b-48a6ebf60603 |
Key Vault Crypto Service Encryption User | キーのメタデータを読み取り、wrap および unwrap 操作を実行します。 「Azure ロールベースのアクセス制御」アクセス許可モデルを使用するキー コンテナーでのみ機能します。 | e147488a-f6f5-4113-8e2d-b22465e65bf6 |
Key Vault Crypto User | キーを使用した暗号化操作を実行します。 「Azure ロールベースのアクセス制御」アクセス許可モデルを使用するキー コンテナーでのみ機能します。 | 12338af0-0e69-4776-bea7-57ae8d297424 |
Key Vault Crypto Service Release User | Azure Confidential Computing 環境およびこれと同等な環境用のリリース キー。 「Azure ロールベースのアクセス制御」アクセス許可モデルを使用するキー コンテナーでのみ機能します。 | |
Key Vault Secrets Officer | キーコンテナーのシークレットに対して、アクセス許可の管理を除く任意の操作を実行します。 「Azure ロールベースのアクセス制御」アクセス許可モデルを使用するキー コンテナーでのみ機能します。 | b86a8fe4-44ce-4948-aee5-eccb2c155cd7 |
Key Vault Secrets User | 秘密キーを使用し、証明書のシークレット部分を含むシークレットの内容を読み取ります。 「Azure ロールベースのアクセス制御」アクセス許可モデルを使用するキー コンテナーでのみ機能します。 | 4633458b-17de-408a-b874-0445c86b69e6 |
Azure 組み込みロールの定義の詳細については、「Azure 組み込みロール」を参照してください。
組み込みの Key Vault データ プレーン ロールの割り当ての管理
組み込みのロール | 説明 | id |
---|---|---|
Key Vault データ アクセス管理者 | Key Vault 管理者、Key Vault 証明書オフィサー、Key Vault Crypto オフィサー、Key Vault Crypto サービス暗号化ユーザー、Key Vault Crypto ユーザー、Key Vault 閲覧者、Key Vault シークレット オフィサー、または Key Vault シークレット ユーザー ロールのロールを追加または削除して、Azure Key Vault へのアクセスを管理します。 ロールの割り当てを制限する ABAC 条件が含まれています。 | 8b54135c-b56d-4d72-a534-26097cfdc8d8 |
Key Vault での Azure RBAC シークレット、キー、および証明書のアクセス許可の使用
Key Vault の新しい Azure RBAC アクセス許可モデルには、コンテナー アクセス ポリシーのアクセス許可モデルに代わるものです。
前提条件
Azure サブスクリプションが必要です。 これがない場合、開始する前に無料アカウントを作成できます。
ロールの割り当てを管理するには、Key Vault データ アクセス管理者 (特定の Key Vault ロールの割り当て/削除のみにアクセス許可が制限されている)、ユーザー アクセス管理者、所有者などの、Microsoft.Authorization/roleAssignments/write
と Microsoft.Authorization/roleAssignments/delete
のアクセス許可が必要です。
Key Vault で Azure RBAC アクセス許可を有効にする
Note
アクセス許可モデルを変更するには、所有者とユーザー アクセス管理者のロールの一部である、制限なしの 'Microsoft.Authorization/roleAssignments/write' アクセス許可が必要です。 'サービス管理者' や '共同管理者' などの従来のサブスクリプション管理者ロール、または制限された 'Key Vault データ アクセス管理者' を使用してアクセス許可モデルを変更することはできません。
新しいキー コンテナーで Azure RBAC アクセス許可を有効にします。
既存のキー コンテナーで Azure RBAC アクセス許可を有効にします。
重要
Azure RBAC アクセス許可モデルを設定すると、すべてのアクセス ポリシーのアクセス許可が無効になります。 同等の Azure ロールが割り当てられていない場合、停止が発生する可能性があります。
ロールを割り当てる
Note
スクリプトでは、ロール名ではなく一意のロール ID を使用することをお勧めします。 こうすると、ロールの名前が変更されても、スクリプトは引き続き機能します。 このドキュメントでは、読みやすいようにロール名が使用されています。
Azure CLI を使用してロールの割り当てを作成するには、az role assignment コマンドを使用します。
az role assignment create --role {role-name-or-id} --assignee {assignee-upn}> --scope {scope}
詳細については、「Azure CLI を使用して Azure ロールを割り当てる」を参照してください。
リソース グループのスコープ ロールの割り当て
az role assignment create --role "Key Vault Reader" --assignee {i.e user@microsoft.com} --scope /subscriptions/{subscriptionid}/resourcegroups/{resource-group-name}
詳細については、「Azure CLI を使用して Azure ロールを割り当てる」を参照してください。
前述のロール割り当てには、Key Vault 内の Key Vault オブジェクトを一覧表示する機能があります。
Key Vault スコープのロールの割り当て
az role assignment create --role "Key Vault Secrets Officer" --assignee {assignee-upn} --scope /subscriptions/{subscriptionid}/resourcegroups/{resource-group-name}/providers/Microsoft.KeyVault/vaults/{key-vault-name}
詳細については、「Azure CLI を使用して Azure ロールを割り当てる」を参照してください。
シークレット スコープのロールの割り当て
Note
キー コンテナー シークレット、証明書、キー スコープ ロールの割り当ては、セキュリティのベスト プラクティスに準拠するためにここで説明している限られたシナリオでのみ使用してください。
az role assignment create --role "Key Vault Secrets Officer" --assignee {i.e user@microsoft.com} --scope /subscriptions/{subscriptionid}/resourcegroups/{resource-group-name}/providers/Microsoft.KeyVault/vaults/{key-vault-name}/secrets/RBACSecret
詳細については、「Azure CLI を使用して Azure ロールを割り当てる」を参照してください。
テストして検証する
Note
ブラウザーにはキャッシュが使用されているため、ロールの割り当てを削除した後はページの更新が必要です。 ロールの割り当てが更新されるまで数分かかります
Key Vault レベルで "Key Vault Secrets Officer" ロールを使用せずに新しいシークレットの追加を検証します。
キー コンテナーの [アクセス制御 (IAM)] タブに移動し、このリソースへの "Key Vault Secrets Officer" ロールの割り当てを削除します。
以前に作成したシークレットに移動します。 すべてのシークレットのプロパティを表示できます。
新しいシークレットを作成すると ([シークレット] > [+ 生成またはインポート]) 次のエラーが表示されます。
シークレット レベルで "Key Vault Secret Officer" ロールを使用せずにシークレットの編集を検証します。
以前に作成したシークレットの [アクセス制御 (IAM)] タブに移動し、このリソースへの "Key Vault Secrets Officer" ロールの割り当てを削除します。
以前に作成したシークレットに移動します。 シークレットのプロパティが表示されます。
Key Vault レベルで Reader ロールを使用せずにシークレットの閲覧を検証します。
キー コンテナーのリソース グループの [アクセス制御 (IAM)] タブに移動し、"Key Vault Reader" ロールの割り当てを削除します。
Key Vault の [シークレット] タブに移動すると、次のエラーが表示されます。
カスタム ロールの作成
az role definition create コマンド
az role definition create --role-definition '{ \
"Name": "Backup Keys Operator", \
"Description": "Perform key backup/restore operations", \
"Actions": [
], \
"DataActions": [ \
"Microsoft.KeyVault/vaults/keys/read ", \
"Microsoft.KeyVault/vaults/keys/backup/action", \
"Microsoft.KeyVault/vaults/keys/restore/action" \
], \
"NotDataActions": [
], \
"AssignableScopes": ["/subscriptions/{subscriptionId}"] \
}'
カスタム ロールの作成方法の詳細については、以下を参照してください。
よく寄せられる質問
Key Vault のロールベースのアクセス制御 (RBAC) アクセス許可モデルのオブジェクト スコープ割り当てを使用して、Key Vault 内のアプリケーション チームに分離性を提供できますか?
いいえ。 RBAC アクセス許可モデルでは、Key Vault 内の個々のオブジェクトへのアクセスをユーザーやアプリケーションに割り当てることができますが、ネットワーク アクセス制御、監視、オブジェクト管理などの管理操作にはコンテナー レベルのアクセス許可が必要です。これにより、セキュリティで保護された情報がアプリケーション チーム全体のオペレーターに公開されます。