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

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

最終更新日:Jun 23, 2026

パスワードレスコンポーネントは、イメージプル時の認証を自動化し、imagePullSecrets を繰り返し設定する必要をなくします。このトピックでは、パスワードレスコンポーネントのインストール、設定、使用方法、および重要な注意事項について説明します。

仕組み

匿名でのイメージプルを有効にせずに Container Registry (ACR) をイメージソースとして使用する場合、ACK クラスターは各イメージプルを認証するためにユーザー名とパスワードを提供する必要があります。一般的なソリューションは、これらの認証情報を Secret に保存することですが、このアプローチにはいくつかの欠点があります。

  • Secret は Base64 エンコードされたプレーンテキストであり、漏洩した場合にセキュリティリスクをもたらします。

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

  • Secret は名前空間をまたいで共有することはできません。

パスワードレスコンポーネントは次のように動作します。

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

  2. コンポーネントは、一時的な認証情報を Secret に保存します。

  3. コンポーネントは、その設定で指定された ServiceAccount に Secret を関連付けます。

  4. これらの ServiceAccount を使用するワークロードは、Secret に保存された一時的な認証情報を使用して自動的にイメージをプルできます。

パスワードレスコンポーネントは、複数の名前空間にまたがる ServiceAccount を管理し、スケジュールに基づいて一時的な認証情報を自動的にリフレッシュします。これにより、セキュリティリスクが軽減され、ワークロードに手動でimagePullSecretsを追加する必要がなくなります。パスワードレスコンポーネントは無料で利用できます。

コンポーネントの比較

ACK は、aliyun-acr-credential-helper コンポーネントをマネージド版とセルフマネージド版の 2 つのエディションで提供しています。一度にインストールできるのは 1 つのエディションのみです。次の表は、2 つのエディションを比較したものです。

項目

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

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

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

バージョン 1.22 以降の ACK マネージドクラスターACK サーバーレスクラスター、または ACK Edge クラスター

バージョン 1.20 以降の ACK マネージドクラスター または ACK 専用クラスター

特徴

  • 自己管理は不要

  • RRSA を使用したクロスアカウントでのイメージプルをサポート

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

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

クラスターをアップグレードするには、「クラスターの手動アップグレード」をご参照ください。

前提条件

  • ご利用のクラスターバージョンがパスワードレスコンポーネントでサポートされていること。詳細については、前の表をご参照ください。

  • 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 では無料ですが、異なるリージョンの VPC では料金が発生します。詳細については、「課金」をご参照ください。2 つの VPC の CIDR ブロックは重複できません。使用中の CIDR ブロックが大幅に重複している場合は、既存のネットワークアーキテクチャを変更する必要があります。

      VPC ピアリング接続の手順

      1. ACR インスタンスのプライベートドメイン名の名前解決を有効にする

        ACR Enterprise Edition インスタンスを VPC に接続すると、そのプライベートドメイン名を使用して VPC 内でインスタンスにアクセスできます。設定後、ACR Enterprise Edition インスタンスの VPC ID とプライベート IP アドレスを取得します。
      2. ACR インスタンスのドメイン名と IP アドレスを取得する

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

        ACK クラスターと ACR Enterprise Edition インスタンスの VPC 間でプライベート通信を有効にするには、VPC ピアリング接続の両端でピア VPC を指すルートエントリを追加する必要があります。ACK クラスター側の VPC ピアリング接続では、認証サービスの IP アドレスと関連する OSS バケットの IP アドレスのルートエントリも設定する必要があります。
      4. ACK クラスターの ACR インスタンスドメイン名を解決する

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

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

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

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

  2. クラスターリスト ページで、クラスターの名前をクリックします。左側のナビゲーションウィンドウで、アドオン管理 をクリックします。

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

  4. [コンポーネント aliyun-acr-credential-helper のインストール] ページで、[AcrInstanceInfo] の設定とその他のオプションを確認します。[AcrInstanceInfo] には、コンポーネントに関連付けられている各 ACR インスタンスの設定が含まれています。その他のオプションはコンポーネントの設定です。コンポーネントが監視する名前空間や ServiceAccount を変更する必要がない場合は、デフォルト設定のままにすることができます。

    コンポーネントのインストール後、アドオン管理 ページにある aliyun-acr-credential-helper (managed) カードの 設定 をクリックして、その設定を変更できます。

    ACR インスタンスの関連付け設定:

    AcrInstanceInfo

    説明

    InstanceId

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

    重要

    ACR Personal Edition インスタンスの場合は、このフィールドを空白のままにします。このフィールドは ACR Enterprise Edition インスタンスでは必須です。

    regionId

    ACR インスタンスがデプロイされているリージョンの ID。Container Registry コンソールから ID を取得できます。

    重要

    このパラメーターは、クロスリージョンでのイメージプルに必須です。

    domains

    パスワードレスコンポーネントが ACR インスタンスにアクセスするために使用するドメイン名。デフォルトでは、指定された ACR インスタンスのすべてのドメイン名 (インターネットおよび VPC) が含まれます。複数のドメイン名を指定するには、カンマ (,) で区切ります。

    クロスアカウントでのイメージプルの設定

    これらの設定は、クロスアカウントでのイメージプルに適用されます。この機能が必要ない場合は、フィールドを空白のままにします。

    assumeRoleARN

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

    expireDuration

    rrsaRoleARN

    rrsaOIDCProviderRoleARN

    コンポーネント設定

    パラメーター

    説明

    RRSA の有効化

    RRSA を有効にするには、このチェックボックスを選択します。同一アカウントでのプルには設定は不要です。クロスアカウントでのプルについては、「クロスアカウントでのイメージのプル」をご参照ください。

    watchNamespace

    パスワードレスでのイメージプルを有効にする名前空間。デフォルト値はdefaultです。すべての名前空間でこの機能を有効にするには、値をallに設定します。複数の名前空間を指定するには、カンマ (,) で区切ります。システムイメージのプルに支障をきたさないように、ビジネス用の名前空間のみを指定し、allやクラスターシステムコンポーネント用の名前空間の使用は避けることを推奨します。

    serviceAccount

    マネージドパスワードレスコンポーネントが適用される ServiceAccount を指定します。デフォルト値は Default です。Default の値は、指定された名前空間のデフォルトの ServiceAccount にコンポーネントを適用します。値を * に設定すると、コンポーネントは指定された名前空間のすべての ServiceAccount に適用されます。複数の ServiceAccount を指定するには、カンマ (,) で区切ります。

    expiringThreshold

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

    notifyEmail

    設定は不要です。

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

パスワードレスコンポーネントをインストールして設定した後、ワークロードを作成する際にコンポーネントに関連付けられた ServiceAccount を指定します。これにより、パスワードレスでのイメージプルが可能になります。

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 # パスワードレスコンポーネントに関連付けられた ServiceAccount を指定します。
      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-configuration ConfigMap を設定して ACR インスタンスを追加する必要があります。これは、コンソールまたは kubectl を使用して行うことができます。

コンソール

  1. クラスターリスト ページで、クラスターの名前をクリックします。左側のナビゲーションウィンドウで、設定 > ConfigMap をクリックします。

  2. ConfigMap ページで、名前空間 ドロップダウンリストから kube-system を選択します。次に、acr-configuration ConfigMap をクリックし、次の表の説明に従って設定を変更します。

    パラメーター

    説明

    watch-namespace

    パスワードレスでのイメージプルを有効にする名前空間。デフォルト値はdefaultです。すべての名前空間でこの機能を有効にするには、値をallに設定します。複数の名前空間を指定するには、カンマ (,) で区切ります。システムイメージのプルに支障をきたさないように、ビジネス用の名前空間のみを指定し、allやクラスターシステムコンポーネント用の名前空間の使用は避けることを推奨します。

    acr-api-version

    デフォルト値のままにします。

    expiring-threshold

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

    acr-registry-info

    複数行の YAML 文字列形式の ACR インスタンス情報の配列。各インスタンスは 3 つのパラメーターのセットで設定されます。

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

      重要

      ACR Personal Edition インスタンスの場合は、このフィールドを空白のままにします。このフィールドは ACR Enterprise Edition インスタンスでは必須です。

    • regionId:ACR インスタンスがデプロイされているリージョンの ID。Container Registry コンソールから ID を取得できます。

      重要

      このパラメーターは、クロスリージョンでのイメージプルに必須です。設定例については、以下のセクションをご参照ください。

    • domains:パスワードレスコンポーネントが ACR インスタンスにアクセスするために使用するドメイン名。デフォルトでは、instanceIdで指定された 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

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

kubectl

  1. 次のコマンドを実行して、acr-configuration ConfigMap を編集します。設定の詳細については、次の表をご参照ください。

    kubectl edit cm acr-configuration -n kube-system

    パラメーターキー

    説明

    service-account

    パスワードレスコンポーネントが対象とする ServiceAccount。

    デフォルト値はdefaultです。

    説明

    複数の ServiceAccount を指定するには、カンマ (,) で区切ります。値を"*"に設定すると、指定された名前空間のすべての ServiceAccount に適用されます。

    acr-registry-info

    複数行の YAML 文字列形式の ACR インスタンス情報の配列。各インスタンスは 3 つのパラメーターのセットで設定されます。

    説明

    インスタンス情報のパラメーター:

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

    • regionId:オプション。デフォルトはローカルリージョンです。

    • domains:オプション。デフォルトは対応するインスタンスのすべてのドメイン名です。複数のドメイン名を指定するには、カンマ (,) で区切ります。

    ACR Enterprise Edition インスタンスの設定例:

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

    watch-namespace

    パスワードレスでのイメージプルを有効にする名前空間。

    デフォルト値はdefaultです。すべての名前空間でこの機能を有効にするには、値をallに設定します。複数の名前空間を指定するには、カンマ (,) で区切ります。

    説明

    システムイメージのプルに支障をきたさないように、ビジネス用の名前空間のみを指定し、allやクラスターシステムコンポーネント用の名前空間の使用は避けることを推奨します。

    expiring-threshold

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

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

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

パスワードレスコンポーネントをインストールして設定した後、ワークロードを作成する際にコンポーネントに関連付けられた ServiceAccount を指定します。これにより、パスワードレスでのイメージプルが可能になります。

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 # パスワードレスコンポーネントに関連付けられた ServiceAccount を指定します。
      containers:
      - name: nginx
        image: "******.cn-hangzhou.cr.aliyuncs.com/nginx/nginx:latest" # ACR イメージアドレスを指定します。
        ports:
        - containerPort: 80

よくある質問

ServiceAccount の即時使用の有効化

重要

この機能には、aliyun-acr-credential-helper v23.02.06.1-74e2172-aliyun 以降が必要です。

有効にすると、パスワードレスコンポーネントは Webhook を使用してクラスター内の ServiceAccount の変更を監視します。新しい ServiceAccount が作成されると、コンポーネントは即座にパスワードレス Secret を挿入します。これは、Helm Chart が ServiceAccount と Deployment を同時に作成する場合など、作成直後に ServiceAccount を使用するシナリオで役立ちます。この機能はコンポーネントのパフォーマンスに影響を与える可能性があり、一般的な使用は推奨されません。

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

この機能を有効にするには、クラスターに acr-credential-helper-webhook コンポーネントをインストールします。

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

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

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

この機能を有効にするには、acr-configuration ConfigMap に次のフィールドを追加します。

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

パラメーター

説明

enable

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

  • true:機能を有効にします。

  • false:機能を無効にします。

failure-policy

ServiceAccount 作成中の例外処理ポリシー。

  • Ignore:例外を無視し、ServiceAccount が正常に作成されることを許可します。イメージプル用の Secret がアタッチされない可能性があります。

  • Fail:例外が発生した場合に ServiceAccount の作成を停止します。デプロイメントの失敗を引き起こす可能性があるため、推奨されません。

重要

クラスターの API サーバーの制限により、timeout-seconds15 に設定され、failure-policyFail に設定されている場合、1 秒あたり 10 個の ServiceAccount を継続的に作成すると、ServiceAccount の作成が失敗します。

timeout-seconds

単一の ServiceAccount 作成リクエストのタイムアウト期間。タイムアウトを超えた場合、システムはfailure-policy設定に従って応答します。デフォルト値は 10 秒 (s) です。

イメージプルの失敗のトラブルシューティング

考えられる原因の 1 つは、パスワードレスコンポーネントの設定が正しくないことです。例:

  • パスワードレスコンポーネントで設定されたインスタンス情報が ACR インスタンスと一致しない。

  • プルに使用されるイメージアドレスが、コンポーネントのインスタンス情報で指定されたドメイン名と一致しない。

このトピックの手順に従って、問題をトラブルシューティングしてください。

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

imagePullSecrets の使用方法

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

重要
  • パスワードレスコンポーネントは、手動で指定されたimagePullSecretsフィールドと互換性がありません。

  • Secret はワークロードと同じ名前空間にある必要があります。

imagePullSecrets の使用例

次のコマンドを実行し、パラメーターを置き換えて、ユーザー名とパスワードで Secret を作成します。

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

ワークロードで Secret を使用します。

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  # 前のステップで作成した Secret を使用します。
      containers:
      - name: nginx 
        image: <acrID>.cr.aliyuncs.com/<repo>/nginx:latest  # ACR イメージアドレスに置き換えます。

関連トピック