<p>本記事は<strong>Geminiの出力をプロンプト工学で整理した業務ドラフト(未検証)</strong>です。</p>
<h1 class="wp-block-heading">Azure Key VaultをアクセスポリシーからAzure RBACへ:大規模運用のための移行戦略</h1>
<p>【導入】
従来のアクセスポリシーの限界を突破し、Entra IDによる一元管理と最小特権の原則を大規模・複数チーム環境で実現します。</p>
<p>【アーキテクチャ設計】
従来の「アクセスポリシー」はKey Vault単位のフラットな権限付与でしたが、Azure RBAC(ロールベースのアクセス制御)へ移行することで、管理プレーンとデータプレーンをEntra IDで統合管理します。これにより、サブスクリプションやリソースグループ単位での権限継承や、Privileged Identity Management (PIM) による時限付き権限付与が可能になります。</p>
<div class="wp-block-merpress-mermaidjs diagram-source-mermaid"><pre class="mermaid">
graph TD
subgraph "Identity Provider"
Entra["Microsoft Entra ID"]
end
subgraph "Scope Hierarchy"
Sub["Subscription / MG"]
RG["Resource Group"]
AKV["Azure Key Vault"]
end
Admin["Security Admin"] -->|Assign Roles| Entra
User["Dev / App Service"] -->|Request Access| Entra
Entra -->|Access Token| AKV
AKV -.->|Audit Logs| LA["Log Analytics"]
subgraph "Built-in Roles"
R1["Key Vault Administrator"]
R2["Key Vault Secrets Officer"]
R3["Key Vault Secrets User"]
end
</pre></div>
<p>【実装・デプロイ手順】
既存のKey VaultをRBAC認可モデルへ切り替える際は、<code>enableRbacAuthorization</code> プロパティを <code>true</code> に設定します。移行前に、必要なユーザー/サービスプリンシパルに適切なRBACロール(例: Key Vault Secrets User)が割り当てられていることを確認してください。</p>
<p><strong>1. Azure CLI による認可モデルの変更</strong></p>
<div class="codehilite">
<pre data-enlighter-language="generic"># 既存のKey VaultをRBAC認可に切り替え
az keyvault update \
--name "kv-prod-backend-001" \
--resource-group "rg-prod-shared" \
--enable-rbac-authorization true
</pre>
</div>
<p><strong>2. Bicep によるコードベースの定義</strong></p>
<pre data-enlighter-language="generic">// Key Vaultの定義
resource keyVault 'Microsoft.KeyVault/vaults@2023-07-01' = {
name: 'kv-prod-backend-001'
location: resourceGroup().location
properties: {
sku: {
family: 'A'
name: 'standard'
}
tenantId: subscription().tenantId
enableRbacAuthorization: true // RBACを有効化
enabledForDeployment: true
enabledForTemplateDeployment: true
}
}
// 参照用:Key Vault Secrets User (b86a8fe4-44ce-4919-9750-73856b4b3041)
resource roleAssignment 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
name: guid(keyVault.id, 'app-service-id', 'Key Vault Secrets User')
scope: keyVault
properties: {
roleDefinitionId: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', 'b86a8fe4-44ce-4919-9750-73856b4b3041')
principalId: 'app-service-principal-object-id'
principalType: 'ServicePrincipal'
}
}
</pre>
<p>【アイデンティティとセキュリティ】</p>
<ul class="wp-block-list">
<li><p><strong>最小特権の原則 (PoLP):</strong> アプリケーションには「Key Vault Secrets User」を割り当て、シークレットの読み取りのみを許可します。管理作業には「Key Vault Administrator」を使用しますが、これは PIM を通じたアクティブ化を必須とすべきです。</p></li>
<li><p><strong>条件付きアクセス:</strong> Key Vaultへのアクセスに対し、多要素認証 (MFA) や信頼済みデバイスからのアクセスのみを許可するポリシーを適用します。</p></li>
<li><p><strong>Microsoft Defender for Key Vault:</strong> RBAC移行後も、異常なアクセスパターン(例: 短時間の大量シークレット取得)を検知するために有効化を推奨します。</p></li>
</ul>
<p>【運用・コスト最適化】</p>
<ul class="wp-block-list">
<li><p><strong>可観測性:</strong> Azure Monitor の診断設定で <code>AuditEvent</code> を Log Analytics に送信します。RBACに移行することで、ログ内の <code>principalId</code> と Entra ID のユーザーが直接紐付き、監査の透明性が向上します。</p></li>
<li><p><strong>コスト最適化:</strong> </p>
<ul>
<li><p><strong>SKU選択:</strong> HSM(ハードウェアセキュリティモジュール)が必要ない場合は「Standard」を選択し、コストを抑えます。</p></li>
<li><p><strong>一元化 vs 分散:</strong> チームごとにVaultを分けることで爆発半径を抑えられますが、管理オーバーヘッドとのトレードオフになります。RBACなら「リソースグループ単位の権限付与」でこのバランスを最適化できます。</p></li>
</ul></li>
</ul>
<p>【まとめ】</p>
<ol class="wp-block-list">
<li><p><strong>移行の順序:</strong> RBACを有効化する前にロールを割り当てないと、全ユーザーが即座にアクセス不能になる「ロックアウト」が発生するため注意が必要です。</p></li>
<li><p><strong>管理の統合:</strong> 個別のアクセスポリシー管理から解放され、Azure Lighthouse等を用いたマルチテナント環境の統制にも対応可能になります。</p></li>
<li><p><strong>互換性の確認:</strong> 極めて古いアプリケーションSDKではRBAC認可に対応していない場合があるため、移行前にSDKバージョンの確認を推奨します。</p></li>
</ol>
本記事はGeminiの出力をプロンプト工学で整理した業務ドラフト(未検証)です。
Azure Key VaultをアクセスポリシーからAzure RBACへ:大規模運用のための移行戦略
【導入】
従来のアクセスポリシーの限界を突破し、Entra IDによる一元管理と最小特権の原則を大規模・複数チーム環境で実現します。
【アーキテクチャ設計】
従来の「アクセスポリシー」はKey Vault単位のフラットな権限付与でしたが、Azure RBAC(ロールベースのアクセス制御)へ移行することで、管理プレーンとデータプレーンをEntra IDで統合管理します。これにより、サブスクリプションやリソースグループ単位での権限継承や、Privileged Identity Management (PIM) による時限付き権限付与が可能になります。
graph TD
subgraph "Identity Provider"
Entra["Microsoft Entra ID"]
end
subgraph "Scope Hierarchy"
Sub["Subscription / MG"]
RG["Resource Group"]
AKV["Azure Key Vault"]
end
Admin["Security Admin"] -->|Assign Roles| Entra
User["Dev / App Service"] -->|Request Access| Entra
Entra -->|Access Token| AKV
AKV -.->|Audit Logs| LA["Log Analytics"]
subgraph "Built-in Roles"
R1["Key Vault Administrator"]
R2["Key Vault Secrets Officer"]
R3["Key Vault Secrets User"]
end
【実装・デプロイ手順】
既存のKey VaultをRBAC認可モデルへ切り替える際は、enableRbacAuthorization プロパティを true に設定します。移行前に、必要なユーザー/サービスプリンシパルに適切なRBACロール(例: Key Vault Secrets User)が割り当てられていることを確認してください。
1. Azure CLI による認可モデルの変更
# 既存のKey VaultをRBAC認可に切り替え
az keyvault update \
--name "kv-prod-backend-001" \
--resource-group "rg-prod-shared" \
--enable-rbac-authorization true
2. Bicep によるコードベースの定義
// Key Vaultの定義
resource keyVault 'Microsoft.KeyVault/vaults@2023-07-01' = {
name: 'kv-prod-backend-001'
location: resourceGroup().location
properties: {
sku: {
family: 'A'
name: 'standard'
}
tenantId: subscription().tenantId
enableRbacAuthorization: true // RBACを有効化
enabledForDeployment: true
enabledForTemplateDeployment: true
}
}
// 参照用:Key Vault Secrets User (b86a8fe4-44ce-4919-9750-73856b4b3041)
resource roleAssignment 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
name: guid(keyVault.id, 'app-service-id', 'Key Vault Secrets User')
scope: keyVault
properties: {
roleDefinitionId: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', 'b86a8fe4-44ce-4919-9750-73856b4b3041')
principalId: 'app-service-principal-object-id'
principalType: 'ServicePrincipal'
}
}
【アイデンティティとセキュリティ】
最小特権の原則 (PoLP): アプリケーションには「Key Vault Secrets User」を割り当て、シークレットの読み取りのみを許可します。管理作業には「Key Vault Administrator」を使用しますが、これは PIM を通じたアクティブ化を必須とすべきです。
条件付きアクセス: Key Vaultへのアクセスに対し、多要素認証 (MFA) や信頼済みデバイスからのアクセスのみを許可するポリシーを適用します。
Microsoft Defender for Key Vault: RBAC移行後も、異常なアクセスパターン(例: 短時間の大量シークレット取得)を検知するために有効化を推奨します。
【運用・コスト最適化】
【まとめ】
移行の順序: RBACを有効化する前にロールを割り当てないと、全ユーザーが即座にアクセス不能になる「ロックアウト」が発生するため注意が必要です。
管理の統合: 個別のアクセスポリシー管理から解放され、Azure Lighthouse等を用いたマルチテナント環境の統制にも対応可能になります。
互換性の確認: 極めて古いアプリケーションSDKではRBAC認可に対応していない場合があるため、移行前にSDKバージョンの確認を推奨します。
ライセンス:本記事のテキスト/コードは特記なき限り
CC BY 4.0 です。引用の際は出典URL(本ページ)を明記してください。
利用ポリシー もご参照ください。
コメント