Azure Kubernetes Service (AKS) クラスターにデプロイする前に、イメージの整合性を使用して署名済みイメージを検証する (プレビュー)
Azure Kubernetes Service (AKS) とその基盤のコンテナー モデルにより、クラウド ネイティブ アプリケーションのスケーラビリティと管理性が向上します。 AKS を使用すると、システムの実行時のニーズに応じて柔軟なソフトウェア アプリケーションを起動できます。 ただし、この柔軟性により、新しい課題が生じる可能性があります。
このようなアプリケーション環境で署名済みコンテナー イメージを使用すると、デプロイが信頼されたエンティティから構築されていること、およびイメージが作成後に改ざんされていないことを確認するのに役立ちます。 イメージの整合性は、Azure Policy の組み込み定義を追加して、署名済みイメージのみが AKS クラスターにデプロイされていることを確認できるサービスです。
Note
イメージの整合性は、Ratify に基づく機能です。 AKS クラスターでは、機能名とプロパティ名は ImageIntegrity
ですが、関連するイメージの整合性ポッドの名前には Ratify
が含まれます。
重要
AKS のプレビュー機能は、セルフサービスのオプトイン単位で利用できます。 プレビューは、"現状有姿" および "利用可能な限度" で提供され、サービス レベル アグリーメントおよび限定保証から除外されるものとします。 AKS プレビューは、ベストエフォート ベースでカスタマー サポートによって部分的にカバーされます。 そのため、これらの機能は、運用環境での使用を意図していません。 詳細については、次のサポート記事を参照してください。
前提条件
Azure サブスクリプション。 Azure サブスクリプションをお持ちでない場合は、無料のアカウントを作成できます。
aks-preview
CLI 拡張機能バージョン 0.5.96 以降。クラスターで AKS の Azure Policy アドオンが有効になっていることを確認します。 このアドオンがインストールされていない場合は、「AKS 用の Azure Policy アドオンをインストールする」を参照してください。
OIDC Issuer を使用して有効にした AKS クラスター。 新しいクラスターを作成するか、既存のクラスターを更新するには、OIDC Issuer を使用して AKS クラスターを構成する方法に関する記事を参照してください。
Azure サブスクリプションに登録されている
EnableImageIntegrityPreview
およびAKS-AzurePolicyExternalData
機能フラグ。 機能フラグを登録するには、次のコマンドを使用します。az feature register
コマンドを使用して、EnableImageIntegrityPreview
およびAKS-AzurePolicyExternalData
機能フラグを登録します。# Register the EnableImageIntegrityPreview feature flag az feature register --namespace "Microsoft.ContainerService" --name "EnableImageIntegrityPreview" # Register the AKS-AzurePolicyExternalData feature flag az feature register --namespace "Microsoft.ContainerService" --name "AKS-AzurePolicyExternalData"
状態が [登録済み] と表示されるまでに数分かかる場合があります。
az feature show
コマンドを使用して、登録の状態を確認します。# Verify the EnableImageIntegrityPreview feature flag registration status az feature show --namespace "Microsoft.ContainerService" --name "EnableImageIntegrityPreview" # Verify the AKS-AzurePolicyExternalData feature flag registration status az feature show --namespace "Microsoft.ContainerService" --name "AKS-AzurePolicyExternalData"
状態が [登録済み] と表示されたら、
az provider register
コマンドを使用して、Microsoft.ContainerService
リソース プロバイダーの登録を更新します。az provider register --namespace Microsoft.ContainerService
考慮事項と制限事項
- AKS クラスターでは、Kubernetes バージョン 1.26 以上を実行する必要があります。
- 運用環境のAzure Container Registry (ACR) レジストリまたはワークロードには、この機能を使用しないでください。
- イメージの整合性は、クラスター全体で同時に最大 200 個の一意の署名をサポートします。
- 表記が、サポートされている唯一の検証ツールです。
- 監査が、サポートされている唯一の検証ポリシー効果です。
イメージの整合性のしくみ
イメージの整合性は、署名されたイメージを AKS クラスターにデプロイする前に、Ratify、Azure Policy、Gatekeeper を使用して検証します。 クラスターでイメージの整合性を有効にすると、Ratify
ポッドがデプロイされます。 この Ratify
ポッドが、次のタスクを実行します。
Ratify
CRD 経由で設定した構成に応じて、Azure Key Vault の証明書を調整します。- 検証要求が Azure Policy から着信すると、ACR に格納されているイメージにアクセスします。 このエクスペリエンスを有効にするために、Azure Policy は、Open Policy Agent (OPA) のアドミッション コントローラー Webhook である Gatekeeper を拡張します。
- ターゲット イメージが信頼された証明書で署名され、"信頼済み" とみなされるかどうかを判断します。
AzurePolicy
とGatekeeper
がコンプライアンス状態として検証結果を使用して、デプロイ要求を許可するかどうかを決定します。
AKS クラスターでイメージの整合性を有効にする
Note
イメージの署名の検証はガバナンス指向のシナリオであり、Azure Policy を利用して AKS クラスターのイメージ署名を大規模に検証します。 AKS のイメージの整合性が組み込まれた Azure Policy イニシアチブを使用することをお勧めします。これは、Azure Policyの組み込み定義ライブラリから入手できます。
az policy assignment create
コマンドを使用して、AKS ポリシー イニシアチブ[Preview]: Use Image Integrity to ensure only trusted images are deployed
でポリシーの割り当てを作成します。export SCOPE="/subscriptions/${SUBSCRIPTION}/resourceGroups/${RESOURCE_GROUP}" export LOCATION=$(az group show --name ${RESOURCE_GROUP} --query location -o tsv) az policy assignment create --name 'deploy-trustedimages' --policy-set-definition 'af28bf8b-c669-4dd3-9137-1e68fdc61bd6' --display-name 'Audit deployment with unsigned container images' --scope ${SCOPE} --mi-system-assigned --role Contributor --identity-scope ${SCOPE} --location ${LOCATION}
この機能を有効にすると、
Ratify
ポッドがデプロイされます。
Note
このポリシーは、クラスターでの更新操作を検出すると、クラスターにイメージの整合性機能をデプロイします。 この機能をすぐに有効にする場合は、az policy remediation create
コマンドを使用してポリシー修復を作成する必要があります。
assignment_id=$(az policy assignment show --name 'deploy-trustedimages' --scope ${SCOPE} --query id -o tsv)
az policy remediation create --policy-assignment "$assignment_id" --definition-reference-id deployAKSImageIntegrity --name remediation --resource-group ${RESOURCE_GROUP}
検証構成を設定する
イメージの整合性がターゲットの署名済みイメージを適切に検証するには、kubectl
を使用して K8s の CRD 経由で Ratify
構成を設定する必要があります。
この記事では、公式の Ratify ドキュメントの自己署名 CA 証明書を使用して、検証構成を設定します。 その他の例については、Ratify の CRD に関するページを参照してください。
verify-config.yaml
という名前のVerifyConfig
ファイルを作成し、そこに次の YAML をコピーします。apiVersion: config.ratify.deislabs.io/v1beta1 kind: CertificateStore metadata: name: certstore-inline spec: provider: inline parameters: value: | -----BEGIN CERTIFICATE----- MIIDQzCCAiugAwIBAgIUDxHQ9JxxmnrLWTA5rAtIZCzY8mMwDQYJKoZIhvcNAQEL BQAwKTEPMA0GA1UECgwGUmF0aWZ5MRYwFAYDVQQDDA1SYXRpZnkgU2FtcGxlMB4X DTIzMDYyOTA1MjgzMloXDTMzMDYyNjA1MjgzMlowKTEPMA0GA1UECgwGUmF0aWZ5 MRYwFAYDVQQDDA1SYXRpZnkgU2FtcGxlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A MIIBCgKCAQEAshmsL2VM9ojhgTVUUuEsZro9jfI27VKZJ4naWSHJihmOki7IoZS8 3/3ATpkE1lGbduJ77M9UxQbEW1PnESB0bWtMQtjIbser3mFCn15yz4nBXiTIu/K4 FYv6HVdc6/cds3jgfEFNw/8RVMBUGNUiSEWa1lV1zDM2v/8GekUr6SNvMyqtY8oo ItwxfUvlhgMNlLgd96mVnnPVLmPkCmXFN9iBMhSce6sn6P9oDIB+pr1ZpE4F5bwa gRBg2tWN3Tz9H/z2a51Xbn7hCT5OLBRlkorHJl2HKKRoXz1hBgR8xOL+zRySH9Qo 3yx6WvluYDNfVbCREzKJf9fFiQeVe0EJOwIDAQABo2MwYTAdBgNVHQ4EFgQUKzci EKCDwPBn4I1YZ+sDdnxEir4wHwYDVR0jBBgwFoAUKzciEKCDwPBn4I1YZ+sDdnxE ir4wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAgQwDQYJKoZIhvcNAQEL BQADggEBAGh6duwc1MvV+PUYvIkDfgj158KtYX+bv4PmcV/aemQUoArqM1ECYFjt BlBVmTRJA0lijU5I0oZje80zW7P8M8pra0BM6x3cPnh/oZGrsuMizd4h5b5TnwuJ hRvKFFUVeHn9kORbyQwRQ5SpL8cRGyYp+T6ncEmo0jdIOM5dgfdhwHgb+i3TejcF 90sUs65zovUjv1wa11SqOdu12cCj/MYp+H8j2lpaLL2t0cbFJlBY6DNJgxr5qync cz8gbXrZmNbzC7W5QK5J7fcx6tlffOpt5cm427f9NiK2tira50HU7gC3HJkbiSTp Xw10iXXMZzSbQ0/Hj2BF4B40WfAkgRg= -----END CERTIFICATE----- --- apiVersion: config.ratify.deislabs.io/v1beta1 kind: Store metadata: name: store-oras spec: name: oras # If you want to you use Workload Identity for Ratify to access Azure Container Registry, # uncomment the following lines, and fill the proper ClientID: # See more: https://ratify.dev/docs/reference/oras-auth-provider # parameters: # authProvider: # name: azureWorkloadIdentity # clientID: XXX --- apiVersion: config.ratify.deislabs.io/v1beta1 kind: Verifier metadata: name: verifier-notary-inline spec: name: notation artifactTypes: application/vnd.cncf.notary.signature parameters: verificationCertStores: # certificates for validating signatures certs: # name of the trustStore - certstore-inline # name of the certificate store CRD to include in this trustStore trustPolicyDoc: # policy language that indicates which identities are trusted to produce artifacts version: "1.0" trustPolicies: - name: default registryScopes: - "*" signatureVerification: level: strict trustStores: - ca:certs trustedIdentities: - "*"
kubectl apply
コマンドを使用してVerifyConfig
をクラスターに適用します。kubectl apply -f verify-config.yaml
サンプル イメージを AKS クラスターにデプロイする
kubectl run demo
コマンドを使用して署名済みイメージをデプロイします。kubectl run demo-signed --image=ghcr.io/deislabs/ratify/notary-image:signed
次の出力例は、イメージの整合性がデプロイを許可することを示しています。
ghcr.io/deislabs/ratify/notary-image:signed pod/demo-signed created
独自のイメージを使用する場合は、イメージ署名のガイダンスを参照してください。
イメージの整合性を無効にする
--disable-image-integrity
フラグを指定してaz aks update
コマンドを使用することで、クラスターでイメージの整合性を無効にします。az aks update --resource-group myResourceGroup --name MyManagedCluster --disable-image-integrity
ポリシー イニシアティブを削除する
az policy assignment delete
コマンドを使用してポリシー イニシアチブを削除します。az policy assignment delete --name 'deploy-trustedimages'
次のステップ
この記事では、Azure Kubernetes Service (AKS) クラスターにデプロイする前に、イメージの整合性を使用して署名済みイメージを検証する方法について学習しました。 独自のコンテナーに署名する方法については、Notary と Azure Key Vault (プレビュー) を使用してコンテナー イメージをビルド、署名、検証する方法に関する記事を参照してください。
Azure Kubernetes Service