免密拉取ACR鏡像
對于阿里云容器鏡像服務ACR的鏡像,ECI支持免密拉取,以提升效率和安全性。本文介紹如何免密拉取ACR鏡像。
背景信息
阿里云容器鏡像服務ACR分為個人版和企業(yè)版。其中,企業(yè)版是企業(yè)級云原生應用制品管理平臺,提供容器鏡像、Helm Chart以及符合OCI規(guī)范制品的生命周期管理,適用于業(yè)務大規(guī)模部署場景,幫助企業(yè)降低交付復雜度。更多信息,請參見容器鏡像服務ACR簡介。
創(chuàng)建ECI實例或鏡像緩存時,如果要拉取的鏡像屬于ACR鏡像,可以配置免密來簡化流程,提升效率,同時避免密碼泄露的風險,加強安全性。
非ACR鏡像(例如Docker鏡像)不支持免密。
前提條件
配置ECI實例等資源免密拉取ACR鏡像前,請確保您已經(jīng)完成以下操作:
已創(chuàng)建ACR實例,并完成鏡像倉庫、鏡像等相關配置。
關于如何配置ACR個人版實例,請參見使用個人版實例推送拉取鏡像。
關于如何配置ACR企業(yè)版實例,請參見使用企業(yè)版實例推送和拉取鏡像。
如果使用ACR企業(yè)版實例,需要配置免密訪問。
新創(chuàng)建的ACR企業(yè)版實例默認處于非連接狀態(tài),需要配置相應的ACL策略后,才可以通過公網(wǎng)或者專有網(wǎng)絡訪問該實例。
公網(wǎng)訪問:開啟公網(wǎng)訪問入口后,可以直接通過公網(wǎng)域名地址來訪問ACR企業(yè)版實例的鏡像(可跨域)。具體操作,請參見配置公網(wǎng)的訪問控制。
專有網(wǎng)絡訪問:使用專有網(wǎng)絡VPC訪問ACR企業(yè)版實例,需要開啟相關授權。具體操作,請參見配置專有網(wǎng)絡的訪問控制。
配置說明
對于ACR鏡像,根據(jù)ACR實例是否與待創(chuàng)建的ECI實例等資源屬于同一阿里云賬號,以及ACR實例的類型,免密拉取鏡像的支持情況如下:
賬號情況 | ACR類型 | 免密支持情況 |
同賬號 |
| 默認自動免密,支持配置RAM角色來限制免密范圍。 |
同賬號 | 企業(yè)版(自定義域名) | 無法自動免密,需要指定ACR實例來實現(xiàn)免密。 |
跨賬號 |
| 無法自動免密,需要配置RAM角色來實現(xiàn)免密。 |
請根據(jù)您的賬號和ACR實例情況選擇對應的配置:
配置RAM角色限制免密范圍
在ACR實例與待創(chuàng)建的ECI實例等資源屬于同一阿里云賬號的前提下,如果ACR實例是個人版ACR,或者是使用默認域名的企業(yè)版ACR,則默認自動免密。此時,您可以按需配置RAM角色來限制免密范圍,例如只允許某一ACR實例自動免密。
默認情況下,ECI使用服務關聯(lián)角色AliyunServiceRoleForECI來獲取其他云服務的訪問權限,以便創(chuàng)建ECI資源,該角色包含了拉取ACR鏡像的權限,適用于同賬號下的所有個人版ACR和使用默認域名的企業(yè)版ACR,無法進行細粒度控制。
配置步驟包含以下兩步:
步驟一:創(chuàng)建RAM角色并授權
創(chuàng)建一個可信實體為阿里云服務的RAM角色。具體操作,請參見創(chuàng)建可信實體為阿里云服務的RAM角色。
需要注意的配置項如下:
可信實體類型:阿里云服務
角色類型:普通服務角色
角色名稱:示例為acr-test
受信服務:彈性容器實例ECI
創(chuàng)建自定義權限策略。具體操作,請參見創(chuàng)建自定義權限策略。
權限策略的內容示例如下,表示只允許拉取指定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角色授權。
找到新創(chuàng)建的acr-test角色,單擊角色名稱進入詳情頁面,確認權限并獲取ARN。
步驟二:指定RAM角色
調用CreateContainerGroup接口創(chuàng)建ECI實例,以及調用CreateImageCache接口創(chuàng)建鏡像緩存時,您可以設置AcrRegistryInfo.N.ArnService參數(shù)來指定創(chuàng)建資源時使用的RAM角色。相關參數(shù)說明如下表所示。更多信息,請參見CreateContainerGroup和CreateImageCache。
名稱 | 類型 | 示例值 | 描述 |
AcrRegistryInfo.N.ArnService | string | acs:ram::1609982529******:role/acr-test | ECI實例等資源歸屬賬號下的RAM角色的ARN。 |
以創(chuàng)建ECI實例為例,您可以通過OpenAPI傳入以下參數(shù):
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實例實現(xiàn)ACR企業(yè)版免密
在ACR實例與待創(chuàng)建的ECI實例等資源屬于同一阿里云賬號的前提下,如果ACR企業(yè)版實例使用自定義域名,則需要指定ACR企業(yè)版實例來實現(xiàn)免密。
OpenAPI
調用CreateContainerGroup接口創(chuàng)建ECI實例,以及調用CreateImageCache接口創(chuàng)建鏡像緩存時,您可以設置AcrRegistryInfo相關參數(shù)來指定ACR實例。相關參數(shù)說明如下表所示。更多信息,請參見CreateContainerGroup和CreateImageCache。
名稱 | 類型 | 示例值 | 描述 |
AcrRegistryInfo.N.RegionId | string | cn-beijing | ACR企業(yè)版實例所屬地域。 當ACR企業(yè)版實例與ECI實例等資源處于不同地域時,需要設置該參數(shù)。 |
AcrRegistryInfo.N.InstanceId | string | cri-nwj395hgf6f3**** | ACR企業(yè)版實例ID。 ACR企業(yè)版實例使用自定義域名時,必須設置該參數(shù)。 |
以創(chuàng)建ECI實例為例,您可以通過OpenAPI傳入以下參數(shù):
示例一:僅指定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********
控制臺
通過彈性容器實例售賣頁創(chuàng)建ECI實例時,您可以在容器配置處為各個容器選擇鏡像。選擇容器鏡像時,在企業(yè)鏡像頁簽下,可以指定ACR企業(yè)版實例中的鏡像。
通過控制臺創(chuàng)建鏡像緩存時,暫不支持指定ACR企業(yè)版實例中的鏡像。
配置RAM角色實現(xiàn)跨賬號免密
如果ACR實例與待創(chuàng)建的ECI實例等資源不屬于同一阿里云賬號,則需要分別在兩個賬號下配置RAM角色并完成授權后,才能實現(xiàn)免密。
配置步驟包含以下兩步:
步驟一:創(chuàng)建RAM角色并授權
在ECI實例等資源歸屬賬號A下創(chuàng)建RAM角色并授權。
創(chuàng)建一個可信實體為阿里云服務的RAM角色。具體操作,請參見創(chuàng)建可信實體為阿里云服務的RAM角色。
需要注意的配置項如下:
可信實體類型:阿里云服務
角色類型:普通服務角色
角色名稱:示例為role-assume
受信服務:彈性容器實例ECI
為role-assume角色授予調用STS服務AssumeRole接口的權限。具體操作,請參見為RAM角色精確授權。
要添加的權限類型為系統(tǒng)策略,權限策略名稱為AliyunSTSAssumeRoleAccess。
找到新創(chuàng)建的role-assume角色,單擊角色名稱進入詳情頁面,確認權限和信任策略,并獲取ARN。
權限和ARN
信任策略
在ACR實例歸屬賬號B下創(chuàng)建RAM角色并授權。
創(chuàng)建一個可信實體為阿里云賬號的RAM角色。具體操作,請參見創(chuàng)建可信實體為阿里云賬號的RAM角色。
需要注意的配置項如下:
可信實體類型:阿里云賬號
角色名稱:示例為role-acr
信任的云賬號:其他云賬號,此處填寫ECI實例等資源歸屬賬號A
為role-acr角色授予拉取ACR鏡像的權限。具體操作,請參見為RAM角色精確授權。
要添加的權限類型為系統(tǒng)策略,權限策略名稱為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角色創(chuàng)建資源
調用CreateContainerGroup接口創(chuàng)建ECI實例,以及調用CreateImageCache接口創(chuàng)建鏡像緩存時,您可以設置AcrRegistryInfo相關參數(shù)來指定其他阿里云賬號下的ACR實例。相關注意事項如下:
如果ACR實例屬于其他阿里云賬號,則必須設置ArnService和ArnUser來指定RAM角色,以配置權限。
如果ACR實例為使用自定義域名的企業(yè)版實例,則必須設置InstanceId來指定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企業(yè)版實例所屬地域。 當ACR企業(yè)版實例與ECI實例等資源處于不同地域時,需要設置該參數(shù)。 |
AcrRegistryInfo.N.InstanceId | string | cri-nwj395hgf6f3**** | ACR企業(yè)版實例ID。 ACR企業(yè)版實例使用自定義域名時,必須設置該參數(shù)。 |
以創(chuàng)建ECI實例為例,您可以通過OpenAPI傳入以下參數(shù):
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