Elastic Container Instance (ECI) は、シークレットを使用せずに Container Registry (ACR) からイメージをプルすることで、効率とセキュリティを向上させます。このトピックでは、このシークレット不要のアクセスを有効にする方法について説明します。
背景情報
Alibaba Cloud Container Registry (ACR) には、Personal Edition と Enterprise Edition があります。Enterprise Edition は、クラウドネイティブなアプリケーションアーティファクトを管理するためのエンタープライズグレードのプラットフォームです。コンテナイメージ、Helm チャート、および OCI 準拠アーティファクトのライフサイクル管理を提供します。これは、大規模なビジネス展開に適しており、企業がデリバリーの複雑さを軽減するのに役立ちます。詳細については、「Container Registry (ACR) の概要」をご参照ください。
ACR イメージを使用して ECI インスタンスまたはイメージキャッシュを作成する場合、シークレット不要のアクセスを設定できます。これにより、プロセスが簡素化され、効率が向上し、認証情報の漏洩を回避することでセキュリティが強化されます。
説明
シークレット不要のプルは、Docker イメージなどの ACR 以外のイメージではサポートされていません。
前提条件
シークレットを使用せずに ACR イメージをプルする前に、次のタスクを完了してください:
-
ACR インスタンスの作成、およびそのイメージリポジトリとイメージの設定。
-
ACR Enterprise Edition インスタンスを使用する場合の、ネットワークアクセス制御の設定。
デフォルトでは、新しい ACR Enterprise Edition インスタンスはすべてのネットワークから切断されています。インターネットまたは Virtual Private Cloud (VPC) からのアクセスを許可するには、アクセスコントロールリスト (ACL) を設定する必要があります。
設定
シークレット不要のイメージプルのサポート状況は、ACR インスタンスのタイプ、およびインスタンスと ECI リソースが同一の Alibaba Cloud アカウントに属しているかどうかによって異なります。
|
アカウントのシナリオ
|
ACR のタイプ
|
サポート
|
|
同一アカウント
|
|
デフォルトで有効です。RAM ロールを設定することで、シークレット不要のアクセスの範囲を制限できます。
|
|
同一アカウント
|
Enterprise Edition (カスタムドメイン名)
|
デフォルトでは有効になっていません。シークレット不要のアクセスを有効にするには、ACR インスタンスを指定する必要があります。
|
|
クロスアカウント
|
-
Personal Edition
-
Enterprise Edition
|
デフォルトでは有効になっていません。シークレット不要のアクセスを有効にするには、RAM ロールを設定する必要があります。
|
アカウントと ACR インスタンスのセットアップに一致する設定を選択してください。
RAM ロールによるアクセスの制限
ACR インスタンスと ECI リソースが同じ Alibaba Cloud アカウントにある場合、Personal Edition インスタンスおよびデフォルトのドメイン名を使用する Enterprise Edition インスタンスでは、シークレット不要のアクセスがデフォルトで有効になっています。オプションで Resource Access Management (RAM) ロールを設定して、このアクセスを、特定の ACR インスタンスからのプルのみを許可するように制限することができます。
説明
デフォルトでは、ECI はサービスリンクロール AliyunServiceRoleForECI を使用して、ECI リソースの作成時に他のクラウドサービスにアクセスします。このロールには、同一アカウント内のすべての Personal Edition ACR インスタンスおよびデフォルトのドメイン名を使用する Enterprise Edition ACR インスタンスからイメージをプルする権限が含まれており、きめ細かな制御はできません。
この設定は 2 つのステップで構成されます。
ステップ 1:RAM ロールの作成と認可
-
信頼された Alibaba Cloud サービス用の RAM ロールを作成します。詳細については、「信頼された Alibaba Cloud サービス用の RAM ロールを作成する」をご参照ください。
次のパラメーターに注意してください:
-
カスタム権限ポリシーを作成します。詳細については、「カスタム権限ポリシーの作成」をご参照ください。
次のポリシーでは、指定された ACR インスタンスからのイメージプルのみが許可されます。権限ポリシーの記述方法の詳細については、「ポリシー要素」をご参照ください。
{
"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****"
]
}
]
}
-
カスタム権限ポリシーを RAM ロールにアタッチします。詳細については、「RAM ロールへの権限付与」をご参照ください。
-
新しい acr-test ロールを見つけてその名前をクリックし、詳細ページを開きます。権限を確認し、ARN を取得します。
[基本情報] セクションで、[ARN] フィールド (acs:ram:::role/acr-test の形式) を見つけ、その横にあるコピーボタンをクリックします。[権限] タブで、カスタムポリシー acr がアタッチされていることを確認します。
ステップ 2:RAM ロールの指定
CreateContainerGroup API を呼び出して ECI インスタンスを作成するか、CreateImageCache API を呼び出してイメージキャッシュを作成するときに、AcrRegistryInfo.N.ArnService パラメーターを設定して、リソースの作成に使用する RAM ロールを指定します。パラメーターの詳細は次の表のとおりです。詳細については、「CreateContainerGroup」および「CreateImageCache」をご参照ください。
|
パラメーター
|
タイプ
|
例
|
説明
|
|
AcrRegistryInfo.N.ArnService
|
string
|
acs:ram::1609982529******:role/acr-test
|
ECI リソースを所有する Alibaba Cloud アカウントに属する RAM ロールの ARN。
|
次の例は、OpenAPI を介してパラメーターを渡し、ECI インスタンスを作成する方法を示しています:
ContainerGroupName=test-acr
# コンテナ
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
ACR Enterprise Edition インスタンスの指定
ACR Enterprise Edition インスタンスがカスタムドメイン名を使用し、ECI リソースと同じ Alibaba Cloud アカウントに属している場合は、ACR インスタンスを指定してシークレット不要のアクセスを有効にする必要があります。
API
CreateContainerGroup API を呼び出して ECI インスタンスを作成するか、CreateImageCache API を呼び出してイメージキャッシュを作成するときに、AcrRegistryInfo の関連パラメーターを設定して ACR インスタンスを指定できます。次の表に、これらのパラメーターを示します。詳細については、「CreateContainerGroup」および「CreateImageCache」をご参照ください。
|
パラメーター
|
タイプ
|
例
|
説明
|
|
AcrRegistryInfo.N.RegionId
|
string
|
cn-beijing
|
ACR Enterprise Edition インスタンスのリージョン。
このパラメーターは、ACR Enterprise Edition インスタンスと ECI リソースが異なるリージョンにある場合に必要です。
|
|
AcrRegistryInfo.N.InstanceId
|
string
|
cri-nwj395hgf6f3****
|
ACR Enterprise Edition インスタンスの ID。
このパラメーターは、ACR Enterprise Edition インスタンスがカスタムドメイン名を使用する場合に必要です。
|
次の例は、OpenAPI を介してパラメーターを渡し、ECI インスタンスを作成する方法を示しています:
-
例 1:ACR インスタンス ID のみを指定する場合
ContainerGroupName=test
# コンテナ
Container.1.Name=c1
Container.1.Image=test****-registry.example.com/eci_test/nginx:1.0
# AcrRegistryInfo
AcrRegistryInfo.1.InstanceId=cri-nwj395hg********
-
例 2:リージョンと ACR インスタンス ID を指定する場合
ContainerGroupName=test
# コンテナ
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********
コンソール
ECI 購入ページ から ECI インスタンスを作成する際、[コンテナ設定] セクションに移動します。そこから、コンテナのイメージを選択し、[Enterprise Image] タブを使用して ACR Enterprise Edition インスタンスのイメージを指定します。
[Enterprise Image] ダイアログボックスで、[リージョン] や [インスタンス名] などの Container Registry インスタンス (CRI) 情報を設定します。次に、[イメージリポジトリ] と [ドメイン名] を選択し、[OK] をクリックします。
説明
コンソールでイメージキャッシュを作成する場合、ACR Enterprise Edition インスタンスのイメージを指定することはできません。
RAM ロールを使用したクロスアカウントアクセス
ACR インスタンスと ECI リソースが異なる Alibaba Cloud アカウントに属している場合は、両方のアカウントで RAM ロールを設定および認可して、シークレット不要のアクセスを有効にする必要があります。
ステップ 1:RAM ロールの作成と認可
-
ECI リソースを所有するアカウント A で、RAM ロールを作成し、認可します。
-
信頼された Alibaba Cloud サービス用の RAM ロールを作成します。詳細については、「信頼された Alibaba Cloud サービス用の RAM ロールを作成する」をご参照ください。
次のパラメーターに注意してください:
-
role-assume に、Security Token Service (STS) の AssumeRole API を呼び出す権限を付与します。詳細については、「RAM ロールへの権限付与」をご参照ください。
AliyunSTSAssumeRoleAccess システムポリシーをアタッチします。
-
新しく作成された role-assume ロールを見つけ、その名前をクリックして詳細ページに移動し、権限と信頼ポリシーを確認して ARN を取得します。
-
権限と ARN
RAM ロールの ARN は acs:ram::<AccountID>:role/role-assume です。このロールには、STS の AssumeRole API を呼び出すことを許可する AliyunSTSAssumeRoleAccess システムポリシーが付与されています。
-
信頼ポリシー
{
"Statement": [
{
"Action": "sts:AssumeRole",
"Effect": "Allow",
"Principal": {
"Service": [
"eci.aliyuncs.com"
]
}
}
],
"Version": "1"
}
-
ACR インスタンスを所有するアカウント B で、RAM ロールを作成し、認可します。
-
信頼された Alibaba Cloud アカウント用の RAM ロールを作成します。詳細については、「信頼された Alibaba Cloud アカウント用の RAM ロールを作成する」をご参照ください。
次のパラメーターに注意してください:
-
role-acr に、ACR イメージをプルする権限を付与します。詳細については、「RAM ロールへの権限付与」をご参照ください。
AliyunContainerRegistryFullAccess システムポリシーをアタッチします。
-
信頼ポリシーを変更して、role-assume ロールが role-acr ロールを引き受けることを許可します。詳細については、「RAM ロールの信頼ポリシーの変更」をご参照ください。
デフォルトでは、role-acr ロールはアカウント A の任意の認可された RAM ユーザーまたは RAM ロールによって引き受けることができます。正確な認可のために、信頼ポリシーを変更することを推奨します。
Principal セクションで、RAM フィールドの値を role-assume ロールの ARN に変更します。これにより、role-assume ロールのみが role-acr ロールを引き受けることができるようになります。例:
"Principal": {
"RAM": [
"acs:ram::1609982529******:role/role-assume"
]
}
-
権限と信頼ポリシーを確認し、ARN を取得します。
-
権限と ARN
role-acr ロールの ARN は acs:ram::<AccountID>:role/role-acr です。コピーボタンをクリックして値をコピーできます。[権限] タブで、AliyunContainerRegistryFullAccess システムポリシーがアタッチされていること、およびリソーススコープがアカウントレベルであることを確認します。
-
信頼ポリシー
{
"Statement": [
{
"Action": "sts:AssumeRole",
"Effect": "Allow",
"Principal": {
"RAM": ["acs:ram::1609982529******:role/role-assume"]
}
}
],
"Version": "1"
}
ステップ 2:RAM ロールの指定
CreateContainerGroup または CreateImageCache API を呼び出すときに、AcrRegistryInfo パラメーターを設定して、別の Alibaba Cloud アカウントの ACR インスタンスを指定できます。次の点に注意してください:
詳細については、「CreateContainerGroup」および「CreateImageCache」をご参照ください。
|
パラメーター
|
タイプ
|
例
|
説明
|
|
AcrRegistryInfo.N.ArnService
|
string
|
acs:ram::1609982529******:role/role-assume
|
ECI リソースを所有するアカウントに属する RAM ロールの ARN。
|
|
AcrRegistryInfo.N.ArnUser
|
string
|
acs:ram::1298452580******:role/role-acr
|
ACR インスタンスを所有するアカウントに属する RAM ロールの ARN。
|
|
AcrRegistryInfo.N.RegionId
|
string
|
cn-beijing
|
ACR Enterprise Edition インスタンスのリージョン。
このパラメーターは、ACR Enterprise Edition インスタンスと ECI リソースが異なるリージョンにある場合に必要です。
|
|
AcrRegistryInfo.N.InstanceId
|
string
|
cri-nwj395hgf6f3****
|
ACR Enterprise Edition インスタンスの ID。
このパラメーターは、ACR Enterprise Edition インスタンスがカスタムドメイン名を使用する場合に必要です。
|
次の例は、OpenAPI を介してパラメーターを渡し、ECI インスタンスを作成する方法を示しています:
ContainerGroupName=test-acr
# コンテナ
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.1.ArnUser=acs:ram::1298452580******:role/role-acr