この記事は、4 部構成のチュートリアル シリーズのパート 2 です。 パート 1 では、カスタマー マネージド キーの概要、その機能、レジストリで有効にする前の考慮事項について説明します。 この記事では、Azure CLI、Azure portal、または Resource Manager テンプレートを使用してカスタマー マネージド キーを有効にする手順について説明します。
前提条件
- Azure CLI をインストールするか、Azure Cloud Shell を使用するように準備します。
- Azure portal にサインインします。
Azure CLI を使用してカスタマー マネージド キーを有効にする
リソース グループを作成する
az group create コマンドを実行して、キー ストア、コンテナー レジストリ、およびその他の必要なリソースを保持するリソース グループを作成します。
az group create --name <resource-group-name> --location <location>
ユーザー割り当てマネージド ID を作成する
レジストリが暗号化キーにアクセスできるように、レジストリ用のユーザー割り当て マネージド ID を構成します。
az identity create コマンドを実行してマネージド ID を作成します。
az identity create \ --resource-group <resource-group-name> \ --name <managed-identity-name>コマンド出力で、キーへのレジストリ アクセスを構成するために、
idとprincipalIdの値をメモしておきます。{ "clientId": "00001111-aaaa-2222-bbbb-3333cccc4444", "clientSecretUrl": "https://control-eastus.identity.azure.net/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/myresourcegroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myidentityname/credentials?tid=aaaabbbb-0000-cccc-1111-dddd2222eeee&oid=aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb&aid=00001111-aaaa-2222-bbbb-3333cccc4444", "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/myresourcegroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myresourcegroup", "location": "eastus", "name": "myidentityname", "principalId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "resourceGroup": "myresourcegroup", "tags": {}, "tenantId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "type": "Microsoft.ManagedIdentity/userAssignedIdentities" }利便性を考えて、
idとprincipalIdの値を環境変数に格納してください。identityID=$(az identity show --resource-group <resource-group-name> --name <managed-identity-name> --query 'id' --output tsv) identityPrincipalID=$(az identity show --resource-group <resource-group-name> --name <managed-identity-name> --query 'principalId' --output tsv)
キー コンテナーを作成して構成する
az keyvault create コマンドを実行し、レジストリ暗号化用のカスタマー マネージド キーを格納できるキー コンテナーを作成します。
既定では、新しいキー ボールトで 論理的な削除 設定が自動的に有効になります。 キーまたはキー コンテナー/Key Vault を誤って削除することによるデータ損失を防ぐために、[消去保護] 設定を有効にすることをお勧めします。
az keyvault create --name <key-vault-name> \ --resource-group <resource-group-name> \ --enable-purge-protection便宜上、Key Vault のリソース ID をメモし、そのリソース ID の値を環境変数に格納します。
keyvaultID=$(az keyvault show --resource-group <resource-group-name> --name <key-vault-name> --query 'id' --output tsv)
信頼されたサービスに Key Vault へのアクセスを許可する
キー コンテナーがファイアウォールまたは仮想ネットワーク (プライベート エンドポイント) で保護されている場合は、信頼された Azure サービスによるアクセスを許可するネットワーク設定を有効にする必要があります。 詳細については、「Azure Key Vault のネットワーク設定を構成する」を参照してください。
マネージド ID が Key Vault にアクセスできるようにする
マネージド ID がキー コンテナーにアクセスできるようにするには、2 つの方法があります。
最初のオプションは、キー コンテナーのアクセス ポリシーを構成し、ユーザー割り当てマネージド ID を使用してアクセスするキーのアクセス許可を設定するためのものです。
az keyvault set policy コマンドを実行します。 以前に作成および格納された環境変数の値
principalIDを渡します。キーのアクセス許可を
get、unwrapKey、wrapKeyに対して設定します。az keyvault set-policy \ --resource-group <resource-group-name> \ --name <key-vault-name> \ --object-id $identityPrincipalID \ --key-permissions get unwrapKey wrapKey
2 つ目のオプションは、Azure ロールベースのアクセス制御 (RBAC) を使用して、ユーザー割り当てマネージド ID にアクセス許可を割り当て、Key Vault にアクセスすることです。
az role assignment create コマンドを実行し、Key Vault Crypto Service Encryption User のロールをユーザー割り当てマネージド ID に割り当てます。
az role assignment create --assignee $identityPrincipalID \
--role "Key Vault Crypto Service Encryption User" \
--scope $keyvaultID
Key Vault にキーを作成し、キー ID を取得する
az keyvault key create コマンドを実行して、Key Vault にキーを作成します。
az keyvault key create \ --name <key-name> \ --vault-name <key-vault-name>コマンドの出力で、キーの ID (
kid) を記録しておいてください。[...] "key": { "crv": null, "d": null, "dp": null, "dq": null, "e": "AQAB", "k": null, "keyOps": [ "encrypt", "decrypt", "sign", "verify", "wrapKey", "unwrapKey" ], "kid": "https://mykeyvault.vault.azure.net/keys/mykey/<version>", "kty": "RSA", [...]利便性のため、キー ID 用に選択した形式を
$keyID環境変数に格納します。 バージョンありのキー ID またはバージョンなしのキー ID を使用できます。
キーのローテーション
手動または自動のキーのローテーションを選択できます。
キー バージョンありのカスタマー マネージド キーを使用してレジストリを暗号化した場合は、Azure Container Registry で手動のキー ローテーションのみが許可されます。 次の例では、キーの kid プロパティの値を格納します。
keyID=$(az keyvault key show \
--name <keyname> \
--vault-name <key-vault-name> \
--query 'key.kid' --output tsv)
キーのバージョンを省略してカスタマー マネージド キーを使用してレジストリを暗号化した場合は、Azure Key Vault で新しいキー バージョンを検出できる自動キー ローテーションが有効になります。 次の例では、キーの kid プロパティからバージョンを削除します。
keyID=$(az keyvault key show \
--name <keyname> \
--vault-name <key-vault-name> \
--query 'key.kid' --output tsv)
keyID=$(echo $keyID | sed -e "s/\/[^/]*$//")
Managed HSM の作成と構成
キーを作成したり、データ プレーン ロールを割り当てたりするには、マネージド HSM をプロビジョニングしてアクティブ化する必要があります。 クイック スタート: Azure CLIを使用して Managed HSM をプロビジョニングしてアクティブ化に従ってから、この記事に戻ってください。
Managed HSM ファイアウォールが有効になっている場合は、レジストリを作成する前に、信頼されたサービスまたはその他のネットワーク アクセスを構成してください。 詳細については、「Managed HSM のネットワーク セキュリティ」を参照してください。
暗号化キーを作成するユーザーには、キーの作成を許可する Managed HSM Crypto User などの Managed HSM ロールが必要です。 詳細については、「 Managed HSM のデータ プレーン ロール管理」を参照してください。
キー ラップをサポートする RSA-HSM キーを作成します。
az keyvault key create \
--hsm-name <managed-hsm-name> \
--name <key-name> \
--kty RSA-HSM \
--ops wrapKey unwrapKey
Managed HSM では、Key Vault のアクセス ポリシーの代わりにローカル RBAC が使用されます。 Managed HSM Crypto Service Encryption ユーザー ロールをユーザー割り当て ID に割り当てます。 次の例では、レジストリが使用するキーへの割り当てを制限します。
az keyvault role assignment create \
--hsm-name <managed-hsm-name> \
--role "Managed HSM Crypto Service Encryption User" \
--assignee-object-id $identityPrincipalID \
--assignee-principal-type MSI \
--scope /keys/<key-name>
手動ローテーション用にキー ID をそのバージョンとともに格納します。
keyID=$(az keyvault key show \
--hsm-name <managed-hsm-name> \
--name <key-name> \
--query 'key.kid' --output tsv)
キーの自動ローテーションを有効にするには、キー ID からバージョンを削除してください。
keyID=$(echo $keyID | sed -e "s/\/[^/]*$//")
Note
Managed HSM キー URI では、 https://<managed-hsm-name>.managedhsm.azure.net/keys/<key-name>/<version>形式が使用されます。 DNS サフィックスは、Azureクラウドによって異なる場合があります。
カスタマー マネージド キーを使用してレジストリを作成する
az acr create コマンドを実行して Premium サービス レベルでレジストリを作成し、カスタマー マネージド キーを有効にします。
前の手順で環境変数に格納されているマネージド ID の ID (
id) とキー ID (kid) の値を渡します。az acr create \ --resource-group <resource-group-name> \ --name <container-registry-name> \ --identity $identityID \ --key-encryption-key $keyID \ --sku Premium
暗号化の状態を表示する
カスタマー マネージド キーによるレジストリ暗号化の状態を表示するには、az acr encryption show コマンドを実行します。
az acr encryption show --name <container-registry-name>
レジストリの暗号化に使用されるキーに応じて、出力は次のようになります。
{
"keyVaultProperties": {
"identity": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"keyIdentifier": "https://myvault.vault.azure.net/keys/myresourcegroup/abcdefg123456789...",
"keyRotationEnabled": true,
"lastKeyRotationTimestamp": xxxxxxxx
"versionedKeyIdentifier": "https://myvault.vault.azure.net/keys/myresourcegroup/abcdefg123456789...",
},
"status": "enabled"
}
Azure portal を使用してカスタマー マネージド キーを有効にする
ユーザー割り当てマネージド ID を作成する
Azure portal で、ユーザー割り当てによる Azure リソース用マネージド ID を作成するには、次の操作を実行します。
「ユーザー割り当てマネージド ID を作成する」の手順に従ってください。
identity の名前を保存して、後の手順で使用します。
Key Vault を作成
「クイック スタート: Azure portal を使用してキー コンテナーを作成する」の手順に従います。
カスタマー マネージド キー用のキー コンテナー/Key Vault を作成する場合は、[基本] タブで、[消去保護] 設定を有効にします。 この設定は、キーまたはキー ボールトが誤って削除されたことによるデータ損失を防ぐのに役立ちます。
信頼されたサービスがキー コンテナーにアクセスできるようにする
キー コンテナーがファイアウォールまたは仮想ネットワーク (プライベート エンドポイント) で保護されている場合は、信頼された Azure サービスによるアクセスを許可するネットワーク設定を有効にします。 詳細については、「Azure Key Vault のネットワーク設定を構成する」を参照してください。
Key Vault にアクセスするためにマネージド ID を有効にする
マネージド ID がキー コンテナーにアクセスできるようにするには、2 つの方法があります。
最初のオプションでは、キー コンテナーのアクセス ポリシーを構成し、ユーザー割り当てマネージド ID によるアクセス用のキーのアクセス許可を設定します。
- キー ボールトに移動します。
- [設定]>[アクセス ポリシー] > [+ アクセス ポリシーの追加] を選択します。
- [キーのアクセス許可] を選択し、[取得]、[キーのラップ解除]、[キーのラップ] を順に選択します。
- [プリンシパルの選択] で、ユーザー割り当てマネージド ID のリソース名を選択します。
- [追加]、[保存] の順に選択します。
もう 1 つの選択肢は、Key Vault Crypto Service Encryption User RBAC ロールを、Key Vault スコープでユーザー割り当てマネージド ID に割り当てることです。 詳細な手順については、「Azure portal を使用して Azure ロールを割り当てる」を参照してください。
Managed HSM の作成と構成
- クイック スタート: Azure ポータルを使用して Managed HSM をプロビジョニングしてアクティブ化する方法に従います。
- 暗号化キーを作成するユーザーが、キーの作成を許可する Managed HSM ロール ( Managed HSM Crypto User など) を持っていることを確認します。
-
[設定] で [キー] を選択し、
wrapKey操作とunwrapKey操作をサポートする RSA-HSM キーを作成またはインポートします。 - [ 設定] で、[ ローカル RBAC] を選択します。
- ユーザー割り当て ID の Managed HSM Crypto Service Encryption ユーザー ロールの割り当てを追加します。 最小権限のために、暗号化キーのスコープでロールを割り当てます。 詳細については、「 Managed HSM のデータ プレーン ロール管理」を参照してください。
- Managed HSM ファイアウォールが有効になっている場合は、信頼されたサービスまたはその他のネットワーク アクセスを構成します。 詳細については、「Managed HSM のネットワーク セキュリティ」を参照してください。
Important
Azure Container Registryは、Managed HSM ロールの割り当てを作成または更新しません。 レジストリを作成するか、その暗号化キーを変更する前に、ロールの割り当てを構成します。
Key Vault でキーを作成する
キー コンテナー/Key Vault にキーを作成し、それをレジストリの暗号化に使用します。 特定のキー バージョンをカスタマー マネージド キーとして選択する場合は、これらの手順に従います。 Key Vault へのアクセスがプライベート エンドポイントまたは選択されたネットワークに制限されている場合は、レジストリを作成する前に、キーの作成も必要になる場合があります。
- キー コンテナーに移動します。
- [設定]>[キー] の順に選択します。
- +Generate/Import を選択し、キーの一意の名前を入力します。
- それ以外については既定値をそのまま使用し、[作成] を選択します。
- 作成後、そのキーを選択し、次に現在のバージョンを選択します。 そのキー バージョンのキー識別子をコピーします。
コンテナー レジストリの作成
[リソースの作成]>[コンテナー]>[コンテナー レジストリ] の順に選択します。
[基本] タブで、リソース グループを選択または作成し、レジストリの名前を入力します。 [SKU] で [Premium] を選択します。
[暗号化] タブの [顧客が管理するキー] で、[有効] を選択します。
Identity に、作成したマネージド ID を選択します。
暗号化 で、次のいずれかのオプションを選択します。
- [Key Vaultから選択] を選択し、既存のkey vaultまたは Managed HSM とキーを選択します。 [新規作成] を選択して、Key Vault とキーを作成します。 選択するキーはバージョン管理されておらず、キーの自動ローテーションを有効にします。
- [キー URI の入力] を選択し、既存のKey Vaultまたは Managed HSM キーの識別子を指定します。 バージョン管理されたキー URI (手動でローテーションする必要があるキーの場合) またはバージョン管理されていないキー URI (キーの自動ローテーションを有効にする) のいずれかを指定できます。
Managed HSM ファイアウォールによってポータルでキーを一覧表示できない場合は、クライアント IP アドレスを許可するか、[キー URI の入力] を選択します。 信頼されたサービスを許可すると、Azure Container Registry は Managed HSM に到達できますが、構成済みネットワーク境界外のクライアントにキー ピッカーの使用を許可するものではありません。
Review + create を選択します。
[作成] を選択して、レジストリ インスタンスをデプロイします。
暗号化の状態を表示する
ポータルでレジストリの暗号化状態を確認するには、お使いのレジストリに移動します。 設定 で、暗号化 を選択してください。
Resource Manager テンプレートを使用してカスタマー マネージド キーを有効にする
Resource Manager テンプレートを使用してコンテナー レジストリを作成し、Key Vault または Managed HSM に格納されているカスタマー マネージド キーを使用して暗号化を有効にすることができます。
テンプレートをデプロイする前に、ユーザー割り当て ID を作成し、キーへのアクセス許可を構成します。
- Key Vaultの場合は、アクセス ポリシーまたは
unwrapKeyAzure RBAC ロールを使用して、、get、wrapKeyのアクセス許可を ID に付与します。 - Managed HSM の場合は、キー スコープで ID エンティティに Managed HSM Crypto Service Encryption User ローカル RBAC ロールを割り当てます。
テンプレートは、レジストリがそれに依存できるように、既存の ID を宣言します。 ID エンティティと同じリソース グループにテンプレートをデプロイします。
Resource Manager テンプレートの次の内容を新しいファイルにコピーし、CMKtemplate.json として保存してください。
{ "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "registry_name": { "type": "String" }, "identity_name": { "type": "String" }, "kek_id": { "type": "String" } }, "resources": [ { "type": "Microsoft.ContainerRegistry/registries", "apiVersion": "2019-12-01-preview", "name": "[parameters('registry_name')]", "location": "[resourceGroup().location]", "sku": { "name": "Premium", "tier": "Premium" }, "identity": { "type": "UserAssigned", "userAssignedIdentities": { "[resourceID('Microsoft.ManagedIdentity/userAssignedIdentities', parameters('identity_name'))]": {} } }, "dependsOn": [ "[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', parameters('identity_name'))]" ], "properties": { "adminUserEnabled": false, "encryption": { "status": "enabled", "keyVaultProperties": { "identity": "[reference(resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', parameters('identity_name')), '2018-11-30').clientId]", "keyIdentifier": "[parameters('kek_id')]" } }, "networkRuleSet": { "defaultAction": "Allow", "virtualNetworkRules": [], "ipRules": [] }, "policies": { "quarantinePolicy": { "status": "disabled" }, "trustPolicy": { "type": "Notary", "status": "disabled" }, "retentionPolicy": { "days": 7, "status": "disabled" } } } }, { "type": "Microsoft.ManagedIdentity/userAssignedIdentities", "apiVersion": "2018-11-30", "name": "[parameters('identity_name')]", "location": "[resourceGroup().location]" } ] }前のセクションの手順に従って、次のリソースを作成します。
- 名前で識別されるユーザー割り当てマネージド ID
- キー ID で識別されるKey Vaultまたはマネージド HSM キー
- 必要なKey Vaultアクセス許可または Managed HSM ローカル RBAC ロールの割り当て
az deployment group create コマンドを実行し、前述のテンプレート ファイルを使用してレジストリを作成します。 新しいレジストリ名、既存のユーザー割り当てマネージド ID 名、作成したキー ID を指定します。
az deployment group create \ --resource-group <resource-group-name> \ --template-file CMKtemplate.json \ --parameters \ registry_name=<registry-name> \ identity_name=<managed-identity> \ kek_id=<key-id>az acr encryption show コマンドを実行して、レジストリ暗号化の状態を表示します。
az acr encryption show --name <registry-name>
次のステップ
次の記事のカスタマー マネージド キーのローテーション、キー バージョンの更新、カスタマー マネージド キーの取り消しについての説明に進んでください。