背景資訊
阿里雲Container RegistryACR分為個人版和企業版。其中,企業版是企業級雲原生應用製品管理平台,提供容器鏡像、Helm Chart以及符合OCI規範製品的生命週期管理,適用於業務大規模部署情境,協助企業降低交付複雜度。更多資訊,請參見Container RegistryACR簡介。
建立ECI執行個體或鏡像緩衝時,如果要拉取的鏡像屬於ACR鏡像,可以配置免密來簡化流程,提升效率,同時避免密碼泄露的風險,加強安全性。
說明 非ACR鏡像(例如Docker鏡像)不支援免密。
前提條件
配置ECI執行個體等資源免密拉取ACR鏡像前,請確保您已經完成以下操作:
已建立ACR執行個體,並完成鏡像倉庫、鏡像等相關配置。
如果使用ACR企業版執行個體,需要配置免密訪問。
新建立的ACR企業版執行個體預設處於非串連狀態,需要配置相應的ACL策略後,才可以通過公網或者專用網路訪問該執行個體。
配置說明
對於ACR鏡像,根據ACR執行個體是否與待建立的ECI執行個體等資源屬於同一阿里雲帳號,以及ACR執行個體的類型,免密拉取鏡像的支援情況如下:
帳號情況 | ACR類型 | 免密支援情況 |
同帳號 | | 預設自動免密,支援配置RAM角色來限制免密範圍。 |
同帳號 | 企業版(自訂網域名) | 無法自動免密,需要指定ACR執行個體來實現免密。 |
跨帳號 | | 無法自動免密,需要配置RAM角色來實現免密。 |
請根據您的帳號和ACR執行個體情況選擇對應的配置:
配置RAM角色限制免密範圍
在ACR執行個體與待建立的ECI執行個體等資源屬於同一阿里雲帳號的前提下,如果ACR執行個體是個人版ACR,或者是使用預設網域名稱的企業版ACR,則預設自動免密。此時,您可以按需配置RAM角色來限制免密範圍,例如只允許某一ACR執行個體自動免密。
說明 預設情況下,ECI使用服務關聯角色AliyunServiceRoleForECI來擷取其他雲端服務的存取權限,以便建立ECI資源,該角色包含了拉取ACR鏡像的許可權,適用於同帳號下的所有個人版ACR和使用預設網域名稱的企業版ACR,無法進行細粒度控制。
配置步驟包含以下兩步:
步驟一:建立RAM角色並授權
建立一個可信實體為阿里雲服務的RAM角色。具體操作,請參見建立可信實體為阿里雲服務的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。
步驟二:指定RAM角色
調用CreateContainerGroup介面建立ECI執行個體,以及調用CreateImageCache介面建立鏡像緩衝時,您可以設定AcrRegistryInfo.N.ArnService參數來指定建立資源時使用的RAM角色。相關參數說明如下表所示。更多資訊,請參見CreateContainerGroup和CreateImageCache。
名稱 | 類型 | 樣本值 | 描述 |
AcrRegistryInfo.N.ArnService | string | acs:ram::1609982529******:role/acr-test | ECI執行個體等資源歸屬帳號下的RAM角色的ARN。 |
以建立ECI執行個體為例,您可以通過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
指定ACR執行個體實現ACR企業版免密
在ACR執行個體與待建立的ECI執行個體等資源屬於同一阿里雲帳號的前提下,如果ACR企業版執行個體使用自訂網域名,則需要指定ACR企業版執行個體來實現免密。
OpenAPI
調用CreateContainerGroup介面建立ECI執行個體,以及調用CreateImageCache介面建立鏡像緩衝時,您可以設定AcrRegistryInfo相關參數來指定ACR執行個體。相關參數說明如下表所示。更多資訊,請參見CreateContainerGroup和CreateImageCache。
名稱 | 類型 | 樣本值 | 描述 |
AcrRegistryInfo.N.RegionId | string | cn-beijing | ACR企業版執行個體所屬地區。 當ACR企業版執行個體與ECI執行個體等資源處於不同地區時,需要設定該參數。 |
AcrRegistryInfo.N.InstanceId | string | cri-nwj395hgf6f3**** | ACR企業版執行個體ID。 ACR企業版執行個體使用自訂網域名時,必須設定該參數。 |
以建立ECI執行個體為例,您可以通過OpenAPI傳入以下參數:
樣本一:僅指定ACR執行個體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********
樣本二:指定地區和ACR執行個體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********
配置RAM角色實現跨帳號免密
如果ACR執行個體與待建立的ECI執行個體等資源不屬於同一阿里雲帳號,則需要分別在兩個帳號下配置RAM角色並完成授權後,才能實現免密。
配置步驟包含以下兩步:
步驟一:建立RAM角色並授權
在ECI執行個體等資源歸屬帳號A下建立RAM角色並授權。
建立一個可信實體為阿里雲服務的RAM角色。具體操作,請參見建立可信實體為阿里雲服務的RAM角色。
需要注意的配置項如下:
為role-assume角色授予調用STS服務AssumeRole介面的許可權。具體操作,請參見為RAM角色精確授權。
要添加的權限類別型為系統策略,權限原則名稱為AliyunSTSAssumeRoleAccess。
找到新建立的role-assume角色,單擊角色名稱進入詳情頁面,確認許可權和信任策略,並擷取ARN。
許可權和ARN
信任策略
在ACR執行個體歸屬帳號B下建立RAM角色並授權。
建立一個可信實體為阿里雲帳號的RAM角色。具體操作,請參見建立可信實體為阿里雲帳號的RAM角色。
需要注意的配置項如下:
為role-acr角色授予拉取ACR鏡像的許可權。具體操作,請參見為RAM角色精確授權。
要添加的權限類別型為系統策略,權限原則名稱為AliyunContainerRegistryFullAccess。
修改信任策略,將role-acr角色授信給role-assume角色。具體操作,請參見修改RAM角色的信任策略。
預設情況下,role-acr角色可以被帳號A下授權的任何RAM使用者或RAM角色扮演。建議您修改信任策略進行精確授信。
在Principal
處,將RAM
欄位的值改為role-assume角色的ARN,則表示role-acr角色只可以被role-assume角色扮演。樣本如下:
"Principal": {
"RAM": [
"acs:ram::1609982529******:role/role-assume"
]
}
確認許可權和信任策略,並擷取ARN。
許可權和ARN
信任策略
步驟二:指定RAM角色建立資源
調用CreateContainerGroup介面建立ECI執行個體,以及調用CreateImageCache介面建立鏡像緩衝時,您可以設定AcrRegistryInfo相關參數來指定其他阿里雲帳號下的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企業版執行個體所屬地區。 當ACR企業版執行個體與ECI執行個體等資源處於不同地區時,需要設定該參數。 |
AcrRegistryInfo.N.InstanceId | string | cri-nwj395hgf6f3**** | ACR企業版執行個體ID。 ACR企業版執行個體使用自訂網域名時,必須設定該參數。 |
以建立ECI執行個體為例,您可以通過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