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

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

最終更新日:May 07, 2026

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

仕組み

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

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

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

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

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

  1. パスワードレスコンポーネントは、ACR インスタンスから一時的なユーザー名とパスワードを取得します。

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

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

  4. これらのサービスアカウントを使用するワークロードは、デフォルトでイメージをプルできるようになります。

パスワードレスコンポーネントは、複数の名前空間にあるサービスアカウントの管理をサポートし、設定に基づいて一時的なアカウントとパスワードを定期的に更新することで、漏洩のリスクを低減します。ワークロードに手動で imagePullSecrets を追加する必要はありません。パスワードレスコンポーネントは無料で利用できます。

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

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

項目

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

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

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

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

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

主な特徴

  • 自己管理が不要

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

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

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

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

前提条件

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

  • ACR Enterprise Edition インスタンスを保有しています。

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

  • パスワードレスコンポーネントが使用する RAM ロールに権限が付与されていること。

  • ACR Enterprise Edition インスタンスと ACK クラスター間にネットワーク接続が存在すること。

    ネットワーク接続の設定

    イメージをプルする前に、ご利用の ACR Enterprise Edition インスタンスと ACK クラスターが通信でき、必要なすべてのドメイン名が解決できることを確認する必要があります。同一アカウントでのイメージプルには、以下の方法が利用できます:

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

    • VPC ピアリング接続:ACR インスタンスと ACK クラスターが異なる VPC にある場合、VPC ピアリング接続を使用して 2 つの VPC を接続できます。これにより、ACK クラスターは ACR Enterprise Edition インスタンスにアクセスできます。VPC が同じリージョンにある場合、VPC ピアリング接続は無料ですが、異なるリージョンにある場合は料金が発生します。詳細については、「課金」をご参照ください。この方法では、2 つの VPC の CIDR ブロックが重複しないことが必要です。多数の CIDR ブロックが重複する場合、ネットワークアーキテクチャの再設計が必要になることがあります。

      VPC ピアリング接続の手順

      1. インターネット:ACR Enterprise Edition インスタンスと ACK クラスターの両方がインターネットにアクセスできる場合、インターネット経由でイメージを転送できます。詳細については、「ACR Enterprise Edition インスタンスのパブリックアクセス制御の設定」および「クラスターのインターネットアクセスの有効化」をご参照ください。

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

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

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

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

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

    4. [aliyun-acr-credential-helper コンポーネントのインストール] ページで、[AcrInstanceInfo] 構成およびその他のオプションを表示します。[AcrInstanceInfo] は、コンポーネントに関連付けられている各 ACR インスタンスの構成を指定します。その他のオプションはコンポーネント設定です。デフォルト設定がお客様の名前空間およびサービスアカウントに適している場合は、そのまま使用できます。

      コンポーネントがインストールされると、アドオン管理 ページに移動し、aliyun-acr-credential-helper (マネージド型) カードで 設定 をクリックしてコンポーネントの設定を変更できます。

      image

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

      AcrInstanceInfo

      説明

      インスタンス ID

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

      重要

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

      リージョン ID

      ACR インスタンスが配置されているリージョンの ID。Container Registry コンソールで ID を確認できます。

      重要

      このフィールドは、クロスリージョンのイメージプルに必須です。

      ドメイン

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

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

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

      偽装ロールARN

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

      有効期間

      rrsaRoleARN

      rrsaOIDCProviderRoleARN

      コンポーネント設定

      パラメーター

      説明

      RRSA の有効化

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

      監視名前空間

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

      サービスアカウント

      マネージド版パスワードレスコンポーネントを指定されたサービスアカウントに適用します。デフォルト値は 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

      説明

      自動

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

      重要

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

      マネージドロール

      コンポーネントは、「前提条件」セクションで承認した AliyunCSManagedAcrRole ロールを使用して権限を取得します。

      ワーカーロール

      コンポーネントは、クラスターのワーカー 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 をクリックし、次の表の説明に従ってその設定を変更します。

      パラメーター

      説明

      監視名前空間

      パスワードレスのイメージプルを有効にする名前空間です。デフォルト値は [default] です。すべての名前空間でパスワードレスのイメージプルを有効にするには、値を [all] に設定します。複数の名前空間を指定するには、コンマ (,) で区切ります。ビジネス名前空間のみを指定することを推奨します。システムコンポーネントのイメージプルへの影響を避けるため、all またはシステムコンポーネントを含む名前空間の指定は避けてください。

      acr-api-version

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

      有効期限のしきい値

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

      acr-registry-info

      ACR インスタンス設定の YAML 配列。各インスタンスは一連のパラメーターによって定義されます。

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

        重要

        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"      

      サービスアカウント

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

    kubectl

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

      kubectl edit cm acr-configuration -n kube-system

      キー

      説明

      service-account

      パスワードレスコンポーネントが適用されるサービスアカウント。

      デフォルト値は default です。

      説明

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

      acr-registry-info

      ACR インスタンス設定の YAML 配列。各インスタンスは一連のパラメーターによって定義されます。

      説明

      インスタンス情報の 3 つの要素:

      • instanceId:インスタンス ID。ACR 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:イメージのプル

    パスワードレスコンポーネントをインストールして設定した後、ワークロードを作成する際に関連付けられたサービスアカウントを指定することで、パスワードレスでのイメージプルを有効にできます。

    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 を使用してクラスター内のサービスアカウントの変更を監視します。新しいサービスアカウントが作成されると、コンポーネントは即座にパスワードレス Secret を注入します。この機能は、Helm チャートを使用してサービスアカウントと Deployment を同時に作成する場合など、サービスアカウントを作成後すぐに使用する必要があるシナリオで役立ちます。この機能はコンポーネントのパフォーマンスに影響を与える可能性があるため、他のシナリオでは推奨されません。

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

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

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

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

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

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

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

    パラメーター

    説明

    enable

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

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

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

    failure-policy

    サービスアカウント作成中に Webhook が例外に遭遇した場合の処理方法を定義するポリシー。

    • Ignore:例外を無視し、サービスアカウントの作成を正常に許可します。ただし、イメージプル用の Secret がアタッチされない場合があります。

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

    重要

    クラスターの API サーバーの制限により、timeout-seconds15 に設定され、failure-policyFail に設定され、サービスアカウントが毎秒 10 個のレートで作成される場合、サービスアカウントの作成が失敗する可能性があります。

    timeout-seconds

    この機能の単一のサービスアカウント作成リクエストを処理するためのタイムアウト期間。タイムアウトを超えた場合、コンポーネントは 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 リンクに置き換えます。

    関連ドキュメント