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 モデルを使用すると、ユーザーはさまざまなスコープ レベル (管理グループ、サブスクリプション、リソース グループ、または個別のリソース) にアクセス許可を設定することができます。 また、Key Vault 用の Azure RBAC では、個々のキー、シークレット、および証明書に対してユーザーに個別のアクセス許可を持たせることもできます

詳細については、Azure ロールベースのアクセス制御 (Azure RBAC) に関するページを参照してください。

個々のキー、シークレット、証明書のロールの割り当てのベスト プラクティス

Key Vault スコープでロールが割り当てられている環境 (開発、実稼働前、および実稼働) ごとに、アプリケーションごとのコンテナーを使用することをお勧めします。

個々のキー、シークレット、証明書にロールを割り当てることは避ける必要があります。 一般的なガイダンスの例外:

  • 個々のシークレットを複数のアプリケーション間で共有する必要があるシナリオ。たとえば、あるアプリケーションが他のアプリケーションのデータにアクセスする必要がある場合など

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 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 データ アクセス管理者ユーザー アクセス管理者所有者など、Microsoft.Authorization/roleAssignments/writeMicrosoft.Authorization/roleAssignments/delete のアクセス許可が必要です。

Key Vault で Azure RBAC アクセス許可を有効にする

Note

アクセス許可モデルを変更するには、所有者ロールとユーザー アクセス管理者ロールの一部である、"Microsoft.Authorization/roleAssignments/write" アクセス許可が必要です。 "サービス管理者" や "共同管理者" などの従来のサブスクリプション管理者ロールはサポートされていません。

  1. 新しいキー コンテナーで Azure RBAC アクセス許可を有効にします。

    Azure RBAC アクセス許可を有効にする - 新しいコンテナー

  2. 既存のキー コンテナーで 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> --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 {i.e jalichwa@microsoft.com} --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

ブラウザーにはキャッシュが使用されているため、ロールの割り当てを削除した後はページの更新が必要です。
ロールの割り当てが更新されるまで数分かかります

  1. Key Vault レベルで "Key Vault Secrets Officer" ロールを使用せずに新しいシークレットの追加を検証します。

    1. キー コンテナーの [アクセス制御 (IAM)] タブに移動し、このリソースへの "Key Vault Secrets Officer" ロールの割り当てを削除します。

      割り当ての削除 - Key Vault

    2. 以前に作成したシークレットに移動します。 すべてのシークレットのプロパティを表示できます。

      アクセス権を持つシークレット ビュー

    3. 新しいシークレットを作成すると ([シークレット] > [+ 生成またはインポート]) 次のエラーが表示されます。

      新しいシークレットを作成する

  2. シークレット レベルで "Key Vault Secret Officer" ロールを使用せずにシークレットの編集を検証します。

    1. 以前に作成したシークレットの [アクセス制御 (IAM)] タブに移動し、このリソースへの "Key Vault Secrets Officer" ロールの割り当てを削除します。

    2. 以前に作成したシークレットに移動します。 シークレットのプロパティが表示されます。

      アクセス権のないシークレット ビュー

  3. Key Vault レベルで Reader ロールを使用せずにシークレットの閲覧を検証します。

    1. キー コンテナーのリソース グループの [アクセス制御 (IAM)] タブに移動し、"Key Vault Reader" ロールの割り当てを削除します。

    2. 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}"] \
}'

カスタム ロールの作成方法の詳細については、以下を参照してください。

Azure カスタム ロール

よく寄せられる質問

Key Vault のロールベースのアクセス制御 (RBAC) アクセス許可モデルのオブジェクト スコープ割り当てを使用して、Key Vault 内のアプリケーション チームに分離性を提供できますか?

いいえ。 RBAC アクセス許可モデルでは、Key Vault 内の個々のオブジェクトへのアクセスをユーザーやアプリケーションに割り当てることができますが、ネットワーク アクセス制御、監視、オブジェクト管理などの管理操作にはコンテナー レベルのアクセス許可が必要です。これにより、セキュリティで保護された情報がアプリケーション チーム全体のオペレーターに公開されます。

詳細情報