Elastic Container Instance では、シークレットを使用せずに Alibaba Cloud Container Registry インスタンスからイメージをプルすることで、イメージプルの効率とセキュリティを向上させることができます。このトピックでは、シークレットを使用せずに Container Registry インスタンスからイメージをプルする方法について説明します。
背景情報
Container Registry は、Container Registry 個人版インスタンスと Container Registry Enterprise Edition インスタンスを提供します。Container Registry Enterprise Edition は、コンテナイメージ、Helm チャート、Open Container Initiative(OCI)アーティファクトなど、クラウドネイティブアプリケーションアーティファクトのライフサイクルを管理するために設計されたエンタープライズグレードのプラットフォームです。大規模なビジネスデプロイメントシナリオに適しており、企業は配信の複雑さを軽減できます。詳細については、「Container Registry とは」をご参照ください。
Elastic Container Instance またはイメージキャッシュを作成する場合、プルするイメージが Container Registry インスタンス内のイメージである場合、シークレットを使用せずにイメージをプルするように構成して、プロセスを簡素化し、効率を向上させ、シークレットの漏洩のリスクを防ぐことができます。
説明 Container Registry インスタンスにないイメージ(Docker イメージなど)は、シークレットを使用せずにプルすることはできません。
前提条件
Elastic Container Instance などのリソースに対してシークレット不要のイメージプルを構成する前に、次の操作が完了していることを確認してください。
Container Registry インスタンスが作成され、イメージリポジトリやイメージなどの関連構成がインスタンスに対して完了している。
Container Registry インスタンスが Enterprise Edition インスタンスの場合、インスタンスへのシークレット不要のアクセスが構成されている。
デフォルトでは、新しく作成された Container Registry Enterprise Edition インスタンスはすべてのネットワークから切断されています。インターネットまたは仮想プライベートクラウド(VPC)経由でインスタンスへのアクセスを許可するには、アクセス制御リスト(ACL)を構成する必要があります。
インターネット経由: Enterprise Edition インスタンスのインターネットアクセスを有効にすると、Enterprise Edition インスタンスのパブリックエンドポイントを使用して、リージョンをまたいで Enterprise Edition インスタンス内のイメージにアクセスできます。詳細については、「インターネットアクセスを有効にする」をご参照ください。
VPC 経由: VPC 経由で Container Enterprise Edition インスタンスにアクセスするには、サービスロール AliyunServiceRoleForContainerRegistryAccessCustomerPrivateZone を使用して関連する承認を有効にする必要があります。詳細については、「VPC ACL を構成する」をご参照ください。
構成の説明
次の表は、シークレットを使用せずに Container Registry インスタンスからイメージをプルできるシナリオを示しています。
Elastic Container Instance などの作成対象のリソースと Container Registry インスタンスが同じアカウントにある | Container Registry インスタンスのエディション | シークレット不要のイメージプル |
はい | | デフォルトでは、シークレット不要のイメージプルが有効になっています。RAM ロールを構成して、シークレット不要のイメージプルをサポートする Container Registry インスタンスの範囲を制限できます。 |
はい | Enterprise Edition(カスタムドメイン名を使用) | デフォルトでは、シークレット不要のイメージプルを有効にすることはできません。シークレット不要のイメージプルをサポートする Container Registry インスタンスを指定する必要があります。 |
いいえ | | デフォルトでは、シークレット不要のイメージプルを有効にすることはできません。RAM ロールを構成して、シークレット不要のイメージプルを実装する必要があります。 |
アカウントと Container Registry インスタンスに基づいて、次の構成方法のいずれかを選択します。
RAM ロールを構成して、シークレット不要のイメージプルをサポートする Container Registry インスタンスの範囲を制限する
Elastic Container Instance などの作成対象のリソースと Container Registry インスタンスが同じ Alibaba Cloud アカウントに属し、Container Registry インスタンスがデフォルトドメイン名を使用する Enterprise Edition インスタンスまたは個人版インスタンスである場合、デフォルトで Container Registry インスタンスに対してシークレット不要のイメージプルが有効になります。この場合、ビジネス要件に基づいて RAM ロールを構成し、シークレット不要のイメージプルをサポートする Container Registry インスタンスの範囲を制限できます。たとえば、シークレット不要のイメージプルをサポートする Container Registry インスタンスを 1 つだけ指定できます。
説明 デフォルトでは、Elastic Container Instance はサービスロール AliyunServiceRoleForECI を使用して、Elastic Container Instance リソースの作成に必要な他の Alibaba Cloud サービスへのアクセスを取得します。AliyunServiceRoleForECI には、Container Registry インスタンスからイメージをプルする権限があります。前述の Container Registry インスタンスには、デフォルトドメイン名を使用するすべての Enterprise Edition インスタンス、または Elastic Container Instance リソースと同じ Alibaba Cloud アカウントにあるすべての個人版インスタンスが含まれます。サービスロールを使用してきめ細かい権限制御を実装することはできません。
手順:
ステップ 1: RAM ロールを作成し、RAM ロールに権限を付与する
信頼できる Alibaba Cloud サービスの RAM ロールを作成します。詳細については、「信頼できる Alibaba Cloud サービスの RAM ロールを作成する」をご参照ください。
次のパラメータに注意してください。
カスタム権限ポリシーを作成します。詳細については、「カスタムポリシーを作成する」をご参照ください。
次の例は、ポリシーの内容を示しています。これは、指定された Container Registry インスタンス内のイメージのみをプルできることを示しています。ポリシーの記述方法の詳細については、「ポリシー要素」をご参照ください。
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"cr:Get*",
"cr:List*"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"cr:Pull*"
],
"Resource": [
"acs:cr:cn-hangzhou:1609982529******:instance/cri-nwj395hgf6f3****" // 指定された Container Registry インスタンス
]
}
]
}
カスタムポリシーを RAM ロールにアタッチします。詳細については、「RAM ロールに権限を付与する」をご参照ください。
作成した acr-test ロールを見つけます。ロール名をクリックして詳細ページに移動します。権限を確認し、RAM ロールの Alibaba Cloud リソースネーム(ARN)を取得します。

ステップ 2: ステップ 1 で作成した RAM ロールを指定してリソースを作成する
CreateContainerGroup API 操作を呼び出して Elastic Container Instance を作成するか、CreateImageCache API 操作を呼び出してイメージキャッシュを作成する場合、AcrRegistryInfo.N.ArnService パラメータを使用して、リソースの作成に使用する RAM ロールを指定できます。次の表でパラメータについて説明します。詳細については、「CreateContainerGroup」および「CreateImageCache」をご参照ください。
パラメータ | タイプ | 例 | 説明 |
AcrRegistryInfo.N.ArnService | 文字列 | acs:ram::1609982529******:role/acr-test | Elastic Container Instance などの作成対象のリソースが属する Alibaba Cloud アカウントの RAM ロールの ARN。 |
たとえば、Elastic Container Instance を作成する場合、OpenAPI で次のパラメータを指定できます。
ContainerGroupName=test-acr
#Container
Container.1.Name=test
Container.1.Image=test****-registry.cn-hangzhou.cr.aliyuncs.com/eci_test/nginx:1.0
#AcrRegistryInfo
AcrRegistryInfo.1.ArnService=acs:ram::1609982529******:role/acr-test
シークレット不要のイメージプルをサポートする Container Registry Enterprise Edition インスタンスを指定する
Elastic Container Instance などの作成対象のリソースと Container Registry インスタンスが同じ Alibaba Cloud アカウントに属し、Container Registry インスタンスがカスタムドメイン名を使用する Enterprise Edition インスタンスである場合、シークレット不要のイメージプルを実装するには、Container Registry インスタンスを指定する必要があります。
OpenAPI
CreateContainerGroup API 操作を呼び出して Elastic Container Instance を作成するか、CreateImageCache API 操作を呼び出してイメージキャッシュを作成する場合、AcrRegistryInfo 関連のパラメータを構成して Container Registry インスタンスを指定できます。次の表でこれらのパラメータについて説明します。詳細については、「CreateContainerGroup」および「CreateImageCache」をご参照ください。
パラメータ | タイプ | 例 | 説明 |
AcrRegistryInfo.N.RegionId | 文字列 | cn-beijing | Container Registry Enterprise Edition インスタンス N のリージョン ID。 このパラメータは、Elastic Container Instance などの作成対象のリソースと Container Registry インスタンスが異なるリージョンにある場合に必須です。 |
AcrRegistryInfo.N.InstanceId | 文字列 | cri-nwj395hgf6f3**** | Container Registry Enterprise Edition インスタンス N の ID。 このパラメータは、Enterprise Edition インスタンスがカスタムドメイン名を使用する場合に必須です。 |
たとえば、Elastic Container Instance を作成する場合、OpenAPI で次のパラメータを指定できます。
例 1: Container Registry インスタンスの ID のみ指定する
ContainerGroupName=test
#Container
Container.1.Name=c1
Container.1.Image=test****-registry.example.com/eci_test/nginx:1.0
#AcrRegistryInfo
AcrRegistryInfo.1.InstanceId=cri-nwj395hg********
例 2: Container Registry インスタンスのリージョン ID と ID を指定する
ContainerGroupName=test
#Container
Container.1.Name=c1
Container.1.Image=test****-registry.example.com/eci_test/nginx:1.0
Container.2.Name=c2
Container.2.Image=test****-registry.example.com/eci_test/busybox:1.0
Container.2.Command=sleep
Container.2.Arg=3600
#AcrRegistryInfo
AcrRegistryInfo.1.RegionId=cn-beijing
AcrRegistryInfo.1.InstanceId=cri-nwj395hg********
コンソールモード
購入ページで Elastic Container Instance を作成する場合、[コンテナ構成] セクションで各コンテナのイメージを選択できます。コンテナイメージを選択するときに、[Container Registry Enterprise Edition イメージ] タブで Container Registry Enterprise Edition インスタンスのイメージを指定できます。

説明 Elastic Container Instance コンソールでイメージキャッシュを作成する場合、Container Registry Enterprise Edition インスタンスのイメージを指定することはできません。
RAM ロールを構成してアカウント間でシークレット不要のイメージプルを実装する
Elastic Container Instance などの作成対象のリソースと Container Registry インスタンスが同じ Alibaba Cloud アカウントに属していない場合、シークレット不要のイメージプルを実装するには、2 つのアカウントの RAM ロールを構成し、RAM ロールに権限を付与する必要があります。
手順:
ステップ 1: RAM ロールを作成し、RAM ロールに権限を付与する
Elastic Container Instance などの作成対象のリソースが属するアカウント A に RAM ロールを作成し、RAM ロールに権限を付与します。
信頼できる Alibaba Cloud サービスの RAM ロールを作成します。詳細については、「信頼できる Alibaba Cloud サービスの RAM ロールを作成する」をご参照ください。
次のパラメータに注意してください。
role-assume ロールに、セキュリティトークンサービス(STS)の AssumeRole API 操作を呼び出す権限を付与します。詳細については、「RAM ロールに権限を付与する」トピックの「方法 2: ロールのページで入力とアタッチをクリックして RAM ロールに権限を付与する」セクションをご参照ください。
ポリシータイプをシステムポリシーに設定し、ポリシー名を AliyunSTSAssumeRoleAccess に設定します。
作成した role-assume ロールを見つけます。ロール名をクリックして詳細ページに移動します。権限と信頼ポリシーを確認し、role-assume の ARN を取得します。
権限と ARN

信頼ポリシー

Container Registry インスタンスが属するアカウント B に RAM ロールを作成し、RAM ロールに権限を付与します。
信頼できる Alibaba Cloud アカウントの RAM ロールを作成します。詳細については、「信頼できる Alibaba Cloud アカウントの RAM ロールを作成する」をご参照ください。
次のパラメータに注意してください。
role-acr ロールに、Container Registry インスタンスからイメージをプルする権限を付与します。詳細については、「RAM ロールに権限を付与する」トピックの「方法 2: ロールのページで入力とアタッチをクリックして RAM ロールに権限を付与する」セクションをご参照ください。
ポリシータイプをシステムポリシーに設定し、ポリシー名を AliyunContainerRegistryFullAccess に設定します。
信頼ポリシーを編集して、role-acr が role-assume によって信頼されるようにします。詳細については、「RAM ロールの信頼ポリシーを編集する」をご参照ください。
デフォルトでは、role-acr ロールはアカウント A のすべての RAM ユーザーと RAM ロールによってアタッチできます。信頼ポリシーを編集して、アカウント A の必要な RAM ユーザーと RAM ロールにのみ権限を付与することをお勧めします。
Principal 要素で、RAM フィールドの値を role-assume の ARN に変更します。これは、role-acr ロールが role-assume によってのみアタッチできることを示しています。例:
"Principal": {
"RAM": [
"acs:ram::1609982529******:role/role-assume"
]
}
権限と信頼ポリシーを確認し、role-acr の ARN を取得します。
権限と ARN

信頼ポリシー

ステップ 2: ステップ 1 で作成した RAM ロールを指定してリソースを作成する
CreateContainerGroup API 操作を呼び出して Elastic Container Instance を作成するか、CreateImageCache API 操作を呼び出してイメージキャッシュを作成する場合、AcrRegistryInfo 関連のパラメータを構成して、作成対象のリソースのアカウントとは異なる Alibaba Cloud アカウントの Container Registry インスタンスを指定できます。次の項目に注意してください。
Container Registry インスタンスが、作成対象のリソースのアカウントとは異なる Alibaba Cloud アカウントに属している場合、ArnService と ArnUser を設定して権限構成の RAM ロールを指定する必要があります。
Container Registry インスタンスがカスタムドメイン名を使用する Enterprise Edition インスタンスである場合、InstanceId を設定して Container Registry インスタンスを指定する必要があります。
詳細については、「CreateContainerGroup」および「CreateImageCache」をご参照ください。
パラメータ | タイプ | 例 | 説明 |
AcrRegistryInfo.N.ArnService | 文字列 | acs:ram::1609982529******:role/role-assume | Elastic Container Instance などのリソースが属する Alibaba Cloud アカウントの RAM ロールの ARN。 |
AcrRegistryInfo.N.ArnUser | 文字列 | acs:ram::1298452580******:role/role-acr | Container Registry インスタンスが属する Alibaba Cloud アカウントの RAM ロールの ARN。 |
AcrRegistryInfo.N.RegionId | 文字列 | cn-beijing | Container Registry Enterprise Edition インスタンス N のリージョン ID。 このパラメータは、Elastic Container Instance などの作成対象のリソースと Container Registry インスタンスが異なるリージョンにある場合に必須です。 |
AcrRegistryInfo.N.InstanceId | 文字列 | cri-nwj395hgf6f3**** | Container Registry Enterprise Edition インスタンス N の ID。 このパラメータは、Enterprise Edition インスタンスがカスタムドメイン名を使用する場合に必須です。 |
たとえば、Elastic Container Instance を作成する場合、OpenAPI で次のパラメータを指定できます。
ContainerGroupName=test-acr
#Container
Container.1.Name=test
Container.1.Image=test****-registry.cn-hangzhou.cr.aliyuncs.com/eci_test/nginx:1.0
#AcrRegistryInfo
AcrRegistryInfo.1.ArnService=acs:ram::1609982529******:role/role-assume
AcrRegistryInfo.N.ArnUser=acs:ram::1298452580******:role/role-acr