既定では、Microsoft Azureは自動生成されたキーを使用して、Azure Red Hat OpenShift クラスター内の仮想マシン (VM) の OS ディスクを暗号化します。 セキュリティを強化するために、クラスターのデプロイ時に自己管理キーを使用して OS ディスクを暗号化できます。 この機能を使用すると、カスタマー マネージド キーを使用して機密データを暗号化することで、より詳細な制御を行えます。
カスタマー マネージド キーを持つクラスターでは、そのキーで既定のストレージ クラスが有効になっています。 そのため、これらのキーは OS ディスクとデータ ディスクの両方を暗号化します。 Azure Key Vaultは、カスタマー マネージド キーを格納します。 Key Vaultを使用してキーを作成および管理する方法の詳細については、Azure Key Vault基本的な概念を参照してください。
ホストベースの暗号化では、Azure Red Hat OpenShift ノード VM の仮想マシン ホストに格納されているデータは、保存時に暗号化されます。 このデータは、暗号化されてAzure Storageに流れます。 ホスト ベースの暗号化とは、一時ディスクがプラットフォームマネージド キーを使用して保存時に暗号化されていることを意味します。
OS ディスクとデータ ディスクのキャッシュは、プラットフォーム マネージド キーまたはカスタマー マネージド キーを使用して保存時に暗号化されます。 キーの種類は、これらのディスクに設定した暗号化の種類によって異なります。 既定では、Azure Red Hat OpenShiftを使用すると、OS ディスクとデータ ディスクはプラットフォームマネージド キーを使用して保存時に暗号化されます。 この既定の設定は、これらのディスクのキャッシュも既定でプラットフォームマネージド キーを使用して保存時に暗号化されることを意味します。
次のセクションの暗号化手順に従って、独自のマネージド キーを指定できます。 この手順で指定したキーによって、これらのディスクのキャッシュも暗号化されます。
制限事項
お客様は、キー コンテナーとディスク暗号化セットをAzureに維持する必要があります。 キーを維持しないと、クラスター Azure Red Hat OpenShift破損します。 VM は動作を停止し、その結果、Azure Red Hat OpenShift クラスター全体が機能しなくなります。
Azure Red Hat OpenShift エンジニアリング チームはキーにアクセスできません。 そのため、キーをバックアップ、レプリケート、または取得することはできません。
ディスク暗号化セットを使用して暗号化キーを管理する方法の詳細については、「Azure Disk Storageのサーバー側暗号化」を参照してください。
[前提条件]
アクセス許可を確認します。 Azure Red Hat OpenShift クラスター、キー コンテナー、ディスク暗号化セットを作成するためのアクセス許可が必要です。
Key Vault Crypto Officer ロールがあることを確認します。 このロールには、キーを作成するためのアクセス許可があります。
Azure サブスクリプションが複数ある場合は、リソース プロバイダーを登録します。 登録の詳細については、「リソース プロバイダーを登録する」を参照してください。
サブスクリプションで
EncryptionAtHost機能が有効になっていることを確認します。 これを有効にするには、次を実行します。az feature register --namespace Microsoft.Compute --name EncryptionAtHost次を実行すると、機能の現在の状態を確認できます。
az feature show --namespace Microsoft.Compute --name EncryptionAtHost
Key Vaultのインスタンスを作成する
キーを格納するには、Key Vaultのインスタンスを使用する必要があります。 消去保護を有効にした新しいキー コンテナーを作成します。 次に、キー コンテナー内に新しいキーを作成して、独自のカスタム キーを格納します。
環境変数を設定します。
export KEYVAULT_NAME=aro-enckv export KEYVAULT_KEY_NAME=aro-key export DISK_ENCRYPTION_SET_NAME=aro-des export LOCATION=<location-name> export RESOURCEGROUP=<resource-group-name>キー コンテナーを作成します。
az keyvault create \ --name $KEYVAULT_NAME \ --resource-group $RESOURCEGROUP \ --location $LOCATION \ --enable-purge-protection true注
消去保護を有効にする必要があります。 「Azure Key Vaultを設定する」を参照してください。
省略可能: 消去保護が有効になっているため、削除後にキー コンテナー名をすぐに再利用することはできません。
--retention-days <NUMBER_OF_DAYS>指定を追加することで、コンテナーを論理削除状態に保持する期間を制御できます。 既定値は 90 日ですが、より小さい値 (最小 7 日間) に設定すると、名前をより迅速に再利用できます。キー コンテナーにキーを作成します。
az keyvault key create \ --vault-name $KEYVAULT_NAME \ --name $KEYVAULT_KEY_NAME \ --protection softwareキー コンテナーのリソース ID とキー URL 変数を設定します。
KEYVAULT_ID=$(az keyvault show --name $KEYVAULT_NAME --query "[id]" -o tsv) KEYVAULT_KEY_URL=$(az keyvault key show --vault-name $KEYVAULT_NAME --name $KEYVAULT_KEY_NAME --query "[key.kid]" -o tsv)
ディスク暗号化セットを作成する
Azure Red Hat OpenShift クラスター内のディスクの参照ポイントとして、Azure ディスク暗号化セットを使用します。 これは、前の手順で作成したキー コンテナーに接続され、その場所からカスタマー マネージド キーをプルします。
ディスク暗号化セットを作成します。
az disk-encryption-set create \ --name $DISK_ENCRYPTION_SET_NAME \ --location $LOCATION \ --resource-group $RESOURCEGROUP \ --source-vault $KEYVAULT_ID \ --key-url $KEYVAULT_KEY_URLディスク暗号化セットのリソース ID と ID 変数を指定します。
DES_ID=$(az disk-encryption-set show --name $DISK_ENCRYPTION_SET_NAME --resource-group $RESOURCEGROUP --query 'id' -o tsv) DES_IDENTITY=$(az disk-encryption-set show --name $DISK_ENCRYPTION_SET_NAME --resource-group $RESOURCEGROUP --query "[identity.principalId]" -o tsv)
キー コンテナーにアクセスするためのディスク暗号化セットのアクセス許可を付与する
ディスク暗号化セットのマネージド ID で暗号化キーを使用する必要があります。 Key Vault Crypto Service Encryption User や Key Vault Crypto User など、必要なキーアクセス許可を提供する組み込みロールを割り当てます。 または、ディスク暗号化セットに必要なキー操作を実行するために必要なアクセス許可 (wrapkey、 unwrapkey、 get) が含まれている限り、カスタム ロールを使用します。
az role assignment create \
--assignee $DES_IDENTITY \
--role "Key Vault Crypto Service Encryption User" \
--scope $KEYVAULT_ID
Azure Red Hat OpenShift クラスターを作成する
クラスターを作成するときに、ディスク暗号化セットを指定することで、カスタマー マネージド キーを有効にすることができます。
--disk-encryption-set パラメーターを使用します。 たとえば、「 --disk-encryption-set $DES_ID 」のように入力します。
サービス プリンシパルを使用してクラスターを作成するには、「Azure Red Hat OpenShift クラスターの作成」の手順に従います。
--disk-encryption-set パラメーターを使用してクラスターを作成する例を次に示します。
az aro create \
--resource-group $RESOURCEGROUP \
--name $CLUSTER \
--vnet aro-vnet \
--master-subnet master-subnet \
--worker-subnet worker-subnet \
--disk-encryption-set $DES_ID
注
マスター ノードではなく、ワーカー ノードの 既存 のクラスターでのみカスタマー マネージド キーを有効にすることができます。 この構成を実現できます。 詳細については、 マシン セットのカスタマー マネージド暗号化キーの有効化 や コンピューティング マシン セットの変更など、Red Hat のドキュメントを参照してください。
マネージド ID を持つAzure Red Hat OpenShift クラスターを作成するには、クラスターを作成する前に、machine-api ID とdisk-csi-driver ID を付与する必要があります。 また、ディスク暗号化セットのAzure Red Hat OpenShiftファースト パーティ サービス プリンシパルMicrosoft.Compute/diskEncryptionSets/readアクセス許可を付与する必要もあります。
machine-api ID、disk-csi-driver ID および ARO ファースト パーティ サービス プリンシパルのロール割り当ての例:
az role assignment create \
--assignee-object-id "$(az identity show --resource-group $RESOURCEGROUP --name disk-csi-driver --query principalId -o tsv)" \
--assignee-principal-type ServicePrincipal \
--role <ROLE> \
--scope $DES_ID"
az role assignment create \
--assignee-object-id "$(az identity show --resource-group $RESOURCEGROUP --name machine-api --query principalId -o tsv)" \
--assignee-principal-type ServicePrincipal \
--role <ROLE> \
--scope $DES_ID
az role assignment create \
--assignee-object-id "$(az ad sp list --display-name "Azure Red Hat OpenShift RP" --query '[0].id' -o tsv)" \
--assignee-principal-type ServicePrincipal \
--role <ROLE> \
--scope $DES_ID
Azure Red Hat OpenShift クラスターを作成すると、すべての VM がカスタマー マネージド暗号化キーで暗号化されます。
キーを正しく構成したことを確認するには、次のコマンドを実行します。
クラスターの VM、ディスク、およびその他のインフラストラクチャが配置されているクラスター リソース グループの名前を取得します。
CLUSTERRESOURCEGROUP=$(az aro show --resource-group $RESOURCEGROUP --name $CLUSTER --query 'clusterProfile.resourceGroupId' -o tsv | cut -d '/' -f 5)ディスクに正しいディスク暗号化セットが接続されていることを確認します。
az disk list --resource-group $CLUSTERRESOURCEGROUP --query '[].encryption'
出力diskEncryptionSetIdフィールドは、Azure Red Hat OpenShift クラスターの作成時に指定したディスク暗号化セットを指している必要があります。
カスタマー マネージド キーとAzure Policyの適用に対するマネージド HSM (mHSM) サポートを追加する
カスタマー マネージド キーのマネージド HSM (mHSM) サポートを追加し、特定の暗号化属性を要求および拒否することもできます。 このサポートには、API とAzure Policyの変更が必要です。
mHSM キーとカスタマー マネージド キーを使用してAzure Red Hat OpenShift クラスターを作成するには、次の手順に従います。
前の手順から環境変数をエクスポートします。
export HSM_NAME=<hsm-name> export RESOURCE_GROUP=<resource-group>Azure Resource Managerを使用して消去保護とキー管理を有効にします。
az keyvault update-hsm \ --hsm-name $HSM_NAME \ --resource-group $RESOURCE_GROUP \ --enable-purge-protection true az keyvault setting update \ --hsm-name $HSM_NAME \ --name AllowKeyManagementOperationsThroughARM \ --value truemHSM をアクティブ化するには、残りの手順 を完了します。マネージド HSM をアクティブ化します。
mHSM でキーを作成できるように、
Managed HSM Crypto Userロールを自分に付与します。oid=$(az ad signed-in-user show --query id -o tsv) az keyvault role assignment create \ --hsm-name $HSM_NAME \ --role "Managed HSM Crypto User" \ --assignee $oid \ --scope /keysマネージド ID を作成し、mHSM に対して
Managed HSM Crypto Service Encryption Userロールを付与します。export UA_IDENTITY=<new-ua-identity>HSM_ID="https://${HSM_NAME}.managedhsm.azure.net" az identity create \ --resource-group $RESOURCE_GROUP \ --name $UA_IDENTITY IDENTITY_OBJECT_ID=$(az identity show \ --resource-group $RESOURCE_GROUP \ --name $UA_IDENTITY \ --query principalId -o tsv) az keyvault role assignment create \ --id "$HSM_ID" \ --role "Managed HSM Crypto Service Encryption User" \ --assignee-object-id "$IDENTITY_OBJECT_ID" \ --scope "/keys/byok-key"以下を考慮して、ディスク暗号化セットを作成します。
暗号化の種類を次のように設定します。
Encryption at-rest with a customer-managed key.前の手順で作成したユーザー割り当て ID を使用します。
ディスク暗号化セットを作成する前に、ロールの割り当てを完了します。
前の手順から環境変数をエクスポートします。
export LOCATION=<yourLocation> export CLUSTER=<yourNewClusterName> export VIRTUAL_NETWORK=<yourVirtualNetwork> export KEYVAULT_NAME=<yourKeyvaultName> export KEYVAULT_KEY_NAME=byok-key export DISK_ENCRYPTION_SET_NAME=<yourDiskEncryptionSetName>新しいディスク暗号化セットを使用してクラスターを作成します。
DES_ID=$(az disk-encryption-set show -n $DISK_ENCRYPTION_SET_NAME -g $RESOURCE_GROUP --query 'id' -o tsv) az aro create --resource-group $RESOURCE_GROUP \ --name $CLUSTER \ --vnet $VIRTUAL_NETWORK \ --master-subnet master-subnet \ --worker-subnet worker-subnet \ --disk-encryption-set $DES_IDクラスターが起動したら、暗号化を確認します。
az disk list -g $VIRTUAL_NETWORK --query "[].{DiskName:name, VM:managedBy, EncryptionType:encryption.type, DiskEncryptionSet:encryption.diskEncryptionSetId}" -o table暗号化を確認するには、
EncryptionAtRestWithCustomerKey列でEncryptionTypeを探します。