全部產品
Search
文件中心

Container Compute Service:免密拉取ACR鏡像

更新時間:Dec 11, 2024

Container Compute Service (ACS)支援免密拉取Container Registry (ACR)中的鏡像,以提升效率和安全性。本文介紹如何在ACS叢集中免密拉取ACR鏡像。

背景資訊

Container Registry (ACR)提供了多種版本的標準雲原生製品安全託管及高效分發服務,其中包括ACR個人版、ACR企業版等。更多資訊,請參見Container RegistryACR簡介。對於不同版本的ACR服務,ACS提供了統一的免密拉取鏡像配置方式。

通過為ACS叢集配置免密服務,ACS執行個體在建立時將自動為ACR鏡像注入鑒權資訊,可以簡化執行個體建立流程,同時避免密碼泄露的風險,加強安全性。

說明

Docker鏡像,自建倉庫等非ACR鏡像不支援免密。

前提條件

配置ACS叢集免密拉取ACR鏡像前,請確保您已經完成以下操作:

  1. 建立ACS叢集。具體操作,請參見建立ACS叢集

  2. 已建立ACR執行個體,並完成鏡像倉庫、鏡像等相關配置。

  3. 如果使用ACR企業版執行個體,需要配置執行個體的訪問方式。

    新建立的ACR企業版執行個體預設處於非串連狀態,需要配置相應的ACL策略後,才可以通過公網或者專用網路訪問該執行個體。

    • 公網訪問:開啟公網訪問入口後,可以直接通過公網網域名稱地址來訪問ACR企業版執行個體的鏡像(可跨域)。具體操作,請參見配置公網的存取控制

    • 專用網路訪問:使用Virtual Private Cloud訪問ACR企業版執行個體,需要開啟相關授權。具體操作,請參見配置專用網路的存取控制

原理說明

免密組件通過讀取使用者控制台的配置,進行私人鏡像拉取。免密組件配置完成後將會在叢集中自動建立Secret,並關聯到配置中已指定的ServiceAccount。任何使用此ServiceAccount的Pod都會預設使用免密組件產生的Secret進行鏡像拉取,從而達到免密拉取鏡像的效果。

安裝和配置免密組件

  1. 登入容器計算服務控制台,在左側導覽列選擇叢集

  2. 叢集頁面,單擊目的地組群ID,然後在左側導覽列,選擇營運管理組件管理

  3. 組件管理頁面,選擇安全頁簽,找到aliyun-acr-credential-helper,單擊安裝

    image

  4. 在彈出的參數配置頁面,單擊AcrInstanceInfo右側添加,即可添加多個ACR執行個體資訊。您可以參考以下樣本進行配置,然後單擊確定

    1. 添加AcrInstanceInfo

      說明

      預設情境的配置方式如下:

      • 使用AcrInstanceInfo的預設配置,即可同步ACR個人版執行個體。

      • 填寫執行個體instanceID,其他項使用AcrInstanceInfo的預設配置,即可同步ACR企業版執行個體。

      配置項鍵

      配置項鍵說明

      配置項值

      instanceID

      ACR執行個體ID。

      Container Registry中找到所建立的執行個體。

      • 企業版:在執行個體資訊中可以找到執行個體ID,值為cri-開頭的字串。

      • 個人版:如果希望為個人版配置免密能力,此處留空即可。

      預設值為空白,即配置為該Region個人版執行個體。

      regionID

      ACR執行個體所在的RegionID。

      ACR執行個體所在Region的ID,如:杭州Region的執行個體Region ID為cn-hangzhou

      預設值為ACS叢集所在Region,若與ACR執行個體同Region,此處留空即可。

      domains

      訪問ACR執行個體的網域名稱。

      訪問鏡像的網域名稱,多個以英文半形逗號(,)分隔。

      預設值為instanceID對應ACR執行個體的所有網域名稱(公網網域名稱registry.*,VPC網域名稱registry-vpc.*,內網網域名稱registry-internal.*)。

      assumeRoleARN

      (可選)配置跨帳號拉取鏡像步驟4中擷取的鏡像倉庫所有者RAM角色ARN,非跨帳號拉取留空即可。

      樣本:acs:ram::123456789012****:test-rrsa-acr

      預設值為空白。

      expireDuration

      (可選)跨帳號情境下臨時憑證的有效時間。非跨帳號拉取留空即可。

      重要

      expireDuration的值應不大於配置跨帳號拉取鏡像步驟4中設定的鏡像倉庫所有者角色最大會話時間

      預設值為3600

      rrsaRoleARN

      (可選)配置跨帳號拉取鏡像步驟3中擷取的ACS叢集RAM角色ARN,非跨帳號拉取留空即可。

      樣本:acs:ram::987654321012****:demo-role-for-rrsa

      預設值為空白。

      rrsaOIDCProviderRoleARN

      (可選)配置跨帳號拉取鏡像步驟2中擷取的ACS叢集RRSA OIDC供應商ARN,非跨帳號拉取留空即可。

      樣本:acs:ram::987654321012****:oidc-provider/ack-rrsa-abcd1234****

      預設值為空白。

    2. 填寫其他配置項。

      配置項鍵

      配置項鍵說明

      配置項值

      是否開啟RRSA

      勾選後即可開啟RRSA(需完成RRSA相關配置)。

      預設不勾選。配置RRSA相關配置項並勾選後,能夠跨帳號拉取ACR鏡像。

      watchNamespace

      期望能免密拉取鏡像的Namespace。

      預設值為default。當取值為all時,表示期望所有Namespace均能免密拉取。如需配置多個Namespace時,以英文半形逗號(,)分隔。

      說明

      推薦配置生效Namespace為您的業務Namespace,盡量避免配置all或者叢集系統組件相關Namespace,使叢集系統組件鏡像無法拉取。

      serviceAccount

      使免密組件作用於指定的服務帳號。

      預設值為default

      說明

      如果需要配置多個,請以英文半形逗號(,)分隔。如果設定為(*),表示支援指定命名空間下的所有ServiceAccount。

      expiringThreshold

      本機快取憑證到期閾值。

      預設值為15m

      說明

      建議使用15m,即在緩衝到期15分鐘前進行憑證更新。

      notifyEmail

      由免密組件產生的保密字典中的Email標記。

      預設值為xxx@aliyun.com

配置跨帳號拉取鏡像

使用RRSA進行跨帳號拉取

適用於服務賬戶的RAM角色(RAM Roles for Service Accounts,簡稱RRSA)功能可以實現ACS叢集內Pod維度許可權隔離。通過為ACS叢集開啟RRSA功能,並將授權角色的ARN分發給不同的鏡像倉庫所有者,免密組件可以實現跨帳號拉取ACR鏡像。

RRSA功能目前僅支援拉取ACR企業版執行個體(基礎版、標準版、進階版)的鏡像。

重要
  • 當開啟RRSA功能後,由組件產生的憑證將不支援個人版非公開鏡像拉取,同時也不支援本文中提到的其他的鑒權方式。

  • 啟用免密外掛程式的RRSA功能首先需要啟用RRSA,再進行免密外掛程式RRSA的相關配置。若操作順序顛倒,在配置完成後,則需要刪除免密外掛程式的Pod,RRSA功能才會生效。

  1. 啟用ACS叢集的RRSA功能。具體操作,請參見啟用RRSA功能

  2. ACS將自動為叢集建立RRSA OIDC供應商,在叢集控制台的基本資料 > 安全與審計 > RRSA OIDC查看供應商URL供應商ARN

    image

  3. 叢集所有者使用OIDC供應商配置RAM角色,並授予角色扮演許可權。

    1. 使用OIDC供應商建立RAM角色為已存在的RAM角色關聯OIDC供應商,以便免密組件使用該角色許可權訪問OpenAPI。

      使用OIDC供應商建立RAM角色

      1. 使用阿里雲帳號登入RAM控制台

      2. 在左側導覽列,選擇身份管理 > 角色,然後在角色頁面,單擊建立角色

      3. 建立角色面板,選擇可信實體類型為身份供應商,然後單擊下一步

      4. 配置角色頁面,配置如下角色資訊後,單擊完成

      5. 本樣本配置如下。

        配置項

        描述

        角色名稱

        demo-role-for-rrsa。

        備忘

        選填有關該角色的備忘資訊。

        身份供應商類型

        OIDC

        選擇身份供應商

        acs-rrsa-<cluster_id>。其中,<cluster_id>為您的叢集ID。

        限制條件

        • oidc:iss:保持預設。

        • oidc:aud:選擇sts.aliyuncs.com

        • oidc:sub:條件判定方式選擇StringEquals,值的格式為system:serviceaccount:<namespace>:<serviceAccountName>

          • <namespace>:應用所在的命名空間。

          • <serviceAccountName>:服務賬戶名稱。

          根據免密外掛程式要求,此處必須填入system:serviceaccount:kube-system:aliyun-acr-credential-helper

      為已存在的RAM角色關聯OIDC供應商

      1. 使用阿里雲帳號登入RAM控制台

      2. 在左側導覽列,選擇身份管理 > 角色,單擊目標RAM角色名稱

      3. 信任策略頁簽,單擊編輯信任策略詳細操作,請參見修改RAM角色的信任策略

      4. 在信任策略中Statement條目列表新增內容樣本如下。

        {
            "Action": "sts:AssumeRole",
            "Condition": {
                "StringEquals": {
                    "oidc:aud": "sts.aliyuncs.com",
                    "oidc:iss": "<oidc_issuer_url>",
                    "oidc:sub": "system:serviceaccount:kube-system:aliyun-acr-credential-helper"
                }
            },
            "Effect": "Allow",
            "Principal": {
                "Federated": [
                    "<oidc_provider_arn>"
                ]
            }
        }
        重要

        其中<oidc_issuer_url><oidc_provider_arn>分別需要替換為步驟2中擷取的供應商URL供應商ARN

    2. 為該RAM角色配置AliyunSTSAssumeRoleAccess權限原則,以便免密組件進行角色扮演。具體操作,請參見為RAM角色授權

    3. 在角色基本資料 > ARN查看該RAM角色的ARN

      image

  4. 鏡像倉庫所有者配置RAM角色,信任叢集所有者的RAM角色,並授予鏡像拉取許可權。

    1. 建立RAM角色。詳細操作,請參見建立可信實體為阿里雲帳號的RAM角色

    2. 信任ACS叢集RAM角色,允許其扮演倉庫所有者。詳細操作,請參見修改RAM角色的信任策略。策略文檔樣本如下:

      {
          "Statement": [
              {
                  "Action": "sts:AssumeRole",
                  "Effect": "Allow",
                  "Principal": {
                      "RAM": [
                          "<acs_role_arn>"
                      ]
                  }
              }
          ],
          "Version": "1"
      }
      重要

      其中<acs_role_arn>需要替換為步驟3中擷取的ACS叢集RAM角色ARN

    3. 為該RAM角色配置鏡像拉取許可權

      1. 通過指令碼編輯模式建立自訂權限原則,策略文檔內容如下,推薦策略名稱AliyunACRBasicAccess。具體操作,請參見建立自訂權限原則

        {
            "Version": "1",
            "Statement": [
                {
                    "Action": [
                        "cr:GetAuthorizationToken",
                        "cr:ListInstanceEndpoint",
                        "cr:PullRepository"
                    ],
                    "Resource": "*",
                    "Effect": "Allow"
                }
            ]
        }
      2. 為該RAM角色授予AliyunACRBasicAccess許可權。具體操作,請參見為RAM角色授權

    4. [可選] 可以為該RAM角色設定角色最大會話時間,有效範圍為3600秒到43200秒。如果設定角色最大會話時間,下文配置AcrInstanceInfo時也應當設定參數expireDuration

    5. 在角色基本資料 > ARN查看該RAM角色的ARN

      image

  5. 在免密組件配置中勾選是否開啟RRSA。並配置AcrInstanceInfo

    按照如下配置內容,修改AcrInstanceInfo

    配置項鍵

    配置項說明

    配置項值

    是否開啟RRSA

    勾選後即可開啟RRSA(需完成RRSA相關配置)。

    勾選

    rrsaRoleARN

    步驟3中擷取的ACS叢集RAM角色ARN

    <acs_role_arn>

    rrsaOIDCProviderRoleARN

    步驟2中擷取的ACS叢集RRSA OIDC供應商ARN

    oidc_provider_arn

    assumeRoleARN

    步驟4中擷取的鏡像倉庫所有者RAM角色ARN

    <acr_role_arn>

    expireDuration

    免密組件產生的臨時憑證的有效期間。

    重要

    expireDuration的值應不大於步驟4中設定的鏡像倉庫所有者角色最大會話時間

    預設為3600。取值範圍為[3600, 43200],單位為秒。

相關文檔