Share via


Azure Kubernetes Service (AKS) クラスターにデプロイする前に、イメージの整合性を使用して署名済みイメージを検証する (プレビュー)

Azure Kubernetes Service (AKS) とその基盤のコンテナー モデルにより、クラウド ネイティブ アプリケーションのスケーラビリティと管理性が向上します。 AKS を使用すると、システムの実行時のニーズに応じて柔軟なソフトウェア アプリケーションを起動できます。 ただし、この柔軟性により、新しい課題が生じる可能性があります。

このようなアプリケーション環境で署名済みコンテナー イメージを使用すると、デプロイが信頼されたエンティティから構築されていること、およびイメージが作成後に改ざんされていないことを確認するのに役立ちます。 イメージの整合性は、Azure Policy の組み込み定義を追加して、署名済みイメージのみが AKS クラスターにデプロイされていることを確認できるサービスです。

Note

イメージの整合性は、Ratify に基づく機能です。 AKS クラスターでは、機能名とプロパティ名は ImageIntegrity ですが、関連するイメージの整合性ポッドの名前には Ratify が含まれます。

重要

AKS のプレビュー機能は、セルフサービスのオプトイン単位で利用できます。 プレビューは、"現状有姿のまま" および "利用可能な限度" で提供され、サービス レベル アグリーメントおよび限定保証から除外されるものとします。 AKS プレビューは、ベストエフォート ベースでカスタマー サポートによって部分的にカバーされます。 そのため、これらの機能は、運用環境での使用を意図していません。 詳細については、次のサポート記事を参照してください。

前提条件

  • Azure サブスクリプション。 Azure サブスクリプションをお持ちでない場合は、無料のアカウントを作成できます。

  • Azure CLI または Azure PowerShell

  • aks-preview CLI 拡張機能バージョン 0.5.96 以降。

  • クラスターで AKS の Azure Policy アドオンが有効になっていることを確認します。 このアドオンがインストールされていない場合は、「AKS 用の Azure Policy アドオンをインストールする」を参照してください。

  • OIDC Issuer を使用して有効にした AKS クラスター。 新しいクラスターを作成するか、既存のクラスターを更新するには、OIDC Issuer を使用して AKS クラスターを構成する方法に関する記事を参照してください。

  • Azure サブスクリプションに登録されている EnableImageIntegrityPreview および AKS-AzurePolicyExternalData 機能フラグ。 機能フラグを登録するには、次のコマンドを使用します。

    1. 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"
      

      状態が [登録済み] と表示されるまでに数分かかる場合があります。

    2. 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"
      
    3. 状態が [登録済み] と表示されたら、az provider register コマンドを使用して、Microsoft.ContainerService リソース プロバイダーの登録を更新します。

      az provider register --namespace Microsoft.ContainerService
      

考慮事項と制限事項

  • AKS クラスターでは、Kubernetes バージョン 1.26 以上を実行する必要があります。
  • 運用環境のAzure Container Registry (ACR) レジストリまたはワークロードには、この機能を使用しないでください。
  • イメージの整合性は、クラスター全体で同時に最大 200 個の一意の署名をサポートします。
  • 表記が、サポートされている唯一の検証ツールです。
  • 監査が、サポートされている唯一の検証ポリシー効果です。

イメージの整合性のしくみ

Screenshot showing the basic architecture for Image Integrity.

イメージの整合性は、署名されたイメージを AKS クラスターにデプロイする前に、Ratify、Azure Policy、Gatekeeper を使用して検証します。 クラスターでイメージの整合性を有効にすると、Ratify ポッドがデプロイされます。 この Ratify ポッドが、次のタスクを実行します。

  1. Ratify CRD 経由で設定した構成に応じて、Azure Key Vault の証明書を調整します。
  2. 検証要求が Azure Policy から着信すると、ACR に格納されているイメージにアクセスします。 このエクスペリエンスを有効にするために、Azure Policy は、Open Policy Agent (OPA) のアドミッション コントローラー Webhook である Gatekeeper を拡張します。
  3. ターゲット イメージが信頼された証明書で署名され、"信頼済み" とみなされるかどうかを判断します。
  4. AzurePolicyGatekeeper がコンプライアンス状態として検証結果を使用して、デプロイ要求を許可するかどうかを決定します。

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 に関するページを参照してください。

  1. 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:
                - "*"
    
  2. 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 (プレビュー) を使用してコンテナー イメージをビルド、署名、検証する方法に関する記事を参照してください。