このチュートリアルでは、Azure Key Vault Managed HSM のアクセス制御の実際の実装例を示します。 現実的なシナリオを通じて、Azure RBAC と Managed HSM ローカル RBAC を使用して職務の分離を実装する方法について説明します。
Important
このチュートリアルを進める前に、コントロール プレーンとデータ プレーン アクセスの違いなど、Managed HSM アクセス制御モデルを理解しておく必要があります。 この概念の基礎については、 Managed HSM のアクセス制御に関するページを参照してください。
[前提条件]
- Microsoft Azure のサブスクリプション。 お持ちでない場合は、 無料試用版にサインアップできます。
- Azure CLI バージョン 2.25.0 以降。 バージョンを確認するには、
az --versionを実行します。 インストールまたはアップグレードする必要がある場合は、「 Azure CLI のインストール」を参照してください。 - サブスクリプション内の管理されたHSM。 「クイック スタート: Azure CLI を使用してマネージド HSM をプロビジョニングおよびアクティブ化して、マネージド HSM をプロビジョニングおよびアクティブ化する」を参照してください。
Azure Cloud Shell
Azure は、ブラウザーから使用できる対話型シェル環境である Azure Cloud Shell をホストします。 Cloud Shell で Bash または PowerShell を使用して、Azure サービスを操作できます。 ローカル環境に何もインストールしなくても、Cloud Shell にプレインストールされているコマンドを使用して、この記事のコードを実行できます。
Azure Cloud Shell を開始するには、以下のようにします。
| Option | 例とリンク |
|---|---|
| コードまたはコマンド ブロックの右上隅にある [使ってみる] を選択します。 [使ってみる] を選択しても、コードまたはコマンドは Cloud Shell に自動的にはコピーされません。 |
|
| https://shell.azure.com に移動するか、[Cloud Shell を起動する] ボタンを選択して、ブラウザーで Cloud Shell を開きます。 |
|
| Azure portal の右上にあるメニュー バーの [Cloud Shell] ボタンを選択します。 |
|
Azure Cloud Shell を使用するには、以下のようにします。
Cloud Shell を開始します。
コード ブロック (またはコマンド ブロック) の [コピー] ボタンを選択し、コードまたはコマンドをコピーします。
Windows および Linux では Ctrl+Shift+V を選択し、macOS では Cmd+Shift+V を選択して、コードまたはコマンドをクラウドシェルセッションに貼り付けます。
「を選択し、 を入力してコードまたはコマンドを実行します。」
Azure にサインインする
CLI を使用して Azure にサインインするには、次のように入力します。
az login
CLI を使用したログイン オプションの詳細については、Azure CLI を使用したサインインに関するページを参照してください。
シナリオの例を理解する
この例では、署名操作に RSA 2,048 ビット キーを使用するアプリケーションを開発しています。 アプリケーションは、 マネージド ID を持つ Azure 仮想マシン (VM) で実行されます。 署名に使用される RSA キーは、マネージド HSM に格納されます。
役割と責任を定義する
アプリケーションを管理、展開、監査する次のロールを特定しました。
- セキュリティ チーム: CSO (最高セキュリティ責任者) または同様の共同作成者のオフィスの IT スタッフ。 セキュリティ チームは、キーの適切な保管を担当します。 キーには、署名用の RSA キーまたは EC キー、データ暗号化用の RSA または AES キーが含まれます。
- 開発者とオペレーター: アプリケーションを開発して Azure にデプロイするスタッフ。 このチームのメンバーは、セキュリティ スタッフの一員ではありません。 RSA キーなどの機密データにアクセスすることはできません。 展開するアプリケーションのみが、この機密データにアクセスできる必要があります。
- 監査者: この役割は、開発スタッフまたは一般 IT スタッフのメンバーではない共同作成者を対象とします。 証明書、キー、シークレットの使用とメンテナンスを確認して、セキュリティ標準に準拠していることを確認します。
アプリケーションの範囲外には、サブスクリプション (またはリソース グループ) 管理者という別のロールがあります。 サブスクリプション管理者は、セキュリティ チームの初期アクセス許可を設定します。 アプリケーションに必要なリソースを含むリソース グループを使用して、セキュリティ チームへのアクセス権を付与します。
ロールごとに必要な操作を定義する
ロールに対する次の操作を承認する必要があります。
セキュリティ チーム
- マネージド HSM を作成する
- マネージド HSM セキュリティ ドメインをダウンロードする (ディザスター リカバリー用)
- ログ記録を有効にする
- キーの生成またはインポート
- ディザスター リカバリー用のマネージド HSM バックアップを作成する
- 特定の操作に対するアクセス許可をユーザーとアプリケーションに付与するように Managed HSM ローカル RBAC を設定する
- キーを定期的にロールする
開発者と演算子
- 署名に使用される RSA キーの参照 (キー URI) をセキュリティ チームから取得する
- キーにプログラムでアクセスするアプリケーションを開発してデプロイする
監査 役
- キーの有効期限を確認して、キーが最新の状態であることを確認する
- ロールの割り当てを監視して、承認されたユーザー/アプリケーションのみがキーにアクセスできることを確認する
- マネージド HSM ログを確認して、データ セキュリティ標準に準拠したキーの適切な使用を確認する
適切なロールを割り当てる
次の表は、マネージド HSM にアクセスするためのチームとリソースへのロールの割り当てをまとめたものです。
| Role | コントロール プレーンの役割 | データ プレーン ロール |
|---|---|---|
| セキュリティ チーム | Managed HSM 共同作成者 | Managed HSM 管理者 |
| 開発者と演算子 | None | None |
| 監査者 | None | 管理型HSM暗号化監査機能 |
| アプリケーションによって使用される VM のマネージド ID | None | マネージド HSM 暗号化ユーザー |
| アプリケーションによって使用されるストレージ アカウントのマネージド ID | None | マネージド HSM 暗号化サービス |
3 つのチーム ロールには、マネージド HSM アクセス許可と共に他のリソースへのアクセス権が必要です。 VM (または Azure App Service の Web Apps 機能) をデプロイするには、開発者とオペレーターがそれらのリソースの種類に Contributor アクセスする必要があります。 監査担当者は、マネージド HSM ログが格納されているストレージ アカウントへの読み取りアクセス権が必要です。
Azure CLI を使用して実装する
コントロール プレーン ロール (Azure RBAC) を割り当てるには、Azure portal または Azure CLI や Azure PowerShell などの他の管理インターフェイスのいずれかを使用できます。 マネージド HSM データ プレーン ロールを割り当てるには、Azure CLI または Azure REST API を使用する必要があります。
コントロール プレーン ロールの詳細については、 Azure の組み込みロールに関するページを参照してください。 Managed HSM データ プレーン ロールの詳細については、 Managed HSM の Managed HSM ローカル RBAC 組み込みロールに関するページを参照してください。
次の Azure CLI スニペットは、上記で説明したロールの割り当てを実装する方法を示しています。
前提条件
- Microsoft Entra 管理者は、Contoso セキュリティ チーム、Contoso App DevOps、Contoso アプリ監査者の 3 つのロールを表すセキュリティ グループを作成しました。 管理者は、それぞれのグループにユーザーを追加しました。
- すべてのリソースは ContosoAppRG リソース グループにあります。
- マネージド HSM ログは 、contosologstorage ストレージ アカウントに格納されます。
- ContosoMHSM マネージド HSM と contosologstorage ストレージ アカウントは、同じ Azure の場所にあります。
コントロールプレーンの役割の割り当て
サブスクリプション管理者は、 Managed HSM Contributor ロールをセキュリティ チームに割り当てます。 このロールにより、セキュリティ チームは既存のマネージド HSM を管理し、新しい HSM を作成できます。
# This role assignment allows Contoso Security Team to create new Managed HSMs
az role assignment create --assignee-object-id $(az ad group show -g 'Contoso Security Team' --query 'id' -o tsv) --assignee-principal-type Group --role "Managed HSM Contributor"
データプレーンのロールを割り当てる
既存のマネージド HSM の場合、セキュリティ チームに "Managed HSM Administrator" ロールを割り当てて管理する必要があります。
# This role assignment allows Contoso Security Team to become administrator of existing managed HSM
az keyvault role assignment create --hsm-name ContosoMHSM --assignee $(az ad group show -g 'Contoso Security Team' --query 'id' -o tsv) --scope / --role "Managed HSM Administrator"
ログ記録を構成し、追加のロールを割り当てる
セキュリティ チームはログ記録を設定し、監査者と VM アプリケーションにロールを割り当てます。
# Enable logging
hsmresource=$(az keyvault show --hsm-name ContosoMHSM --query id -o tsv)
storageresource=$(az storage account show --name contosologstorage --query id -o tsv)
az monitor diagnostic-settings create --name MHSM-Diagnostics --resource $hsmresource --logs '[{"category": "AuditEvent","enabled": true}]' --storage-account $storageresource
# Assign the "Crypto Auditor" role to Contoso App Auditors group. It only allows them to read.
az keyvault role assignment create --hsm-name ContosoMHSM --assignee $(az ad group show -g 'Contoso App Auditors' --query 'id' -o tsv) --scope / --role "Managed HSM Crypto Auditor"
# Grant the "Crypto User" role to the VM's managed identity. It allows to use keys.
az keyvault role assignment create --hsm-name ContosoMHSM --assignee $(az vm identity show --name "vmname" --resource-group "ContosoAppRG" --query principalId -o tsv) --scope / --role "Managed HSM Crypto User"
# Assign "Managed HSM Crypto Service Encryption User" role to the Storage account identity
storage_account_principal=$(az storage account show --id $storageresource --query identity.principalId -o tsv)
# (if no identity exists), then assign a new one
[ "$storage_account_principal" ] || storage_account_principal=$(az storage account update --assign-identity --id $storageresource --query identity.principalId -o tsv)
az keyvault role assignment create --hsm-name ContosoMHSM --role "Managed HSM Crypto Service Encryption User" --assignee $storage_account_principal
運用環境に関する考慮事項
このチュートリアルでは、アクセス制御の実装を示す簡略化されたシナリオを示します。
特定の要件に基づいて、マネージド HSM へのアクセス許可を調整します。 この例では、セキュリティ チームがアプリケーションで使用するために、DevOps スタッフにキーとシークレットの参照 (URI と拇印) を提供することを前提としています。 開発者とオペレーターは、データ プレーンへの直接アクセスを必要としません。 このチュートリアルでは、マネージド HSM のセキュリティ保護に重点を置いていますが、 仮想マシン、 ストレージ アカウントなどの他の Azure リソースにも同様のセキュリティ対策を適用します。
次のステップ
- Managed HSM アクセス制御モデルの概念を理解するには、Managed HSM のアクセス制御に関するページを参照してください。
- 管理者向けの入門チュートリアルについては、「Managed HSM とは」を参照してください。
- Managed HSM ログの使用状況ログの詳細については、「Managed HSM のログ記録」を参照してください。
- Managed HSM でのロールの管理の詳細については、Managed HSM のローカル RBAC に関するページを参照してください。
- Azure RBAC のドキュメント
- Azure RBAC: 組み込みロール
- Azure CLI を使用して Azure RBAC を管理する