有數種方式可以使用 Azure 容器登錄進行驗證,每個方式都適用於一或多個登錄使用案例。
建議的方式包括:
如果您使用容器登錄搭配 Azure Kubernetes Service (AKS) 或其他 Kubernetes 叢集,請參閱 從 Kubernetes 向 Azure Container Registry 進行驗證的案例。
驗證選項
下表列出可用的驗證方法和常見案例。 如需詳細資訊,請參閱連結的內容。
方法 | 如何驗證 | 案例 | Microsoft Entra 角色型存取控制 (RBAC) | 限制 |
---|---|---|---|---|
個別Microsoft Entra 身分識別 | 在 Azure CLI 中的 az acr login Connect-AzContainerRegistry 在 Azure PowerShell 中 |
開發人員、測試人員的互動式推送/提取 | 是 | Microsoft Entra 令牌必須每隔 3 小時更新一次 |
Microsoft Entra 服務主體 | docker login 在 Azure CLI 中的 az acr login Connect-AzContainerRegistry 在 Azure PowerShell 中API 或工具中的登錄登入設定 Kubernetes 拉取密鍵 |
從 CI/CD 管線自動推送 自動提取至 Azure 或外部服務 |
是 | SP 密碼預設到期日為 1 年 |
Microsoft Entra 為 Azure 資源提供的受管理的身份識別 | docker login 在 Azure CLI 中的 az acr login Connect-AzContainerRegistry 在 Azure PowerShell 中 |
從 Azure CI/CD 管線自動推送 自動提取至 Azure 服務 如需受控識別角色指派案例的清單,請參閱 ACR 角色指派案例。 |
是的 Microsoft Entra RBAC 角色指派與 ACR 內建角色 Microsoft Entra 屬性型存取控制(ABAC)適用於 基於 Microsoft Entra 的存放庫權限 |
僅限從支援 Azure 資源受控識別的特定 Azure 服務中使用 |
AKS 叢集節點 kubelet 受控識別 | 在 AKS 叢集建立或更新時連結登錄 | 無人值守提取至相同或不同訂閱中的 AKS 叢集節點 | 否,僅限提取存取 | 僅適用 AKS 叢集 無法用於跨租用戶驗證 |
AKS 叢集服務主體 | 在 AKS 叢集建立或更新時啟用 | 從另一個 Entra 租戶中的登錄庫,自動且無需人工干預地提取至 AKS 叢集 | 否,僅限提取存取 | 僅適用於 AKS 叢集 |
系統管理員使用者 | docker login |
個別開發人員或測試人員的互動式推送/提取 透過入口網站將映像從登錄部署至 Azure App Service 或 Azure 容器執行個體 |
否,一律為提取和推送存取 | 每個登錄一個帳戶,不建議用於多個使用者 |
非微軟 Entra 代幣為基礎的存放庫許可權 | docker login 在 Azure CLI 中的 az acr login Connect-AzContainerRegistry 在 Azure PowerShell 中Kubernetes 拉取密鍵 |
由個別開發人員或測試人員對存放庫進行互動式推送/提取 由個別系統或外部裝置自動從存放庫提取 |
令牌型存放庫許可權 不支援 Microsoft Entra RBAC 角色指派。 如需 Microsoft Entra 為基礎的存放庫許可權,請參閱 Microsoft Entra 屬性型存取控制(ABAC),以取得 Microsoft Entra 為基礎的存放庫許可權 。 |
目前未與 Microsoft Entra 身分識別整合 |
使用 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
命令不需要使用者名稱或密碼。
為了訪問註冊表,az acr login
所使用的令牌有效期為 3 小時,因此建議您執行指令前,請先登入註冊表。 如果您的權杖過期,您可以再次使用 az acr login
命令進行重新驗證來重新整理該權杖。
搭配 Azure 身分識別使用 az acr login
可提供 Azure 角色型存取控制 (RBAC) 。 在某些情況下,您可能會想要以自己的個別身分識別登入 Microsoft Entra ID 的註冊表,或設定其他具有特定角色的 Azure 使用者。 請參閱 Azure Container Registry Entra 許可權和角色概觀。 針對跨服務案例,或處理您不想管理個別存取的工作組或開發工作流程的需求,您也可以使用 Azure 資源的受控識別登入。
az acr 使用 --expose-token 進行登入
在某些情況下,當 Docker 精靈未在您的環境中執行時,您必須使用 az acr login
進行驗證。 例如,您可能需要在 Azure Cloud Shell 的指令碼中執行 az acr login
,其中提供 Docker CLI,但不會執行 Docker 精靈。
在此情況下,請先使用 az acr login
參數執行 --expose-token
。 此選項會公開存取權杖,而不會透過 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 角色型存取控制 (RBAC) 到儲存庫,而且您可以指派多個服務主詞到同一個儲存庫。 多個服務主體可讓您針對不同的應用程式定義不同的存取。
ACR 驗證權杖會在登入 ACR 時建立,並在後續的作業重新整理。 該權杖的存留時間為 3 小時。
如需可用角色的清單,請參閱 Azure Container Registry Entra 許可權和角色概觀。
若要讓 CLI 腳本建立服務主體以使用 Azure Container Registry 進行驗證,以及更多指引,請參閱 使用服務主體進行 Azure Container Registry 驗證。
管理帳戶
每個容器登錄都包含一個管理使用者帳戶,且預設為停用。 您可以在 Azure 入口網站中,或藉由使用 Azure CLI、Azure PowerShell 或其他 Azure 工具,來啟用此管理使用者並管理其認證。 管理員帳戶具有登錄的完整權限。
目前在某些情況下,必須要有管理員帳戶,才能將映像從容器登錄部署至特定 Azure 服務。 例如,當您使用 Azure 入口網站將容器映射直接從登錄部署至 Azure 容器實例 或 Azure Web Apps for Containers 時,需要系統管理員帳戶。
重要
管理帳戶是專為讓單一使用者存取登錄而設計,主要用於測試。 不建議在多個用戶之間共享系統管理員帳戶認證。 所有使用管理帳戶進行驗證的使用者會顯示為單一使用者,此使用者具備登錄的推送和提取存取權。 變更或停用此帳戶時,會將所有使用其認證之使用者的登錄存取權都停用。 針對遠端控制案例的使用者和服務主體,建議使用個人身分識別。
管理帳戶會隨附兩個密碼,這兩個密碼都可以重新產生。 為管理員帳戶建立的新密碼可以立即使用。 為管理員帳戶重新產生新密碼,需要 60 秒進行複寫和提供使用。 兩個密碼可讓您在重新產生其中一個密碼時,使用另一個密碼維護登錄的連線。 如果已啟用管理帳戶,即可在系統提示時將使用者名稱和其中一個密碼傳遞給 docker login
命令,向登錄進行基本驗證。 例如:
docker login myregistry.azurecr.io
如需管理登入認證的建議做法,請參閱 docker login 命令參考。
若要啟用現有登錄的系統管理員使用者,您可以在 Azure CLI 中使用 --admin-enabled
az acr update 命令的 參數:
az acr update -n <acrName> --admin-enabled true
您可以在 Azure 入口網站中啟用管理使用者,方法是瀏覽至您的登錄,選取 [設定]底下的 [存取金鑰],然後選取 [管理使用者]底下的 [啟用]。
使用替代容器工具登入,而不是 Docker
在某些情況下,您必須使用替代的容器工具,例如 podman
,而不是常見的容器工具 docker
。 例如: RHEL 8 和 9 不再提供 Docker,因此您必須切換容器工具。
docker
命令的預設容器工具會設定為 az acr login
。 如果您未設定預設容器工具,且您的環境中缺少 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。