Note
Key Vaultの ABAC Azureはプレビュー段階です。 一般提供の前に、一部の側面が変わる可能性があります。 プレビューの使用条件については、 追加の使用条件を参照してください。
この記事では、Azure Key Vaultのロールの割り当てAzure条件で使用できる、サポートされるアクション、属性、および演算子について説明します。 ロールの割り当て条件のしくみの概要については、「属性ベースのアクセス制御 (AZURE ABAC) Azureとは」を参照してください。 特定のアクセス許可が影響を受けるKey Vaultデータ アクションの一覧については、データ プレーン操作ガイドのAzure RBAC Key Vault参照してください。
概要
ロールの割り当てに条件を追加して、Azure RBAC 上に構築Key Vaultの ABAC をAzureします。 Azureは、実行時にアクセスされるリソースまたは受信要求の属性に対して各条件を評価し、比較演算子に基づいて要求を許可または拒否します。
Key Vaultにロールの割り当て条件を使用する利点は次のとおりです。
- シークレットへのきめ細かいアクセス。 プリンシパルを、名前が特定のパターン (
app-*やteam-prod-*など) に一致するシークレットに制限するか、コンテナー名で特定のキー コンテナーに制限します。 - 管理するロールの割り当てが少なくなります。 同じアクセス許可をモデル化する多数の個別の割り当てではなく、セキュリティ グループに対して単一の条件ゲート ロールの割り当てを使用します。 ABAC は、ロール管理をスケーリングするのに役立ちます。ロールの割り当てでまだ付与されていないアクセス許可は付与されません。
- 既存のAzure RBAC を拡張します。 ABAC レイヤーは、既存のロールの割り当ての上に配置されます。 RBAC を使用するために RBAC を置き換える必要はありません。
このプレビューでは、Key Vaultの ABAC はシークレット データ アクションにのみ適用され、コンテナー名とシークレット名という 2 つの属性がサポートされています。 キー データ アクション、証明書データ アクション、タグベースの属性、トークン属性、および組み込みのKey Vault ABAC 条件は、どのロールにも含まれません。
ABAC 条件を使用するには、キー コンテナーのアクセス許可モデルを RBAC Azure設定する必要があります。 背景については、「AZURE RBAC とアクセス ポリシー」および「Key Vault API バージョン 2026-02-01 以降の準備」を参照してください。
条件の形式
条件には、次の一般的な形式が使用されます。
@Resource[<ResourceType>:<AttributeName>] <Operator> '<Value>'
| コンポーネント | 説明 |
|---|---|
@Resource |
アクセスするリソースの属性を参照します。 属性が受信要求 (たとえば、まだ存在しないシークレットの名前) を記述する場合は、 @Request を使用します。 |
ResourceType |
Azure Resource Manager リソースの種類。 このプレビューのKey Vaultの場合は、Microsoft.KeyVault/vaultsまたはMicrosoft.KeyVault/vaults/secrets。 |
AttributeName |
評価する特定の属性。 このプレビューでは、 name のみがサポートされている属性です。 |
Operator |
比較演算子。 サポートされている演算子を参照してください。 |
Value |
比較対象のリテラル値。 |
条件バージョンは 2.0に設定する必要があります。 完全な文法については、ロールの割り当て条件Azure形式と構文に関するページを参照してください。
サポートされている演算子
ABAC 条件Azure Key Vault、Azure ABAC 条件形式で定義されているすべての文字列比較演算子がサポートされます。 演算子とその動作の完全な一覧については、「 文字列比較演算子」を参照してください。
Note
ABAC 文字列比較演算子Azure大文字と小文字が区別されますが、コンテナー名とオブジェクト名Key Vault大文字と小文字は区別されず、小文字に正規化されます。 その結果、大文字と小文字が区別される照合は、ABAC 条件Key Vault適用されません。 条件で小文字を使用します。大文字を含む値は、コンテナー名またはシークレット名と一致しません。
Azure Key Vaultアクション
ABAC 条件は、次のKey Vaultシークレット データ アクションに適用できます。 各サブセクションでは、アクション、基になる DataAction、評価する属性ソース (リソースまたは要求)、および条件の例について説明します。
シークレットを取得する
| 財産 | 価値 |
|---|---|
| 表示名 | シークレットを取得する |
| 説明 | シークレットの値を取得します。 |
| DataAction | Microsoft.KeyVault/vaults/secrets/getSecret/action |
| リソース属性 | シークレット名 |
| Example | !(ActionMatches{'Microsoft.KeyVault/vaults/secrets/getSecret/action'}) OR @Resource[Microsoft.KeyVault/vaults/secrets:name] StringStartsWith 'test-app' |
シークレット メタデータの読み取り
| 財産 | 価値 |
|---|---|
| 表示名 | シークレット メタデータの読み取り |
| 説明 | シークレットのプロパティを一覧表示または表示しますが、その値は表示しません。 |
| DataAction | Microsoft.KeyVault/vaults/secrets/readMetadata/action |
| リソース属性 | シークレット名 |
| Example | !(ActionMatches{'Microsoft.KeyVault/vaults/secrets/readMetadata/action'}) OR @Resource[Microsoft.KeyVault/vaults/secrets:name] StringStartsWith 'api-' |
Warning
readMetadata/actionでは、1 つのシークレットのプロパティ (シークレット名を含む) の取得と、コンテナー内のシークレットの一覧表示 (シークレットごとの名前のないコレクション呼び出し) の両方について説明します。 ABAC は、リストの結果に対して行単位ではなく、アクションごとの条件を評価するため、 readMetadata/action のシークレット名の条件は、403 エラーでリスト呼び出しに失敗します。 name 属性はコレクション要求に存在しないため、一致できません。 この動作は、ポータルの [シークレット] ブレードに空のリストとして表示されます。
プリンシパルにリスト内のすべてのシークレット名を表示し、パターンに一致する値のみを開く場合は、 readMetadata/actionゲートしないでください。 代わりに、 readMetadata/action 無条件で付与し、シークレット名の条件を getSecret/actionに適用します。
名前プレフィックスを持つシークレットへの読み取りアクセスの制限の例を参照してください。
シークレットを設定する
| 財産 | 価値 |
|---|---|
| 表示名 | シークレットを設定する |
| 説明 | シークレットの値を設定します。 シークレットが存在しない場合は、最初のバージョンが作成されます。 それ以外の場合は、指定された値で新しいバージョンが作成されます。 |
| DataAction | Microsoft.KeyVault/vaults/secrets/setSecret/action |
| 要求属性 | シークレット名 |
| Example | !(ActionMatches{'Microsoft.KeyVault/vaults/secrets/setSecret/action'}) OR @Request[Microsoft.KeyVault/vaults/secrets:name] StringStartsWith 'app-' |
シークレットを更新する
| 財産 | 価値 |
|---|---|
| 表示名 | シークレットを更新する |
| 説明 | 指定されたシークレットに関連付けられている属性を更新します。 |
| DataAction | Microsoft.KeyVault/vaults/secrets/update/action |
| リソース属性 | シークレット名 |
| Example | !(ActionMatches{'Microsoft.KeyVault/vaults/secrets/update/action'}) OR @Resource[Microsoft.KeyVault/vaults/secrets:name] StringStartsWith 'app-' |
シークレットを削除する
| 財産 | 価値 |
|---|---|
| 表示名 | シークレットを削除する |
| 説明 | シークレットを削除します。 すべてのバージョンが削除されます。 |
| DataAction | Microsoft.KeyVault/vaults/secrets/delete |
| リソース属性 | シークレット名 |
| Example | !(ActionMatches{'Microsoft.KeyVault/vaults/secrets/delete'}) OR @Resource[Microsoft.KeyVault/vaults/secrets:name] StringStartsWith 'temp-' |
バックアップ シークレット
| 財産 | 価値 |
|---|---|
| 表示名 | バックアップ シークレット |
| 説明 | シークレットのバックアップ ファイルを作成します。 このファイルを使用して、同じサブスクリプションのキー コンテナー内のシークレットを復元できます。 制限が適用される場合があります。 |
| DataAction | Microsoft.KeyVault/vaults/secrets/backup/action |
| リソース属性 | シークレット名 |
| Example | !(ActionMatches{'Microsoft.KeyVault/vaults/secrets/backup/action'}) OR @Resource[Microsoft.KeyVault/vaults/secrets:name] StringStartsWith 'critical-' |
シークレットの復元
| 財産 | 価値 |
|---|---|
| 表示名 | シークレットの復元 |
| 説明 | Key Vaultによって生成されたバックアップ ファイルからシークレットとそのすべてのバージョンを復元します。 |
| DataAction | Microsoft.KeyVault/vaults/secrets/restore/action |
| 要求属性 | シークレット名 |
| Example | !(ActionMatches{'Microsoft.KeyVault/vaults/secrets/restore/action'}) OR @Request[Microsoft.KeyVault/vaults/secrets:name] StringStartsWith 'app-' |
シークレットを回復する
| 財産 | 価値 |
|---|---|
| 表示名 | シークレットを回復する |
| 説明 | 削除されたシークレットを回復します。 この操作では、削除操作の取り消しが実行され、論理的な削除が有効になっているコンテナーに適用されます。 |
| DataAction | Microsoft.KeyVault/vaults/secrets/recover/action |
| リソース属性 | シークレット名 |
| Example | !(ActionMatches{'Microsoft.KeyVault/vaults/secrets/recover/action'}) OR @Resource[Microsoft.KeyVault/vaults/secrets:name] StringStartsWith 'app-' |
シークレットの消去
| 財産 | 価値 |
|---|---|
| 表示名 | シークレットの消去 |
| 説明 | 削除されたシークレットを消去し、回復不能にします。 |
| DataAction | Microsoft.KeyVault/vaults/secrets/purge/action |
| リソース属性 | シークレット名 |
| Example | !(ActionMatches{'Microsoft.KeyVault/vaults/secrets/purge/action'}) OR @Resource[Microsoft.KeyVault/vaults/secrets:name] StringStartsWith 'old-' |
属性ソース
属性は、要求時に評価されるプロパティを表します。 リソース属性は、アクセスされるリソースを表します。 要求属性は、リソースがまだ存在しない場合 (たとえば、 setSecret 中や restore中) に受信要求を記述します。
コンテナー名
この属性を使用して、名前が特定のパターンと一致するキー コンテナーへのアクセスのスコープを設定します。 サブスクリプションまたはリソース グループスコープで条件を適用すると、Azureは、プリンシパルがアクセスを試みるすべてのコンテナーのコンテナー名を評価します。
| 財産 | 価値 |
|---|---|
| 表示名 | コンテナー名 |
| 説明 | アクセスするキー コンテナーの名前。 |
| 特性 | Microsoft.KeyVault/vaults:name |
| Attribute source (属性ソース) | 資源 |
| 属性の種類 | String |
| 適用可能なアクション | すべてのKey Vaultシークレット データ アクション (グローバル属性) |
条件の例:
@Resource[Microsoft.KeyVault/vaults:name] StringStartsWith 'prod-'
@Resource[Microsoft.KeyVault/vaults:name] StringEquals 'sample-vault'
@Resource[Microsoft.KeyVault/vaults:name] StringLike 'team-*-prod'
シークレット名 (リソース)
この属性は、評価時にシークレットが既に存在する場合に使用します。
| 財産 | 価値 |
|---|---|
| 表示名 | シークレット名 |
| 説明 | アクセスするシークレットの名前。 |
| 特性 | Microsoft.KeyVault/vaults/secrets:name |
| Attribute source (属性ソース) | 資源 |
| 属性の種類 | String |
| 適用可能なアクション |
getSecret/action、readMetadata/action、update/action、delete、backup/action、recover/action、purge/action |
条件の例:
@Resource[Microsoft.KeyVault/vaults/secrets:name] StringStartsWith 'test-app'
@Resource[Microsoft.KeyVault/vaults/secrets:name] StringLike 'api-key-*'
シークレット名 (要求)
この属性は、作成時や復元中など、評価時にシークレットがまだ存在しない可能性がある場合に使用します。
| 財産 | 価値 |
|---|---|
| 表示名 | シークレット名 (要求) |
| 説明 | 要求されるシークレットの名前。 |
| 特性 | Microsoft.KeyVault/vaults/secrets:name |
| Attribute source (属性ソース) | 依頼 |
| 属性の種類 | String |
| 適用可能なアクション |
setSecret/action、restore/action |
条件の例:
@Request[Microsoft.KeyVault/vaults/secrets:name] StringStartsWith 'app-'
@Request[Microsoft.KeyVault/vaults/secrets:name] StringLike 'config-*'
ABAC 条件をサポートするロール
KEY VAULTシークレット dataActionsを含む任意のロールに ABAC 条件を適用できます。 コントロール プレーン アクション (所有者やポリシー管理者など) のみを含むロールでは、Azureはデータ プレーン操作でのみ条件を評価するため、ABAC 条件はサポートされません。 このプレビューでは、ABAC 条件Key Vault事前割り当て済みのロールは組み込みロールに含めず、ロールの割り当てを作成するときに条件を作成します。
次の組み込みロールには、シークレット データ アクションが含まれており、このプレビューでは ABAC 条件がサポートされています。 完全なロール定義と ID については、Key Vaultデータ プレーン操作の組み込みロールAzure参照してください。
| 役割 | 説明 | ID | 条件のサポート |
|---|---|---|---|
| キーコンテナー管理者 | キー コンテナーとその中のすべてのオブジェクトに対して、すべてのデータプレーン操作を実行します。 | 00482a5a-887f-4fb3-b363-3b7fe8e74483 |
シークレット操作のリソース属性と要求属性 |
| キー コンテナー シークレット責任者 | シークレットに対して任意のアクションを実行します。 | b86a8fe4-44ce-4948-aee5-eccb2c155cd7 |
読み取りとライフサイクル操作のリソース属性。 setSecret および restore 操作の属性を要求する |
| Key Vault 秘密ユーザー | シークレット コンテンツを読み取れます。 | 4633458b-17de-408a-b874-0445c86b69e6 |
シークレット読み取り操作のリソース属性 |
| キー コンテナー閲覧者 | コンテナーとそのオブジェクトのメタデータを読み取ります。 | 21090545-7ca7-4776-b22c-e363652d74d2 |
1 つのシークレットの readMetadata/action のリソース属性。 ここでのシークレット名の条件により、リスト呼び出しがブロックされます。[ シークレット メタデータの読み取り] の下の警告を参照してください。 |
| Key Vault 証明書ユーザー | 証明書のコンテンツを読み取れます。 | db79e9a7-68ee-4b58-9aeb-b90e7c24fcba |
getSecretとreadMetadataのリソース属性 (証明書はシークレット エンドポイントを介して取得されます。シークレット名は証明書名と等しくなります) |
| カスタム ロール | Key Vaultのシークレット dataActionsを含むカスタム ロール定義。 |
- | どのシークレット dataActions が含まれているかによって異なります |
Note
ABAC 条件は、(レガシ コンテナー アクセス ポリシーではなく) Azure RBAC によって割り当てられたロールのみがサポートされます。 キー コンテナーには、ロールベースのアクセス制御をAzureアクセス許可モデルが設定されている必要があります。 API バージョン 2026-02-01 以降では、Azure RBAC が新しく作成されたコンテナーの既定値です。 詳細については、「Key Vault API バージョン 2026-02-01 以降のPrepareを参照してください。
条件の例
次の例は、Key Vault シークレットの一般的な ABAC パターンを示しています。 条件構文の詳細については、ロールの割り当て条件の形式と構文Azure参照してください。
例: 名前プレフィックスを持つシークレットへの読み取りアクセスを制限する
プリンシパルが、 test-appで始まる名前のシークレットのみを読み取ることを許可します。
- ロール: Key Vault シークレット ユーザー
- スコープ: Key Vault リソース
- 条件:
(
!(ActionMatches{'Microsoft.KeyVault/vaults/secrets/getSecret/action'})
OR
(
@Resource[Microsoft.KeyVault/vaults/secrets:name] StringStartsWith 'test-app'
)
)
動作:
- 許可:
test-app-secret1の読み取り。 - 拒否 (
ForbiddenByRbac):test-db-passwordの読み取り。
例: コンテナー名プレフィックスによって特定のコンテナー内のシークレットへのアクセスを制限する
名前が kv-prod で始まるコンテナー内でのみ、プリンシパルにシークレットの読み取りを許可します。
- ロール: Key Vault シークレット ユーザー
- スコープ: サブスクリプション
- 条件:
@Resource[Microsoft.KeyVault/vaults:name] StringStartsWith 'kv-prod'
動作:
- 許可:
kv-prod-1へのアクセス。 - 拒否:
test-kvへのアクセス。
例: 新しく作成されたシークレットを名前プレフィックスに制限する
プリンシパルにシークレットの作成を許可するのは、シークレット名が app- で始まる場合のみです。 評価時にシークレットがまだ存在しないため、Request 属性を使用します。
- ロール: Key Vault シークレット オフィサー
- スコープ: Key Vault リソース
- 条件:
(
!(ActionMatches{'Microsoft.KeyVault/vaults/secrets/setSecret/action'})
OR
(
@Request[Microsoft.KeyVault/vaults/secrets:name] StringStartsWith 'app-'
)
)
例: コンテナーとシークレット名の条件を結合する
名前が api- で始まるコンテナー内のkv-prodで始まるシークレットのみを読み取るプリンシパルを制限します。
- ロール: Key Vault シークレット ユーザー
- スコープ: サブスクリプション
- 条件:
(
!(ActionMatches{'Microsoft.KeyVault/vaults/secrets/getSecret/action'})
OR
(
@Resource[Microsoft.KeyVault/vaults:name] StringStartsWith 'kv-prod'
AND
@Resource[Microsoft.KeyVault/vaults/secrets:name] StringStartsWith 'api-'
)
)
関連するコンテンツ
- Azure CLIを使用してKey Vault シークレットのロール割り当て条件を追加する (プレビュー)
- Azure PowerShellを使用してKey Vault シークレットのロール割り当て条件を追加する (プレビュー)
- Azure の属性ベースのアクセス制御 (Azure ABAC) とは何ですか?
- Azure のロールの割り当て条件の形式と構文
- Azure RBAC を使用して Key Vault のキー、証明書、シークレットへのアクセスを提供する
- Azure ロール割り当ての条件のトラブルシューティング
- Key Vault アクセスの問題のトラブルシューティング
- Key Vault API バージョン 2026-02-01 以降の準備