分享方式:


向 Azure Container Registry 進行驗證 | Microsoft Docs

有數種方式可以使用 Azure 容器登錄進行驗證,每個方式都適用於一或多個登錄使用案例。

建議的方式包括:

  • 透過個別登入直接向登錄進行驗證
  • 應用程式和容器協調器可以使用 Microsoft Entra 服務主體來執行自動 (或「遠端控制」) 驗證

如果您使用容器登錄搭配 Azure Kubernetes Service (AKS) 或其他 Kubernetes 叢集,請參閱從 Kubernetes 向 Azure Container Registry 進行驗證的案例

驗證選項

下表列出可用的驗證方法和常見案例。 如需詳細資訊,請參閱連結的內容。

方法 如何驗證 案例 Azure 角色型存取控制 (Azure RBAC) 限制
個別 AD 身分識別  在 Azure CLI 中的 az acr login

Connect-AzContainerRegistry 在 Azure PowerShell 中
開發人員、測試人員的互動式推送/提取 AD 權杖必須每 3 小時更新一次
AD 服務主體  docker login

在 Azure CLI 中的 az acr login

Connect-AzContainerRegistry 在 Azure PowerShell 中

API 或工具中的登錄登入設定

Kubernetes 提取秘密   
從 CI/CD 管線自動推送

自動提取至 Azure 或外部服務
SP 密碼預設到期日為 1 年
適用於 Azure 資源的受控識別  docker login

 在 Azure CLI 中的 az acr login

Connect-AzContainerRegistry 在 Azure PowerShell 中
從 Azure CI/CD 管線自動推送

自動提取至 Azure 服務

只能從支援適用於 Azure 資源的受控識別的精選 Azure 服務使用
AKS 叢集受控識別  在 AKS 叢集建立或更新時連結登錄 自動提取至相同或不同訂用帳戶中的 AKS 叢集 否,僅限提取存取 僅適用 AKS 叢集

無法用於跨租用戶驗證
AKS 叢集服務主體  在 AKS 叢集建立或更新時啟用 從另一個 AD 租用戶中的登錄自動提取至 AKS 叢集 否,僅限提取存取 僅適用於 AKS 叢集
管理使用者  docker login  個別開發人員或測試人員的互動式推送/提取

透過入口網站將映像從登錄部署至 Azure App Service 或 Azure 容器執行個體
否,一律為提取和推送存取 每個登錄一個帳戶,不建議用於多個使用者
存放庫範圍的存取權杖  docker login

在 Azure CLI 中的 az acr login

Connect-AzContainerRegistry 在 Azure PowerShell 中

Kubernetes 提取秘密 
由個別開發人員或測試人員對存放庫進行互動式推送/提取

由個別系統或外部裝置自動從存放庫提取
目前未與 AD 身分識別整合

使用 Microsoft Entra 識別碼進行個別登入

直接使用您的登錄時 (例如將映像提取至開發工作站,以及將映像從開發工作站推送至您所建立的登錄),請使用您的個別 Azure 身分識別進行驗證。 使用 az login 登入 Azure CLI,然後執行 az acr login 命令:

az login
az acr login --name <acrName>

當您使用 az acr login 來進行登入時,CLI 會使用您執行 az login 時所建立的權杖,以順暢地向登錄驗證您的工作階段。 若要完成驗證流程,必須在您的環境中安裝並執行 Docker CLI 和 Docker 精靈。 az acr login 會使用 Docker 用戶端在 docker.config 檔案中設定 Microsoft Entra 權杖。 在您以此方式登入之後,系統會快取您的認證,而您工作階段中的後續 docker 命令不會要求提供使用者名稱或密碼。

提示

當您想要將 Docker 映像以外的成品 (例如 OCI 成品) 推送或提取至登錄時,也請使用 az acr login 來驗證個別身分識別。

為了進行登錄存取,az acr login 所使用的權杖有效期為 3 小時,所以我們建議您在執行 docker 命令前,一律先登入登錄。 如果您的權杖過期,您可以再次使用 az acr login 命令進行重新驗證來重新整理該權杖。

搭配使用 az acr login 與 Azure 身分識別可提供 Azure 角色型存取控制 (Azure RBAC)。 在某些案例中,您可以在 Microsoft Entra ID 中使用自己的個別身分識別登入登錄,或設定具有特定 Azure 角色和權限的其他 Azure 使用者。 在跨服務案例中,或是要處理您不想管理個別存取權的工作群組或開發工作流程的需求時,也可以使用 Azure 資源的受控識別進行登入。

az acr login with --expose-token

在某些情況下,當 Docker 精靈未在您的環境中執行時,您必須使用 az acr login 進行驗證。 例如,您可能需要在 Azure Cloud Shell 的指令碼中執行 az acr login,其中提供 Docker CLI,但不會執行 Docker 精靈。

在此情況下,請先使用 --expose-token 參數執行 az acr login。 此選項會公開存取權杖,而不會透過 Docker CLI 登入。

az acr login --name <acrName> --expose-token

輸出會顯示存取權杖 (以下為縮寫):

{
  "accessToken": "eyJhbGciOiJSUzI1NiIs[...]24V7wA",
  "loginServer": "myregistry.azurecr.io"
}

針對登錄驗證,建議您將權杖認證儲存在安全之處,並依照建議的做法來管理 Docker 登入認證。 例如,將權杖值儲存在環境變數中:

TOKEN=$(az acr login --name <acrName> --expose-token --output tsv --query accessToken)

然後,執行 docker login,傳入 00000000-0000-0000-0000-000000000000 作為使用者名稱,並以存取權杖作為密碼:

docker login myregistry.azurecr.io --username 00000000-0000-0000-0000-000000000000 --password-stdin <<< $TOKEN

同樣地,您可以使用 az acr login 所傳回的權杖搭配 helm registry login 命令,向登錄進行驗證:

echo $TOKEN | helm registry login myregistry.azurecr.io \
            --username 00000000-0000-0000-0000-000000000000 \
            --password-stdin

服務主體

如果您將服務主體指派給登錄,應用程式或服務便可以使用它來進行遠端控制驗證。 服務主體允許對登錄進行 Azure 角色型存取控制 (Azure RBAC),而您可以將多個服務主體指派給登錄。 多個服務主體可讓您針對不同的應用程式定義不同的存取。

ACR 驗證權杖會在登入 ACR 時建立,並在後續的作業重新整理。 該權杖的存留時間為 3 小時。

容器登錄的可用角色包括:

  • AcrPull:提取

  • AcrPush:提取和推送

  • 擁有者:提取、推送,以及指派角色給其他使用者

如需角色的完整清單,請參閱 Azure Container Registry 角色和權限

若要讓 CLI 指令碼建立服務主體以便向 Azure Container Registry 進行驗證,或需要更多指引,請參閱使用服務主體進行 Azure Container Registry 驗證

管理帳戶

每個容器登錄都包含一個管理使用者帳戶,且預設為停用。 您可以在 Azure 入口網站中,或藉由使用 Azure CLI、Azure PowerShell 或其他 Azure 工具,來啟用此管理使用者並管理其認證。 管理員帳戶具有登錄的完整權限。

目前在某些情況下,必須要有管理員帳戶,才能將映像從容器登錄部署至特定 Azure 服務。 例如,當您使用 Azure 入口網站將容器映像直接從登錄部署至 Azure 容器執行個體適用於容器的 Azure Web Apps 時,必須要有管理員帳戶。

重要

管理帳戶是專為讓單一使用者存取登錄而設計,主要用於測試。 不建議將管理帳戶認證與其他使用者共用。 所有使用管理帳戶進行驗證的使用者會顯示為單一使用者,此使用者具備登錄的推送和提取存取權。 變更或停用此帳戶時,會將所有使用其認證之使用者的登錄存取權都停用。 針對遠端控制案例的使用者和服務主體,建議使用個人身分識別。

管理帳戶會隨附兩個密碼,這兩個密碼都可以重新產生。 為管理員帳戶建立的新密碼可以立即使用。 為管理員帳戶重新產生新密碼,需要 60 秒進行複寫和提供使用。 兩個密碼可讓您在重新產生其中一個密碼時,使用另一個密碼維護登錄的連線。 如果已啟用管理帳戶,即可在系統提示時將使用者名稱和其中一個密碼傳遞給 docker login 命令,向登錄進行基本驗證。 例如:

docker login myregistry.azurecr.io

如需管理登入認證的建議做法,請參閱 docker login 命令參考。

若要為現有的登錄啟用管理使用者,您可以在 Azure CLI 中使用 az acr update 命令的 --admin-enabled 參數:

az acr update -n <acrName> --admin-enabled true

您可以在 Azure 入口網站中啟用管理使用者,方法是瀏覽至您的登錄,選取 [設定]底下的 [存取金鑰],然後選取 [管理使用者]底下的 [啟用]

Azure 入口網站中的啟用管理使用者 UI

使用替代容器工具登入,而不是 Docker

在某些情況下,您必須使用替代的容器工具,例如 podman ,而不是常見的容器工具 docker。 例如:RHEL 8 和 9 不再提供 Docker,因此您必須切換容器工具。

az acr login 命令的預設容器工具會設定為 docker。 如果您未設定預設容器工具,且您的環境中缺少 docker 命令,將會彈出下列錯誤:

az acr login --name <acrName>
2024-03-29 07:30:10.014426 An error occurred: DOCKER_COMMAND_ERROR
Please verify if Docker client is installed and running.

若要變更 az acr login 命令使用的預設容器工具,您可以設定環境變數 DOCKER_COMMAND。 例如:

DOCKER_COMMAND=podman \
az acr login --name <acrName>

注意

您必須安裝並設定 Azure CLI 2.59.0 版或更新版本,才能使用此功能。 執行 az --version 以尋找版本。 如果您需要安裝或升級,請參閱安裝 Azure CLI

下一步