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

Container Registry:パスワード不要コンポーネントを使用して、同一アカウント内の ACR Enterprise Edition インスタンスからイメージをプルする

最終更新日:Feb 07, 2026

パスワード不要コンポーネントは、コンテナイメージのプル時の認証を自動化し、`imagePullSecrets` の繰り返し設定を不要にします。本トピックでは、パスワード不要コンポーネントのインストール、構成、および使用方法について説明します。また、重要な注意事項も記載しています。

仕組み

パブリック匿名プルが有効になっていない場合、Container Registry (ACR) をイメージソースとして使用するには、ACK クラスターがイメージをプルするたびにユーザー名とパスワードによる認証を行う必要があります。一般的な対応策として、認証情報をシークレットに格納する方法がありますが、この方法には以下の課題があります:

  • シークレットは Base64 エンコードされたプレーンテキストであり、セキュリティ上の脅威となります。

  • 各ワークロードに対して手動で imagePullSecrets を追加する必要があります。

  • シークレットは名前空間を跨いで利用できません。

パスワード不要コンポーネントの動作は以下のとおりです:

  1. パスワード不要コンポーネントが ACR インスタンスから一時的な認証情報を取得します。

  2. コンポーネントはこれらの認証情報をシークレットに格納します。

  3. コンポーネントは、構成で指定されたサービスアカウントとそのシークレットを関連付けます。

  4. これらのサービスアカウントを使用するワークロードは、シークレットに格納された一時的な認証情報を利用して自動的にイメージをプルします。

パスワード不要コンポーネントは、複数の名前空間にわたるサービスアカウントを同時に管理でき、構成に基づいて定期的に一時的な認証情報を更新します。これにより、認証情報の漏洩リスクが低減され、ワークロードへの imagePullSecrets の手動追加が不要になります。パスワード不要コンポーネントは、追加コストなしで提供されます。

image

パスワード不要コンポーネントの比較

ACK では、マネージド版およびセルフマネージド版の `aliyun-acr-credential-helper` コンポーネントが提供されています。いずれか 1 つの版のみを同時にインストールできます。以下の表に、両版の比較を示します。

相違点

aliyun-acr-credential-helper(マネージド)

aliyun-acr-credential-helper(セルフマネージド)

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

ACK マネージドクラスターACK サーバーレスクラスター、および Kubernetes 1.22 以降を実行する ACK Edge クラスター

ACK マネージドクラスター および Kubernetes 1.20 以降を実行する ACK 専用クラスター

機能

  • 自己管理不要

  • RRSA を使用した他アカウント間のイメージプルをサポート

  • コンポーネントのログを照会可能

  • ワーカー RAM ロール、RRSA、または AccessKey ペアを使用した他アカウント間のイメージプルをサポート

クラスターのスペックアップについては、「クラスターの手動スペックアップ」をご参照ください。

前提条件

  • クラスターバージョンがパスワード不要コンポーネントでサポートされています。詳細については、上記の表をご参照ください。

  • Container Registry (ACR) インスタンスは Enterprise Edition インスタンスです。

    重要
    • パスワード不要コンポーネントは、ACR Enterprise Edition インスタンスおよび 2024 年 9 月 8 日以前に作成された ACR Personal Edition インスタンスのみをサポートします。パスワード不要コンポーネントがご利用になれない場合は、「imagePullSecrets の使用方法」をご参照ください。

  • パスワードレス コンポーネントで使用される RAM ロールに、権限を付与しました

  • ACR Enterprise Edition インスタンスと ACK クラスターの間にネットワーク接続が確立されている必要があります。

    ネットワーク接続の構成

    イメージをプルする前に、ACR Enterprise Edition インスタンスと ACK クラスターが通信可能であること、および関連するドメイン名が正しく解決されることを確認してください。同一アカウント内のインスタンスからイメージをプルする場合は、以下のいずれかの方法を使用できます:

    • ACR VPC アクセス制御:ACR Enterprise Edition インスタンスと ACK クラスターが同一リージョンにある場合、ACK クラスターは VPC 経由で ACR インスタンスにアクセスできます。詳細については、「ネットワークアクセス制御」をご参照ください。

    • VPC ピアリング接続:ACR インスタンスと ACK クラスターが同一 VPC にない場合、VPC ピアリング接続を確立することで 2 つの VPC をリンクし、ACK クラスターが ACR Enterprise Edition インスタンスにアクセスできるようにできます。同一リージョン内の VPC 間の VPC ピアリング接続は無料ですが、異なるリージョン間の場合は課金対象となります。詳細については、「課金」をご参照ください。この機能を利用するには、2 つの VPC の CIDR ブロックが重複しない必要があります。重複している場合は、既存のネットワークアーキテクチャを変更する必要があります。

      VPC ピアリング接続の手順

      1. 内部の同一リージョンエンドポイント解決のために ACR インスタンスに VPC をアタッチする

        ACR Enterprise Edition インスタンスを VPC に接続すると、内部ドメイン名を使用して VPC 内から Enterprise Edition インスタンスにアクセスできます。構成が完了したら、VPC ID および ACR Enterprise Edition インスタンスの内部 IP アドレスを取得してください。
      2. ACR インスタンスに関連するドメイン名および IP アドレスの取得

        ACR Enterprise Edition インスタンスへのアクセスに使用される認証サービスのドメイン名および IP アドレス、および関連する OSS バケットのドメイン名および IP アドレスを取得します。
      3. VPC ピアリング接続の作成およびルートテーブルの構成

        VPC ピアリング接続の両端に、ピア VPC を指すルートを追加して、ACK クラスターの VPC と ACR Enterprise Edition インスタンスの VPC 間のプライベート接続を有効化します。ACK クラスターの VPC ピアリング接続側では、認証サービスの IP アドレスおよび関連する OSS バケットの IP アドレス向けのルートも構成する必要があります。
      4. ACK クラスターからの ACR インスタンスのドメイン名解決

        内部 DNS 解決の追加などの方法、または ノードプールのカスタムデータスクリプトを使用して、/etc/hosts ファイルを一括で変更します。これにより、ACK クラスターから ACR インスタンスのドメイン名が内部 IP アドレスに解決され、VPC ピアリング接続のルートエントリ経由でトラフィックが ACR インスタンスがアタッチされた VPC に転送されます。
    • インターネット:ACR Enterprise Edition インスタンスと ACK クラスターの両方がインターネットに接続している場合、インターネット経由でイメージを転送できます。詳細については、「ACR インスタンスのパブリックアクセス制御の構成」および「クラスターのインターネットアクセスの有効化」をご参照ください。

マネージドパスワード不要コンポーネントの使用

ステップ 1:コンポーネントのインストール

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

  2. クラスター ページで、目的のクラスターを見つけ、その名前をクリックします。左側のナビゲーションウィンドウで、アドオン をクリックします。

  3. アドオン ページで、セキュリティ タブを選択します。aliyun-acr-credential-helper(マネージド) カードを見つけ、インストール をクリックします。

  4. aliyun-acr-credential-helper のインストール ページでは、AcrInstanceInfo 構成およびその他のオプションを確認できます。AcrInstanceInfo には、コンポーネントに関連付けられた各 ACR インスタンスの構成が含まれます。その他のオプションは、コンポーネントの一般的な設定です。監視対象の名前空間またはサービスアカウントを変更する必要がない場合は、デフォルト設定のままにしてください。

    インストール後、コンポーネントの構成を更新できます。アドオン ページで、構成aliyun-acr-credential-helper(マネージド) カードからクリックします。

    image

    関連付けられた ACR インスタンスの構成:

    AcrInstanceInfo

    説明

    InstanceId

    ACR インスタンスの ID です。ID は Container Registry コンソール で確認できます。

    重要

    Personal Edition の ACR インスタンスの場合は、このパラメーターを空欄のままにしてください。Enterprise Edition の ACR インスタンスの場合は、このパラメーターを指定する必要があります。

    regionId

    ACR インスタンスのリージョン ID です。リージョン ID は Container Registry コンソール で確認できます。

    重要

    他リージョンからのイメージプルを行う場合に、このパラメーターを指定する必要があります。

    domains

    パスワード不要プラグインが ACR インスタンスにアクセスするために使用するドメイン名です。デフォルトでは、指定された ACR インスタンスのすべてのドメイン名(パブリックおよび VPC)が使用されます。個別のドメイン名を指定する場合は、カンマ(,)で区切ります。

    他アカウント間のイメージプルの構成

    これは、他アカウント間でイメージをプルするシナリオに適用されます。この要件がない場合は、フィールドを空欄のままにしてください。

    assumeRoleARN

    同一アカウント内でのイメージプルには不要です。他アカウント間でのイメージプルについては、「他アカウント間でのイメージプル」をご参照ください。

    expireDuration

    rrsaRoleARN

    rrsaOIDCProviderRoleARN

    コンポーネント構成

    構成項目

    説明

    RRSA の有効化

    RRSA を有効化するには、この項目を選択します。同一アカウント内でのイメージプルには不要です。他アカウント間でのイメージプルについては、「他アカウント間でのイメージプル」をご参照ください。

    watchNamespace

    パスワード不要でイメージをプルする名前空間です。デフォルト値は default です。all を指定すると、すべての名前空間が対象になります。複数の名前空間を指定する場合は、カンマ(,)で区切ります。ビジネス用の名前空間を構成することを推奨します。システムコンポーネントに関連する名前空間や all を構成すると、システムコンポーネントのイメージプルに問題が発生する可能性があるため、避けてください。

    serviceAccount

    マネージドパスワード不要コンポーネントが適用されるサービスアカウントです。デフォルト値は Default です。Default を指定すると、指定されたすべての名前空間のデフォルトサービスアカウントに適用されます。アスタリスク(*)を指定すると、指定された名前空間のすべてのサービスアカウントに適用されます。複数のサービスアカウントを構成する場合は、カンマ(,)で区切ります。

    expiringThreshold

    コンポーネントの認証情報の有効期限切れしきい値です。デフォルト値は 15m です。

    notifyEmail

    構成は不要です。

ステップ 2:イメージのプル

パスワード不要コンポーネントをインストールおよび構成した後、パスワード不要でイメージをプルするには、ワークロードを作成する際にコンポーネントに関連付けられたサービスアカウントを指定します。

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" # ACR イメージのアドレスを指定します。
        ports:
        - containerPort: 80

セルフマネージドパスワード不要コンポーネントの使用

ステップ 1:コンポーネントのインストール

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

  2. クラスター ページで、目的のクラスターを見つけ、その名前をクリックします。左側のナビゲーションウィンドウで、アドオン をクリックします。

  3. アドオン ページで、セキュリティ タブをクリックします。aliyun-acr-credential-helper を見つけ、インストール をクリックします。

  4. パラメーター設定 ページで、tokenMode ドロップダウンリストからコンポーネントの権限モードを選択し、OK をクリックします。インストール後に、イメージをプルする前にコンポーネントを構成してください。詳細については、「ステップ 2:コンポーネント構成の変更(ACR インスタンスの追加)」をご参照ください。

    tokenMode

    説明

    auto

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

    重要

    2023 年 4 月 3 日以降にリリースされた aliyun-acr-credential-helper のバージョンでは、コンポーネントが依存する RAM ロールをカスタマイズするための構成項目が提供されています。「[製品変更] aliyun-acr-credential-helper が依存する権限の変更に関するお知らせ」をご参照ください。

    managedRole

    コンポーネントは、前提条件 セクションで権限付与済みの AliyunCSManagedAcrRole ロールを使用して権限を取得します。

    workerRole

    コンポーネントは、クラスターのワーカー RAM ロールを使用して権限を取得します。ワーカー RAM ロールに特定の権限を付与する必要があります。

    コンポーネントモードとして workerRole を選択する

    workerRole を権限モードとして選択する場合、クラスターのワーカー RAM ロールには以下の権限が必要です。権限付与方法の詳細については、「RAM ロールの権限管理」をご参照ください。

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

    ロール偽装を使用した他アカウント間のイメージプルを行う場合に、このモードを選択します。

ステップ 2:コンポーネント構成の変更(ACR インスタンスの追加)

パスワード不要コンポーネントをインストールした後、イメージをプルする前に、acr-configuration ConfigMap を構成して ACR インスタンスを追加する必要があります。これはコンソールまたは kubectl を使用して行えます。

コンソール

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

  2. ConfigMaps ページで、名前空間 ドロップダウンリストから kube-system を選択します。その後、acr-configuration ConfigMap をクリックし、以下の表に従って構成を変更します。

    コンポーネント構成

    説明

    watch-namespace

    シークレットなしでイメージをプルする名前空間です。デフォルト値は default です。all を指定すると、すべての名前空間からシークレットなしでイメージをプルできます。複数の名前空間を構成する場合は、カンマ(,)で区切ります。ビジネス用の名前空間を指定することを推奨します。クラスターのシステムコンポーネントに関連する名前空間や all を指定すると、クラスターのシステムコンポーネントのイメージプルに問題が発生する可能性があるため、避けてください。

    acr-api-version

    デフォルト値のままにしてください。

    expiring-threshold

    コンポーネントの認証情報の有効期限切れしきい値です。デフォルト値は 15m(15 分)です。

    acr-registry-info

    コンテナイメージのインスタンス情報を含む配列で、複数行の YAML 文字列形式です。各インスタンスはトライアドとして構成されます。

    • instanceId:ACR インスタンスの ID です。ID は Container Registry コンソール で確認できます。

      重要

      Personal Edition の ACR インスタンスの場合は、このパラメーターを空欄のままにしてください。Enterprise Edition の ACR インスタンスの場合は、このパラメーターを指定する必要があります。

    • regionId:ACR インスタンスのリージョン ID です。リージョン ID は Container Registry コンソール で確認できます。

      重要

      他リージョンからのイメージプルを行う場合に、このパラメーターを指定する必要があります。以下の構成例をご参照ください。

    • domains:パスワード不要プラグインが ACR インスタンスにアクセスするために使用するドメイン名です。デフォルトでは、instanceId の ACR インスタンスのすべてのドメイン名が入力されます。個別のドメイン名を指定する場合は、カンマ(,)で区切ります。

    他リージョンプルの構成例

    複数のリージョンに存在する ACR インスタンスを使用する場合、各 ACR インスタンスの 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"      

    service-account

    パスワード不要コンポーネントに関連付けられるサービスアカウントです。複数のサービスアカウントを指定する場合は、カンマ(,)で区切ります。default を指定すると、各指定名前空間のデフォルトサービスアカウントに関連付けられます。"*" を指定すると、指定された名前空間のすべてのサービスアカウントに関連付けられます。

kubectl

  1. 以下のコマンドを実行して、下記の構成説明に基づき acr-configuration を編集します。

    kubectl edit cm acr-configuration -n kube-system

    構成キー

    構成項目キー

    構成値

    service-account

    パスワード不要コンポーネントを指定されたサービスアカウントに適用します。

    デフォルト値は default です。

    説明

    複数のサービスアカウントを指定する場合は、カンマ(,)で区切ります。アスタリスク("*")を指定すると、指定された名前空間のすべてのサービスアカウントに適用されます。

    acr-registry-info

    コンテナイメージのインスタンス情報を含む配列で、複数行の YAML 文字列形式です。各インスタンスはトライアドとして構成されます。

    説明

    インスタンス情報のトライアドには以下が含まれます:

    • instanceId:インスタンス ID。Enterprise Edition インスタンスの場合は必須です。

    • regionId:任意。デフォルト値はローカルリージョンです。

    • domains:任意。デフォルトではインスタンスのすべてのドメイン名が使用されます。個別のドメイン名を指定する場合は、カンマ(,)で区切ります。

    Enterprise Edition の ACR インスタンスの構成例:

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

    watch-namespace

    パスワード不要でイメージをプルする名前空間です。

    デフォルト値は default です。all を指定すると、すべての名前空間が対象になります。複数の名前空間を指定する場合は、カンマ(,)で区切ります。

    説明

    ビジネス用の名前空間のみを構成することを推奨します。システムコンポーネントに関連する名前空間や all を構成すると、システムコンポーネントのイメージプルに問題が発生する可能性があるため、避けてください。

    expiring-threshold

    ローカルキャッシュされた認証情報の有効期限切れしきい値です。

    デフォルト値は 15m(15 分)です。

ステップ 3:イメージのプル

パスワード不要コンポーネントをインストールおよび構成した後、パスワード不要でイメージをプルするには、ワークロードを作成する際にコンポーネントに関連付けられたサービスアカウントを指定します。

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" # ACR イメージのアドレスを指定します。
        ports:
        - containerPort: 80

よくある質問

サービスアカウントを直後に使用できるようにする機能を有効にするにはどうすればよいですか?

重要

サービスアカウントを直後に使用できるようにするには、パスワード不要コンポーネントを v23.02.06.1-74e2172-aliyun 以降にアップグレードする必要があります。

有効化すると、パスワード不要コンポーネントは Webhook を使用してクラスター内のサービスアカウントの変更を監視します。新しいサービスアカウントが作成されると、コンポーネントは即座にパスワード不要のシークレットを挿入します。この機能は、Helm Chart のデプロイなど、サービスアカウントを直後に使用する必要があるシナリオに有用です。ただし、この機能はコンポーネントのパフォーマンスに影響を与えるため、他のシナリオでは有効化しないことを推奨します。

マネージドコンポーネント

クラスターに `acr-credential-helper-webhook` コンポーネントをインストールする必要があります:

  1. ACK クラスター ページで、対象のクラスターの名前をクリックします。左側のナビゲーションウィンドウで、Add-ons をクリックします。

  2. Add-ons ページで、セキュリティ タブを選択します。acr-credential-helper-webhook(マネージド) カードを見つけ、インストール をクリックします。

セルフマネージドコンポーネント

この機能を有効化するには、acr-configuration に以下のフィールドを追加します:

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

構成項目

説明

enable

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

  • true:有効化

  • false:無効化

failure-policy

この機能で例外が発生した場合のサービスアカウントの処理ポリシーです。

  • Ignore:例外を無視します。サービスアカウントは通常通り作成されますが、イメージプル用のシークレットがアタッチされない場合があります。

  • Fail:例外が発生した場合にサービスアカウントの作成を中断します。ビジネスデプロイの失敗を招く可能性があるため、推奨しません。

重要

クラスターの API Server の制限により、timeout-seconds15 に設定し、failure-policyFail に設定し、1 秒間に 10 個のサービスアカウントを連続して作成した場合、サービスアカウントの作成に失敗することがあります。

timeout-seconds

この機能における単一のサービスアカウント作成要求のタイムアウト期間です。タイムアウト期間を超えた場合、failure-policy 構成に基づいてシステムが応答します。デフォルト値は 10 です。単位は秒(s)です。

パスワード不要コンポーネントを構成した後も、イメージのプルが失敗するのはなぜですか?

考えられる原因として、パスワード不要コンポーネントの構成ミスが挙げられます。例えば:

  • パスワード不要コンポーネント内のインスタンス情報が ACR インスタンスと一致していない。

  • プルに使用するイメージアドレスがコンポーネントのインスタンス情報内のドメイン名と一致していない。

本トピックの手順に従ってトラブルシューティングを行ってください。

コンポーネントの構成が正しいにもかかわらずプルが失敗する場合、ワークロード YAML で手動で指定された imagePullSecrets フィールドとパスワード不要コンポーネントとの間で競合が発生している可能性があります。これを解決するには、imagePullSecrets フィールドを手動で削除し、Pod を削除して再作成してください。

imagePullSecrets の使用方法を教えてください。

2024 年 9 月 9 日以降に作成された ACR Personal Edition インスタンスでは、パスワード不要コンポーネントはサポートされていません。新しい ACR Personal Edition インスタンスでは、ユーザー名およびログインパスワードをシークレットに保存し、imagePullSecrets フィールドで参照することを推奨します。

重要
  • パスワード不要コンポーネントと手動で指定された imagePullSecrets フィールドを同時に使用することはできません。

  • シークレットは、ワークロードと同じ名前空間に配置する必要があります。

imagePullSecrets の使用例

以下のコマンドを実行し、パラメーターをご自身のものに置き換えて、ユーザー名とパスワードからシークレットを作成します。

kubectl create secret docker-registry image-secret-1 \
  --docker-server=<registry-server> \
  --docker-username=<name> \
  --docker-password=<password> \
  --docker-email=<email>

ワークロードでのキーの使用

apiVersion: apps/v1
kind: Deployment 
metadata:
  name: nginx-test
  namespace: default 
  labels:
    app: nginx
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx 
    spec:
      imagePullSecrets:
      - name: image-secret-1  # 前述の手順で作成したシークレットを使用します。
      containers:
      - name: nginx 
        image: <acrID>.cr.aliyuncs.com/<repo>/nginx:latest  # ACR のリンクに置き換えます。

参考資料