すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:シークレットを使用せずに Container Registry インスタンスからイメージをプルする

最終更新日:Nov 10, 2025

Contain Service for Kubernetes (ACK) のシークレットフリーコンポーネントは、イメージプルの認証プロセスを自動化し、imagePullSecrets を構成する必要性を排除します。このトピックでは、イメージプルのシークレットフリーコンポーネントのインストール、構成、使用方法、および関連する注意事項について説明します。

シークレットフリーコンポーネントの仕組み

Container Registry インスタンスで匿名ユーザーからのプルを有効にしていない場合、ACK クラスタの Container Registry インスタンスからコンテナイメージをプルするたびに、認証のためにユーザー名とパスワードを提供する必要があります。認証を容易にするために、ユーザー名とパスワードを Kubernetes シークレットに保存できます。ただし、この方法には次の問題がある可能性があります。

  • シークレットは Base64 でエンコードされたプレーンテキストであり、漏洩しやすい。

  • ワークロードのイメージをプルするたびに、imagePullSecrets パラメーターを指定する必要がある。

  • デフォルトでは、シークレットはシークレットの名前空間内でのみ使用できる。

前述の問題を解決するために、ACK のシークレットフリーコンポーネントを使用できます。次の手順は、コンポーネントの仕組みを説明しています。

  1. aliyun-acr-credential-helper は、Container Registry インスタンスから一時アカウントとトークンを取得します。

  2. aliyun-acr-credential-helper は、一時アカウントとトークンをシークレットに保存します。

  3. aliyun-acr-credential-helper は、acr-configuration ConfigMap で指定したサービスアカウントにシークレットを関連付けます。

  4. デフォルトでは、サービスアカウントのワークロードは、シークレットに保存されている一時アカウントとトークンを使用してイメージをプルします。

aliyun-acr-credential-helper は、複数の名前空間のサービスアカウントを同時に管理し、ConfigMap の構成に基づいてシークレットに保存されている一時アカウントとトークンを定期的に更新できます。これにより、一時アカウントとトークンの漏洩リスクが軽減されます。 aliyun-acr-credential-helper を使用すると、ワークロードに imagePullSecrets を指定する必要がなくなります。 aliyun-acr-credential-helper の使用は無料です。

重要
  • 2024 年 9 月 8 日以前に作成された Container Registry Personal Edition インスタンスと Container Registry Enterprise Edition インスタンスのみが aliyun-acr-credential-helper をサポートしています。

  • 2024 年 9 月 9 日以降に作成された Container Registry Personal Edition インスタンスは、aliyun-acr-credential-helper をサポートしていません。 2024 年 9 月 8 日より後に作成された Container Registry Personal Edition インスタンスからイメージをプルする場合は、Personal Edition インスタンスへのログインに使用するユーザー名とトークンをシークレットに保存し、ワークロードの YAML ファイルの imagePullSecrets パラメーターでシークレットを参照することをお勧めします。

シークレットフリーコンポーネントのエディション

ACK が提供するシークレットフリーコンポーネントは、マネージドエディション(managed-aliyun-acr-credential-helper)とセルフマネージドエディション(aliyun-acr-credential-helper)で利用できます。同時にインストールできるエディションは 1 つだけです。次の表は、エディションを比較したものです。

項目

managed-aliyun-acr-credential-helper

aliyun-acr-credential-helper (セルフマネージドエディション)

サポートされているクラスタバージョン

  • Kubernetes 1.22 以降を実行する ACK Pro マネージドクラスター

  • Kubernetes 1.22 以降を実行する Serverless Kubernetes クラスター

  • Kubernetes 1.22 以降を実行する ACK Edge クラスター

  • Kubernetes 1.20.0 以降を実行する ACK ベーシッククラスター

  • Kubernetes 1.20.0 以降を実行する ACK Pro マネージドクラスター

  • Kubernetes 1.20.0 以降を実行する ACK 専用クラスター

デプロイ方法

クラスターのコントロールプレーンにデプロイされます。

ワークロードを使用して Kubernetes クラスタにデプロイされます。デフォルトでは、クラスターの kube-system 名前空間に、0.5 vCPU と 0.5 GiB のメモリを持つポッドが aliyun-acr-credential-helper (セルフマネージドエディション) 用に作成されます。

コンポーネントのクエリログ

サポートされていません。

サポートされています。

Alibaba Cloud アカウント間で Container Registry インスタンスからイメージをプルする方法

サービスアカウントの RAM ロール (RRSA) 機能を使用します。

ワーカーロール、RRSA、または AccessKey ペアを使用します。

サービスアカウントのインスタンス使用を確実にするために Webhook 機能を有効にする

サポートされていません。

サポートされています。

Container Registry コンソールのカード (Container Registry コンソールのコンポーネント管理ページでコンポーネントのエディションを確認できます。)

image

image

前提条件

  • お使いのクラスタバージョンは、シークレットフリーコンポーネントのエディションでサポートされています。詳細については、このトピックの前の「シークレットフリーコンポーネントのエディション」セクションの表を参照してください。

  • Container Registry インスタンスは、2024 年 9 月 8 日以前に作成された Personal Edition インスタンス、または Enterprise Edition インスタンスです。

  • シークレットフリーコンポーネントを使用する RAM ロールには、Container Registry インスタンスへのアクセス、イメージリポジトリの読み取りと書き込み、およびシークレットの管理と更新に必要な権限が付与されています。 RAM に権限が付与されていない場合は、RAM ロールに権限を付与 してください。

managed-aliyun-acr-credential-helper を使用する

コンポーネントをインストールする

  1. ACK コンソール にログインします。左側のナビゲーションウィンドウで、[クラスタ] をクリックします。

  2. [クラスタ] ページで、管理するクラスタを見つけて、その名前をクリックします。左側のウィンドウで、[操作] > [アドオン] を選択します。

  3. [アドオン] ページで、[セキュリティ] タブをクリックし、セキュリティセクションで [aliyun-acr-credential-helper (マネージド)] カードを見つけ、カードの右下隅にある [インストール] をクリックします。

  4. [aliyun-acr-credential-helper をインストール] ページには、[AcrInstanceInfo] 関連のパラメーターとその他のパラメーターが表示されます。 [AcrInstanceInfo] 関連のパラメーターは、シークレットフリーコンポーネントで管理する Container Registry インスタンスに関する情報を指定します。その他のパラメーターは、シークレットフリーコンポーネントに関する情報を指定します。次の表は、パラメーターについて説明しています。

    説明

    シークレットフリーコンポーネントをインストールした後、AcrInstanceInfo 関連のパラメーターとその他のパラメーターを変更できます。

    image

    関連付けられている Container Registry インスタンスに関するパラメーター

    AcrInstanceInfo

    説明

    [インスタンス ID]

    Container Registry インスタンスの ID。Container Registry コンソール で ID を取得できます。

    重要

    Container Registry Personal Edition インスタンスを使用する場合は、このパラメーターを空のままにします。 Container Registry Enterprise Edition インスタンスを使用する場合は、このパラメーターを指定する必要があります。

    [リージョン ID]

    Container Registry インスタンスのリージョン ID。Container Registry コンソール でリージョン ID を取得できます。

    重要

    リージョンをまたいでイメージをプルする場合は、このパラメーターを指定する必要があります。

    [ドメイン]

    シークレットフリーコンポーネントが Container Registry インスタンスにアクセスするために使用するドメイン名。デフォルトでは、Container Registry インスタンスのすべてのパブリックドメイン名と VPC ドメイン名が入力されます。特定のドメイン名を指定できます。複数のドメイン名はコンマ (,) で区切ります。

    アカウントをまたいでイメージをプルする場合にのみ、これらのパラメーターを指定します

    [RAM ロールの ARN を想定]

    Container Registry インスタンスの所有者が想定する RAM ロールの Alibaba Cloud リソースネーム (ARN)。

    [有効期限]

    Alibaba Cloud アカウント間でイメージをプルするために使用されるシークレットの有効期間。有効な値: 3600 ~ 43200。デフォルト値: 3600。単位: 秒。アカウント B の RAM ロールの MaxSessionDuration を 43200 に設定します。

    [RRSA ロールの ARN]

    ACK クラスタの所有者が想定する RAM ロールの ARN。

    [RRSA OIDC プロバイダーのロール ARN]

    ACK クラスタの OIDC (OpenID Connect) IdP (ID プロバイダー) の ARN。

    シークレットフリーコンポーネントに関するパラメーター

    パラメーター

    説明

    [RRSA を有効にするかどうかを指定します]

    アカウントをまたいでイメージをプルする場合は、このオプションを選択して RRSA 機能を有効にします。

    [名前空間を監視]

    シークレットを使用せずにイメージをプルする名前空間を指定します。デフォルト値: defaultall の値は、Container Registry インスタンスのすべての名前空間を指定します。複数の名前空間を指定できます。複数の名前空間はコンマ (,) で区切ります。このパラメーターにはビジネス名前空間を構成することをお勧めします。パラメーターを all またはクラスターのシステムコンポーネントが格納されている名前空間に設定すると、システムコンポーネントイメージのプルに失敗する可能性があります。

    [サービスアカウント]

    managed-aliyun-acr-credential-helper に関連付けられているサービスアカウントを指定します。デフォルト値: DefaultDefault の値は、指定されたすべての名前空間のデフォルトのサービスアカウントを指定します。アスタリスク (*) の値は、指定された名前空間のすべてのサービスアカウントを指定します。複数のサービスアカウントを指定できます。サービスアカウントはコンマ (,) で区切ります。

    [有効期限のしきい値]

    シークレットの有効期限が切れるまでの期間を指定します。デフォルト値: 15m。デフォルト値を使用することをお勧めします。デフォルト値は、シークレットの有効期限が切れる 15 分前にシークレットが自動的に更新されることを指定します。

    [通知メール]

    このパラメーターを指定する必要はありません。

シークレットフリーコンポーネントの構成を更新する

シークレットフリーコンポーネントの構成を更新するには、[アドオン] ページの [aliyun-acr-credential-helper (マネージド)] カードの右下隅にある [構成] をクリックします。構成の更新に使用されるパラメーターの詳細については、前の表「関連付けられている Container Registry インスタンスに関するパラメーター」および「シークレットフリーコンポーネントに関するパラメーター」を参照してください。

image

イメージをプルする

シークレットフリーコンポーネントをインストールして構成した後、ワークロードの作成時にシークレットフリーコンポーネントに関連付けられているサービスアカウントを指定して、シークレットを使用せずにイメージをプルできます。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      serviceAccountName: my-service-account # シークレットフリーコンポーネントに関連付けられているサービスアカウントを指定します。
      containers:
      - name: nginx
        image: ******.cn-hangzhou.cr.aliyuncs.com/nginx/nginx:latest # Container Registry イメージのアドレスを指定します。
        ports:
        - containerPort: 80

その他の操作

アカウントをまたいでイメージをプルする

managed-aliyun-acr-credential-helper を使用すると、サービスアカウントの RAM ロール (RRSA) を使用してアカウントをまたいでイメージをプルできます。

重要
  • Kubernetes 1.22 以降を実行する ACK ベーシッククラスターACK Pro マネージドクラスター、および ACK Serverless Pro クラスター でのみ、RRSA を構成して Container Registry Enterprise Edition インスタンスからイメージをプルできます。

  • RRSA 機能を有効にした後、managed-aliyun-acr-credential-helper によって生成されたシークレットを使用して、Container Registry Personal Edition インスタンスの非公開イメージをプルすることはできません。 RRSA 機能を有効にした後、このトピックで説明されている AccessKey ペア方式などの他の認証方式を使用することはできません。

  • managed-aliyun-acr-credential-helper の RRSA 機能を有効にするには、ACK コンソールの [クラスタ情報] ページの [基本情報] タブでクラスタの RRSA を有効にし、managed-aliyun-acr-credential-helper の RRSA を構成する必要があります。 managed-aliyun-acr-credential-helper の RRSA を構成してからクラスタの RRSA を有効にする場合は、クラスタの RRSA を有効にした後、managed-aliyun-acr-credential-helper に対応するポッドを削除する必要があります。これにより、RRSA が有効になります。

  1. クラスタの RRSA 機能を有効にします。詳細については、「RRSA を使用して異なるポッドに異なるクラウドサービスへのアクセスを許可する」トピックの「RRSA を有効にする」セクションを参照してください。

    クラスタの RRSA 機能を有効にした後、[基本情報] タブの [セキュリティと監査] セクションに移動します。 [RRSA OIDC] の横にある [有効] ラベルにマウスポインターを合わせると、OpenID Connect (OIDC) プロバイダーの URL と Alibaba Cloud リソースネーム (ARN) が表示されます。

    image

  2. クラスタ所有者の RAM ユーザーに、アカウントをまたいで Container Registry リソースにアクセスするために必要な権限を付与します。

    クラスタの RRSA 機能を有効にした後、次の操作を実行して、クラスタ所有者の RAM ユーザーに権限を付与する必要があります。たとえば、現在のクラスタがアカウント A にあり、Container Registry インスタンスがアカウント B にあるとします。 Container Registry インスタンスからイメージをプルする場合は、アカウント A のクラスタにアカウント B の Container Registry リソースにアクセスするための権限を付与する必要があります。

    1. アカウント A の RAM ロールを構成します。

      アカウント A に RAM ロールを作成し、AliyunSTSAssumeRoleAccess ポリシーを RAM ロールにアタッチします。このポリシーは、RAM ロールに他の RAM ロールを想定する権限を付与します。次のコードに示すように、RAM ロールの信頼ポリシーを変更します。

      • 例の <oidc_issuer_url> を、手順 1 で記録したクラスタの OIDC IdP URL に置き換えます。

      • 例の <oidc_provider_arn> を、手順 1 で記録したクラスタの OIDC IdP ARN に置き換えます。

      {
        "Statement": [
          {
            "Action": "sts:AssumeRole",
            "Condition": {
              "StringEquals": {
                "oidc:aud": "sts.aliyuncs.com",
                "oidc:iss": "<oidc_issuer_url>",
                "oidc:sub": "system:serviceaccount:kube-system:aliyun-acr-credential-helper"
              }
            },
            "Effect": "Allow",
            "Principal": {
              "Federated": [
                "<oidc_provider_arn>"
              ]
            }
          }
        ],
        "Version": "1"}
    2. アカウント B の RAM ロールを構成します。

      アカウント B に cr.* 権限を持つ RAM ロールを作成します。 RAM ロールの名前をクリックします。 [信頼ポリシー] タブで、信頼ポリシーのプリンシパルフィールドにアカウント A の RAM ロールの ARN を入力します。アカウント B の RAM ロールに次のポリシーをアタッチします。このポリシーは、アカウント B の RAM ロールに、Container Registry インスタンスに関する情報を取得し、インスタンスからイメージをプルする権限を付与します。

      {
          "Version": "1",
          "Statement": [
              {
                  "Action": [
                      "cr:GetAuthorizationToken",
                      "cr:ListInstanceEndpoint",
                      "cr:PullRepository"
                  ],
                  "Resource": "*",
                  "Effect": "Allow"
              }
          ]
      }

      RAM ロールの MaxSessionDuration パラメーターを指定できます。このパラメーターの有効な値の範囲は 3600 ~ 43200 秒です。 managed-aliyun-acr-credential-helper を構成する際には、次の手順 7 で [有効期限] パラメーターを指定する必要があります。詳細については、RAM ロールの最大セッション期間を指定する を参照してください。 MaxSessionDuration と [有効期限] に同じ値を指定することをお勧めします。 [有効期限] の値は、MaxSessionDuration の値以下にすることができます。

  3. ACK コンソール にログインします。左側のナビゲーションウィンドウで、[クラスタ] をクリックします。

  4. [クラスタ] ページで、管理するクラスタを見つけて、その名前をクリックします。左側のウィンドウで、[クラスタ情報] をクリックします。

  5. 左側のナビゲーションウィンドウで、[操作] > [アドオン] を選択します。

  6. [アドオン] ページで、[セキュリティ] タブをクリックし、セキュリティ セクションで [aliyun-acr-credential-helper] (マネージド) カードを見つけ、カードの右下隅にある [構成] をクリックします。 [aliyun-acr-credential-helper パラメーター] ダイアログボックスで、[追加] をクリックし、アカウント B の Container Registry インスタンス情報を使用して [AcrInstanceInfo] セクションのパラメーターを構成します。 [OK] をクリックします。その後、ユーザーはアカウント B の Container Registry インスタンスからイメージをプルできます。

aliyun-acr-credential-helper を使用する

コンポーネントをインストールする

  1. ACK コンソール にログインします。左側のナビゲーションウィンドウで、[クラスタ] をクリックします。

  2. [クラスタ] ページで、管理するクラスタを見つけて、その名前をクリックします。左側のウィンドウで、[操作] > [アドオン] を選択します。

  3. [アドオン] ページで、[セキュリティ] タブをクリックし、セキュリティセクションで [aliyun-acr-credential-helper] カードを見つけ、カードの右下隅にある [インストール] をクリックします。

  4. [aliyun-acr-credential-helper をインストール] ダイアログボックスで、[tokenMode] ドロップダウンリストからコンポーネントが使用する権限モードを選択し、[OK] をクリックします。次の表は、コンポーネントで使用できる権限モードについて説明しています。コンポーネントをインストールした後、シークレットを使用せずにイメージをプルするためにコンポーネントを使用する前に、コンポーネントを構成する必要があります。コンポーネントの構成方法については、シークレットフリーコンポーネントの構成を更新する を参照してください。

    tokenMode

    説明

    [自動]

    (推奨) コンポーネントは、クラスタがいつ作成されたかを検出し、コンポーネントが使用する権限モードを自動的に決定します。クラスタが 2023 年 4 月 3 日より前に作成された場合、コンポーネントは workerRole 権限モードを使用します。クラスタが 2023 年 4 月 3 日以降に作成された場合、コンポーネントは managedRole 権限モードを使用します。

    重要

    2023 年 4 月 3 日以降にリリースされた aliyun-acr-credential-helper のバージョンでは、コンポーネントが依存する RAM ロールを指定できる構成項目が提供されています。詳細については、[製品の変更] aliyun-acr-credential-helper が依存する権限を取り消す を参照してください。

    [マネージドロール]

    コンポーネントは、前提条件 で特定の権限が付与されている AliyunCSManagedAcrRole ロールを使用して権限を取得します。

    [ワーカーロール]

    コンポーネントは、クラスタのワーカーロールを使用して権限を取得します。このモードを使用するには、クラスタのワーカーロールに特定の権限を付与する必要があります。詳細については、aliyun-acr-credential-helper が workerRole 権限モードを使用する を参照してください。

    重要

    ロールの想定によってアカウントをまたいでイメージをプルする場合は、このモードを選択します。

シークレットフリーコンポーネントの構成を更新する

aliyun-acr-credential-helper コンポーネントをインストールした後、イメージをプルする前に、ACK コンソールまたは kubectl を使用して [acr-configuration] ConfigMap を構成する必要があります。

ACK コンソール

  1. [クラスタ] ページで、変更するクラスタの名前をクリックします。左側のナビゲーションウィンドウで、[構成] > [ConfigMap] を選択します。

  2. [ConfigMap] ページの上部で、[名前空間] ドロップダウンリストから [kube-system] を選択します。次に、[acr-configuration ConfigMap] を見つけてパラメーターを構成します。次の表は、パラメーターについて説明しています。

    キー

    説明

    [名前空間を監視]

    シークレットを使用せずにイメージをプルする名前空間。デフォルト値: [default][all] の値は、Container Registry インスタンスのすべての名前空間を指定します。複数の名前空間はコンマ (,) で区切ります。このパラメーターにはビジネス名前空間を構成することをお勧めします。パラメーターを all またはクラスターのシステムコンポーネントが格納されている名前空間に設定すると、システムコンポーネントイメージのプルに失敗する可能性があります。

    [acr-api-version]

    デフォルト値を使用します。

    [有効期限のしきい値]

    シークレットの有効期限が切れるまでの期間。デフォルト値: 15m。デフォルト値を使用することをお勧めします。デフォルト値は、シークレットの有効期限が切れる 15 分前にシークレットが自動的に更新されることを指定します。

    acr-registry-info

    Container Registry インスタンスに関する情報。各インスタンスは、YAML ファイルの文字列型の 3 つのパラメーターで指定できます。

    • instanceId: Container Registry インスタンスの ID。Container Registry コンソール で ID を取得できます。

      重要

      Container Registry Personal Edition インスタンスを使用する場合は、このパラメーターを空のままにします。 Container Registry Enterprise Edition インスタンスを使用する場合は、このパラメーターを指定する必要があります。

    • regionId: Container Registry インスタンスのリージョン ID。Container Registry コンソール でリージョン ID を取得できます。

      重要

      リージョンをまたいでイメージをプルする場合は、このパラメーターを指定する必要があります。次の構成例を参照してください。

    • domains: シークレットフリーコンポーネントが Container Registry インスタンスにアクセスするために使用するドメイン名。デフォルトでは、instanceId の ACR インスタンスのすべてのドメイン名が入力されます。特定のドメイン名を指定できます。複数のドメイン名はコンマ (,) で区切ります。

      リージョンをまたぐプルの構成例

      異なるリージョンの複数の Container Registry インスタンスからイメージをプルする場合は、各 Container Registry インスタンスの ID とリージョンを指定します。

      data:
          service-account: "default"
          watch-namespace: "all"
          expiring-threshold: "15m"
          notify-email: "c*@aliyuncs.com"
          acr-registry-info: |
            - instanceId: "cri-instanceId"
              regionId: "cn-beijing"
            - instanceId: "cri-instanceId"
              regionId: "cn-hangzhou"      

    [サービスアカウント]

    aliyun-acr-credential-helper に関連付けられているサービスアカウント。複数のサービスアカウントはコンマ (,) で区切ります。 [default] の値は、watch-namespace で指定されたすべての名前空間のデフォルトのサービスアカウントを指定します。アスタリスク (*) の値は、指定された名前空間のすべてのサービスアカウントを指定します。

kubectl

  1. 次のコマンドを実行して、次の情報に基づいて acr-configuration ConfigMap を変更します。

    kubectl edit cm acr-configuration -n kube-system

    キー

    説明

    service-account

    aliyun-acr-credential-helper コンポーネントがイメージをプルするために使用するサービスアカウント。

    デフォルト値: [default]

    説明

    複数のサービスアカウントはコンマ (,) で区切ります。アスタリスク (*) は、すべての名前空間のすべてのサービスアカウントを指定します。

    acr-registry-info

    Container Registry インスタンスに関する情報。各インスタンスは、YAML ファイルの文字列型の 3 つのパラメーターで指定できます。

    説明

    インスタンスを指定するためのパラメーター:

    • instanceId: Container Registry インスタンスの ID。このフィールドは、Container Registry Enterprise Edition インスタンスに必要です。

    • regionId: Container Registry インスタンスが存在するリージョンの ID。このパラメーターはオプションです。デフォルト値は、ACK クラスタが存在するリージョンです。

    • domains: Container Registry インスタンスのドメイン名。このパラメーターはオプションです。デフォルトでは、インスタンスのすべてのドメイン名が指定されます。複数のドメイン名はコンマ (,) で区切ります。

    Container Registry Enterprise Edition インスタンスのサンプル構成:

    - instanceId: <cri-instanceId>
      regionId: "cn-hangzhou"
      domains: "xxx.com,yyy.com"

    watch-namespace

    シークレットを使用せずにイメージをプルする名前空間。

    デフォルト値: [default][all] の値は、Container Registry インスタンスのすべての名前空間を指定します。複数の名前空間はコンマ (,) で区切ります。

    説明

    値を本番環境の名前空間に設定することをお勧めします。値を [all] またはクラスタのシステムコンポーネントの名前空間に設定すると、名前空間のイメージのプルに失敗する可能性があります。

    expiring-threshold

    キャッシュされたシークレットの有効期限が切れるまでの期間。

    デフォルト値: [15m]

    説明

    デフォルト値を使用することをお勧めします。デフォルト値は、キャッシュされたシークレットの有効期限が切れる 15 分前にシークレットが更新されることを指定します。

イメージをプルする

シークレットフリーコンポーネントをインストールして構成した後、ワークロードの作成時にシークレットフリーコンポーネントに関連付けられているサービスアカウントを指定して、シークレットを使用せずにイメージをプルできます。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      serviceAccountName: my-service-account # シークレットフリーコンポーネントに関連付けられているサービスアカウントを指定します。
      containers:
      - name: nginx
        image: ******.cn-hangzhou.cr.aliyuncs.com/nginx/nginx:latest # Container Registry イメージのアドレスを指定します。
        ports:
        - containerPort: 80

注意事項

Container Registry Personal Edition インスタンスを使用する

Container Registry Personal Edition インスタンスからイメージをプルする場合は、instanceId を空のままにします。

data:
    service-account: default
    watch-namespace: all
    expiring-threshold: 15m
    notify-email: c*@example.com 
    acr-registry-info: |
      - instanceId: ""  # Container Registry Personal Edition インスタンスからイメージをプルする場合は、このパラメーターを空のままにします。
        regionId: cn-xxxx

aliyun-acr-credential-helper が workerRole 権限モードを使用する

aliyun-acr-credential-helper が使用する権限モードとして workerRole を選択した場合は、クラスタのワーカーロールに次の権限が必要です。

{
    "Version": "1",
    "Statement": [
        {
            "Action": [
                "cr:GetAuthorizationToken",
                "cr:ListInstanceEndpoint",
                "cr:PullRepository"
            ],
            "Resource": "*",
            "Effect": "Allow"
        }
    ]
}

その他の操作

アカウントをまたいでイメージをプルする

aliyun-acr-credential-helper を使用すると、次の方法でアカウントをまたいで Container Registry インスタンスからイメージをプルできます。

  • RRSA を使用する: アカウント A のクラスタのサービスアカウントは、アカウント B のロールを想定します。サービスアカウントを使用するポッドは、アカウント B の非公開イメージをプルできます。

  • ワーカーロールを使用する: アカウント A のワーカーロールは、cr.* 権限を持つアカウント B の RAM ロールを想定します。次に、aliyun-acr-credential-helper はワーカーロールを使用してアカウント B の非公開イメージをプルします。この方法を使用するには、aliyun-acr-credential-helper の workerRole 権限モードを選択する必要があります。

  • Container Registry インスタンス所有者の RAM ユーザーの AccessKey ペアを使用する: アカウント A の aliyun-acr-credential-helper は、アカウント B の RAM ユーザーの AccessKey ペアを使用してアカウント B の非公開イメージをプルします。この方法は使いやすいですが、アカウント B の RAM ユーザーの AccessKey ペアはプレーンテキストで保存されるため、漏洩する可能性があります。

RRSA を使用する

重要
  • Kubernetes 1.22 以降を実行する ACK ベーシッククラスターACK Pro マネージドクラスター、および ACK Serverless Pro クラスター でのみ、RRSA を構成して Container Registry Enterprise Edition インスタンスからイメージをプルできます。

  • RRSA 機能を有効にするには、aliyun-acr-credential-helper を v23.02.06.1-74e2172-aliyun 以降に更新する必要があります。

  • managed-aliyun-acr-credential-helper の RRSA 機能を有効にするには、ACK コンソールの [クラスタ情報] ページの [基本情報] タブでクラスタの RRSA を有効にし、managed-aliyun-acr-credential-helper の RRSA を構成する必要があります。 aliyun-acr-credential-helper の RRSA を構成してからクラスタの RRSA を有効にする場合は、クラスタの RRSA を有効にした後、aliyun-acr-credential-helper に対応するポッドを削除する必要があります。これにより、RRSA が有効になります。

  1. クラスタの RRSA 機能を有効にします。詳細については、RRSA を有効にする を参照してください。

    クラスタの RRSA 機能を有効にした後、クラスタ情報ページの [基本情報] タブの [セキュリティと監査] セクションで、RRSA OIDC の横にある [有効] にポインターを移動して、OIDC IdP の URL と ARN を表示し、記録します。image

  2. クラスタ所有者の RAM ユーザーに、アカウントをまたいで Container Registry リソースにアクセスするために必要な権限を付与します。

    クラスタの RRSA 機能を有効にした後、次の操作を実行して、クラスタ所有者の RAM ユーザーに権限を付与する必要があります。たとえば、現在のクラスタがアカウント A にあり、Container Registry インスタンスがアカウント B にあるとします。 Container Registry インスタンスからイメージをプルする場合は、アカウント A のクラスタにアカウント B の Container Registry リソースにアクセスするための権限を付与する必要があります。

    1. アカウント A に RAM ロールを作成し、AliyunSTSAssumeRoleAccess ポリシーを RAM ロールにアタッチします。このポリシーは、RAM ロールに他の RAM ロールを想定する権限を付与します。次のコードに示すように、RAM ロールの信頼ポリシーを変更します。

      • 例の <oidc_issuer_url> を、手順 1 で記録したクラスタの OIDC IdP URL に置き換えます。

      • 例の <oidc_provider_arn> を、手順 1 で記録したクラスタの OIDC IdP ARN に置き換えます。

      {
        "Statement": [
          {
            "Action": "sts:AssumeRole",
            "Condition": {
              "StringEquals": {
                "oidc:aud": "sts.aliyuncs.com",
                "oidc:iss": "<oidc_issuer_url>",
                "oidc:sub": "system:serviceaccount:kube-system:aliyun-acr-credential-helper"
              }
            },
            "Effect": "Allow",
            "Principal": {
              "Federated": [
                "<oidc_provider_arn>"
              ]
            }
          }
        ],
        "Version": "1"
      }
    2. アカウント B に cr.* 権限を持つ RAM ロールを作成します。 [信頼ポリシー] タブで、信頼ポリシーのプリンシパルフィールドにアカウント A の RAM ロールの ARN を入力します。

      {
        "Statement": [
          {
            "Action": "sts:AssumeRole",
            "Effect": "Allow",
            "Principal": {
              "RAM": [
                <アカウント A に作成した RAM ロールの ARN>
              ]
            }
          }
        ],
        "Version": "1"
      }

      アカウント B の RAM ロールに次のポリシーをアタッチします。ポリシーは、アカウント B の RAM ロールに、Container Registry インスタンスに関する情報を取得し、インスタンスからイメージをプルする権限を付与します。

      {
        "Version": "1",
        "Statement": [
          {
            "Action": [
              "cr:GetAuthorizationToken",
              "cr:ListInstanceEndpoint",
              "cr:PullRepository"
            ],
            "Resource": "*",
            "Effect": "Allow"
          }
        ]
      }

      RAM ロールの [MaxSessionDuration] パラメーターを指定できます。このパラメーターの有効な値の範囲は 3600 ~ 43200 秒です。 acr-configuration ConfigMap を構成する際には、次の手順 3 で expireDuration パラメーターを指定する必要があります。 MaxSessionDuration と expireDuration に同じ値を指定することをお勧めします。 expireDuration の値は、MaxSessionDuration の値以下にすることができます。

  3. acr-configuration ConfigMap を構成する

    次の情報に基づいて acr-configuration ConfigMap を変更します。

    data:
      service-account: "default"
      watch-namespace: "all"
      expiring-threshold: "15m"
      notify-email: "c*@example.com"
      acr-registry-info: |
        - instanceId: "cri-xxx"
          regionId: "cn-hangzhou"
          domains: "instance.default.domain.com,instance.custom.domain.com"
          rrsaRoleARN: aUserRoleARN
          rrsaOIDCProviderRoleARN: aUserClusterOIDCProviderRoleARN
          assumeRoleARN: bUserRoleARN
          expireDuration: 3600
      rrsa: |
        enable: true

    パラメーター

    説明

    rrsaRoleARN

    アカウント A に作成した RAM ロールの ARN。

    acs:ram::aaa

    rrsaOIDCProviderRoleARN

    ACK コンソールの [クラスタ情報] ページの [基本情報] タブで取得した OIDC IdP の ARN。

    acs:ram::bbb

    assumeRoleARN

    アカウント B に作成した RAM ロールの ARN。

    acs:ram::ccc

    expireDuration

    アカウント B に作成した RAM ロールのセッション期間。セッション期間は、aliyun-acr-credential-helper によって生成されるシークレットの有効期間と同じです。

    重要

    expireDuration の値は、アカウント B の RAM ロールの MaxSessionDuration 値より大きくすることはできません。

    デフォルト値: 3600。有効な値: 3600 ~ 43200。単位: 秒。

ワーカーロールを使用する

重要
  • aliyun-acr-credential-helper の workerRole 権限モードを選択する必要があります。

  • アカウント B の RAM ロールには、Container Registry インスタンスの指定された非公開リポジトリから非公開イメージをプルするための [cr.*] 権限が必要です。

  • アカウント B は、アカウント A の ACK クラスタのワーカーロールがアカウント B の RAM ロールを想定することを許可します。このルールでは、アカウント B の RAM ロールの信頼ポリシーを変更する必要があります。

  • アカウント A の ACK クラスタのワーカーロールには、アカウント B の RAM ロールを想定する権限が必要です。このルールでは、アカウント A のワーカーロールに AliyunAssumeRoleAccess ポリシーをアタッチする必要があります。

  1. アカウント B の RAM ロールを作成します。RAM ロールの信頼できるエンティティとして [クラウドアカウント] を指定します。 RAM ロールに、アカウント B の Container Registry インスタンスから非公開イメージをプルするために必要な権限が付与されていることを確認します。詳細については、信頼できる Alibaba Cloud アカウントの RAM ロールを作成する を参照してください。

    {
        "Version": "1",
        "Statement": [
            {
                "Action": [
                    "cr:GetAuthorizationToken",
                    "cr:ListInstanceEndpoint",
                    "cr:PullRepository"
                ],
                "Resource": "*",
                "Effect": "Allow"
            }
        ]
    }
  2. アカウント B の RAM ロールの信頼ポリシーを変更して、アカウント A の ACK クラスタのワーカーロールがアカウント B の RAM ロールを想定できるようにします。

    ACK クラスタのワーカーロールの ARN を取得します。

    1. RAM ロールの ARN を取得する方法については、RAM ロールの ARN を表示する方法 を参照してください。

    2. アカウント B の RAM ロールの信頼ポリシーを変更します。

      1. RAM コンソール にログインします。左側のナビゲーションウィンドウで、[ロール] をクリックします。 [ロール] ページで、アカウント B の RAM ロールを見つけて、ロール名をクリックします。

      2. RAM ロールの詳細ページで、[信頼ポリシー] タブをクリックし、信頼ポリシーのプリンシパルフィールドにアカウント A のワーカーロールの ARN を入力します。RamRoleARN

  3. アカウント A の ACK クラスタのワーカーロールに AssumeRole 権限が付与されているかどうかを確認します。詳細については、ポリシーに関する情報を表示する を参照してください。AssumeRule权限

  4. acr-configuration ConfigMap に assumeRoleARN パラメーターを追加します。

    assumeRoleARN パラメーターの値を、アカウント B の RAM ロールの ARN に設定します。 RAM ロールの ARN を取得する方法については、RAM ロールの ARN を表示する方法 を参照してください。次の JSON ファイルは、acr-configuration のサンプル構成を示しています。

    data:
        service-account: "default"
        watch-namespace: "all"
        expiring-threshold: "15m"
        notify-email:"c*@example.com"
        acr-registry-info: |
          - instanceId: ""
            regionId: "cn-beijing"
            domains: "registry.cn-beijing.aliyuncs.com"
            assumeRoleARN: "acs:ram::.*:role/kubernetesworkerrole-test"
            expireDuration: 3600

Container Registry インスタンス所有者の RAM ユーザーの AccessKey ペアを使用する

手順を表示する

  1. アカウント B に RAM ユーザーを作成します。 RAM ユーザーに [cr.*] 権限が付与されていることを確認します。

    {
        "Version": "1",
        "Statement": [
            {
                "Action": [
                    "cr:GetAuthorizationToken",
                    "cr:ListInstanceEndpoint",
                    "cr:PullRepository"
                ],
                "Resource": "*",
                "Effect": "Allow"
            }
        ]
    }
  2. [kube-system] 名前空間の acr-configuration ConfigMap を構成します。作成した RAM ユーザーの AccessKey ID と AccessKey シークレットを入力します。

    このようにして、aliyun-acr-credential-helper は RAM ユーザーを使用して非公開イメージをプルできます。 RAM ユーザーの AccessKey ペアを表示する方法については、RAM ユーザーの AccessKey ペアに関する情報を表示する を参照してください。

    次の YAML ファイルは、acr-configuration のサンプル構成を示しています。

    data:
        service-account: "default"
        watch-namespace: "all"
        expiring-threshold: "15m"
        notify-email:"c*@example.com"
        acr-registry-info: |
          - instanceId: ""
            customAccessKey: "xxxxx" // 作成した RAM ユーザーの AccessKey ID を入力します。
            customAccessKeySecret: "xxxxxx" // 作成した RAM ユーザーの AccessKey シークレットを入力します。

サービスアカウントのインスタント使用を確実にするために Webhook 機能を有効にする

重要

Webhook 機能を有効にするには、aliyun-acr-credential-helper を v23.02.06.1-74e2172-aliyun 以降に更新する必要があります。

Webhook 機能を有効にすると、シークレットフリーコンポーネントは Webhook 機能を使用して、クラスタ内のサービスアカウントの変更を監視します。サービスアカウントが作成されると、シークレットフリーコンポーネントはすぐにシークレットをサービスアカウントに挿入します。サービスアカウントの作成直後にサービスアカウントを使用する場合 (たとえば、Helm チャートを使用してサービスアカウントとデプロイメントを作成する場合) は、Webhook 機能を有効にできます。 Webhook 機能は、シークレットフリーコンポーネントのパフォーマンスに影響を与える可能性があります。他のシナリオでは、Webhook 機能を有効にしないことをお勧めします。

Webhook 機能を使用するには、[acr-configuration] ConfigMap に次のパラメーターを追加する必要があります。

data:
  webhook-configuration: |
    enable: true
    failure-policy: Ignore
    timeout-seconds: 10

パラメーター

説明

enable

Webhook 機能を有効にするかどうかを指定します。

  • true

  • false

failure-policy

Webhook 機能が期待どおりに動作しない場合にサービスアカウントを処理する方法を指定します。

  • Ignore: 例外が発生した場合でも、サービスアカウントは作成されます。シークレットはサービスアカウントに関連付けられない場合があります。

  • Fail: 例外が発生した場合、サービスアカウントの作成は中断されます。この設定はワークロードのデプロイの失敗につながる可能性があるため、この値を使用しないことをお勧めします。

重要

クラスタ API サーバー の制限により、timeout-seconds15 に、failure-policyFail に設定し、1 秒あたり 10 個のサービスアカウントを作成するリクエストが一定期間 API サーバーに送信された場合、API サーバーはサービスアカウントを作成できない場合があります。

timeout-seconds

サービスアカウントを作成するリクエストのタイムアウト期間。サービスアカウントを作成するリクエストがタイムアウトすると、システムは failure-policy の値に基づいて応答します。デフォルト値: 10。単位: 秒。

参考資料

aliyun-acr-credential-helper のリリースノートについては、aliyun-acr-credential-helper を参照してください。