Share via


使用受控識別提取 Azure 容器應用程式映像

您可以使用受控識別從 Microsoft Azure Container Registry 中的私人存放庫提取映像以進行驗證,以避免使用系統管理認證。 您可以使用系統指派或使用者指派的受控識別,向 Azure Container Registry 進行驗證。

使用系統指派的受控識別,身分識別會由 Azure Container Apps 建立和管理。 身分識別會系結至您的容器應用程式,並在刪除應用程式時刪除。 使用使用者指派的受控識別,您可以建立和管理 Azure Container Apps 外部的身分識別。 它可以指派給多個 Azure 資源,包括 Azure Container Apps。

每當容器啟動時,容器應用程式就會檢查新版本的映像。 在 Docker 或 Kubernetes 術語中,Container Apps 會將每個容器的映射提取原則設定為 always

本文說明如何使用 Azure 入口網站,將容器應用程式設定為使用使用者指派和系統指派的受控識別,從私人 Azure Container Registry 存放庫提取映像。

使用者指派的受控識別

下列步驟說明將容器應用程式設定為使用使用者指派的受控識別,從私人 Azure Container Registry 存放庫提取映像的程式。

  1. 建立具有公用映像的容器應用程式。
  2. 將使用者指派的受控識別新增至容器應用程式。
  3. 使用私人映像和使用者指派的受控識別來建立容器應用程式修訂。

必要條件

  • 具有有效訂用帳戶的 Azure 帳戶。

  • 私人 Azure Container Registry,其中包含您想要提取的映像。

  • 您的 Azure Container Registry 必須允許 ARM 物件令牌進行驗證,才能使用受控識別來提取映像。 使用下列命令來檢查是否允許 ARM 令牌存取您的 ACR:

    az acr config authentication-as-arm show -r <REGISTRY>
    

    如果不允許 ARM 令牌,您可以使用下列命令來允許它們:

    az acr config authentication-as-arm update -r <REGISTRY> --status enabled
    
  • 建立使用者指派的受控識別。 如需詳細資訊,請參閱 建立使用者指派的受控識別

建立容器應用程式

使用下列步驟建立具有預設快速入門映像的容器應用程式。

  1. 流覽至入口網站 首頁

  2. 在頂端搜尋列中搜尋 容器應用程式

  3. 在搜尋結果中選取 [容器應用程式 ]。

  4. 選取建立按鈕。

  5. 在 [ 基本] 索引 標籤中,執行下列動作。

    設定 動作
    訂用帳戶 選取 Azure 訂閱。
    資源群組 選取現有的資源群組或建立新群組。
    容器應用程式名稱 輸入容器應用程式名稱。
    地點 選取位置。
    建立容器應用程式環境 建立新的或選取現有的環境。
  6. 選取 [建立容器應用程式] 頁面底部的 [檢閱 + 建立] 按鈕。

  7. 選取 [建立容器應用程式] 視窗底部的 [建立] 按鈕。

允許容器應用程式部署完成幾分鐘的時間。 當部署完成時,請選取 [前往資源]

新增使用者指派的受控識別

  1. 從左側功能表中選取 [身分 識別]。
  2. 選取 [ 使用者指派] 索引標籤
  3. 選取 [ 新增使用者指派的受控識別] 按鈕。
  4. 選取您的訂用帳戶。
  5. 選取您建立的身分識別。
  6. 選取新增

建立容器應用程式修訂

使用私人映像和系統指派的受控識別來建立容器應用程式修訂。

  1. 從左側功能表中選取 [ 修訂管理 ]。

  2. 選取 [ 建立新修訂]。

  3. 容器映像數據表中選取容器映像

  4. 在 [ 編輯容器 ] 對話框中輸入資訊。

    欄位 動作
    名稱 輸入容器的名稱。
    影像來源 選取 [Azure Container Registry]。
    驗證 選取 [受控識別]。
    身分識別 從下拉功能表中選取您建立的身分識別。
    登錄 從下拉功能表中選取您想要使用的登錄。
    映像 輸入您想要使用的影像名稱。
    影像標籤 輸入您想要提取之影像的名稱和標籤。

    Screen shot of the Edit a container dialog entering user assigned managed identity.

    注意

    如果您的 Azure Container Registry 登錄上未啟用系統管理認證,您會看到顯示警告訊息,您必須手動輸入映像名稱和標記資訊。

  5. 選取 [儲存]。

  6. 從 [建立並部署新的修訂] 頁面中選取 [建立]。

將會建立並部署新的修訂。 入口網站會自動嘗試將角色新增 acrpull 至使用者指派的受控識別。 如果未新增角色,您可以手動新增角色。

您可以從容器應用程式頁面的 [身分識別] 窗格檢查身分識別,以確認角色是否已新增。

  1. 從左側功能表中選取 [身分 識別]。
  2. 選取 [ 使用者指派] 索引標籤
  3. 選取使用者指派的受控識別。
  4. 從受控識別資源頁面上的功能表中選取 [Azure 角色指派 ]。
  5. 確認 acrpull 角色已指派給使用者指派的受控識別。

使用私人映像建立容器應用程式

如果您不想從使用公用映像建立容器應用程式開始,您也可以執行下列動作。

  1. 建立使用者指派的受控識別。
  2. acrpull 角色新增至使用者指派的受控識別。
  3. 建立具有私人映像和使用者指派受控識別的容器應用程式。

這個方法在基礎結構即程序代碼 (IaC) 案例中很常見。

清除資源

如果您不打算繼續使用此應用程式,您可以移除資源群組來刪除 Azure Container Apps 實例和所有相關聯的服務。

警告

刪除資源群組將會刪除群組中的所有資源。 如果您有群組中的其他資源,也會刪除它們。 如果您想要保留資源,可以刪除容器應用程式實例和容器應用程式環境。

  1. 從 [ 概觀] 區段選取您的資源群組。
  2. 選取資源群組 [概觀] 頂端的 [刪除資源群組] 按鈕。
  3. 在確認對話框中輸入資源組名。
  4. 選取刪除
    刪除資源群組的流程可能需要幾分鐘的時間才能完成。

系統指派的受控識別

在 Azure 入口網站 中設定系統指派的受控識別的方法,與設定使用者指派的受控識別相同。 唯一的差別在於,您不需要建立使用者指派的受控識別。 相反地,當您建立容器應用程式時,會建立系統指派的受控識別。

在 Azure 入口網站 中設定系統指派受控識別的方法如下:

  1. 建立具有公用映像的容器應用程式。
  2. 使用私人映像和系統指派的受控識別來建立容器應用程式修訂。

必要條件

建立容器應用程式

請遵循下列步驟來建立具有預設快速入門映像的容器應用程式。

  1. 流覽至入口網站 首頁

  2. 在頂端搜尋列中搜尋 容器應用程式

  3. 在搜尋結果中選取 [容器應用程式 ]。

  4. 選取建立按鈕。

  5. 在 [ 基本] 索引 標籤中,執行下列動作。

    設定 動作
    訂用帳戶 選取 Azure 訂閱。
    資源群組 選取現有的資源群組或建立新群組。
    容器應用程式名稱 輸入容器應用程式名稱。
    地點 選取位置。
    建立容器應用程式環境 建立新的或選取現有的環境。
  6. 選取 [建立容器應用程式] 頁面底部的 [檢閱 + 建立] 按鈕。

  7. 選取 [建立容器應用程式] 頁面底部的 [建立] 按鈕。

允許容器應用程式部署完成幾分鐘的時間。 當部署完成時,請選取 [前往資源]

編輯和部署修訂

編輯容器以使用私人 Azure Container Registry 中的映像,並將驗證設定為使用系統指派的身分識別。

  1. 左側功能表的 [容器]。

  2. 選取 [編輯並部署]

  3. 從清單中選取 simple-hello-world-container 容器

    設定 動作
    名稱 輸入容器應用程式名稱。
    影像來源 選取 [Azure Container Registry]。
    驗證 選取 [受控身分識別]
    身分識別 選取 [ 系統指派]。
    登錄 輸入登錄名稱。
    映像 輸入映像名稱。
    影像標籤 輸入標籤。

    Screen shot Edit a container with system-assigned managed identity.

    注意

    如果您的 Azure Container Registry 登錄上未啟用系統管理認證,您會看到顯示警告訊息,您必須手動輸入映像名稱和標記資訊。

  4. 選取頁面底部的 [ 儲存 ]。

  5. 選取 [建立並部署新修訂] 頁面底部的 [建立]

  6. 幾分鐘后,選取 [修訂管理] 頁面上的 [重新整理],以查看新的修訂。

將會建立並部署新的修訂。 入口網站會自動嘗試將角色新增 acrpull 至系統指派的受控識別。 如果未新增角色,您可以手動新增角色。

您可以在容器應用程式頁面的 [身分識別] 窗格中檢查身分識別,以確認已新增角色。

  1. 從左側功能表中選取 [身分 識別]。
  2. 選取 [ 系統指派] 索引標籤
  3. 選取 [Azure 角色指派]。
  4. 確認 acrpull 角色已指派給系統指派的受控識別。

清除資源

如果您不打算繼續使用此應用程式,您可以移除資源群組來刪除 Azure Container Apps 實例和所有相關聯的服務。

警告

刪除資源群組將會刪除群組中的所有資源。 如果您有群組中的其他資源,也會刪除它們。 如果您想要保留資源,可以刪除容器應用程式實例和容器應用程式環境。

  1. 從 [ 概觀] 區段選取您的資源群組。
  2. 選取資源群組 [概觀] 頂端的 [刪除資源群組] 按鈕。
  3. 在確認對話框中輸入資源組名。
  4. 選取刪除
    刪除資源群組的流程可能需要幾分鐘的時間才能完成。

本文說明如何使用 Azure CLI 和 Azure PowerShell,將容器應用程式設定為使用受控識別從私人 Azure Container Registry 存放庫提取映射。

必要條件

必要條件 描述
Azure 帳戶 具有有效訂用帳戶的 Azure 帳戶。 如果您沒有帳戶,您可以 免費建立一個。
Azure CLI 如果使用 Azure CLI, 請在本機電腦上安裝 Azure CLI
Azure PowerShell 如果使用PowerShell, 請在本機電腦上安裝 Azure PowerShell 。 執行 命令 Install-Module -Name Az.App,確定已安裝最新版本的 Az.App 模組。
Azure Container Registry 私人 Azure Container Registry,其中包含您想要提取的映像。 快速入門:使用 Azure CLI 建立私人容器登錄或 快速入門:使用 Azure PowerShell 建立私人容器登錄

設定

首先,從 CLI 或 PowerShell 登入 Azure。 執行下列命令,並遵循提示來完成驗證程式。

az login

安裝適用於 CLI 的 Azure 容器應用程式延伸模組。

az extension add --name containerapp --upgrade

現在已安裝目前的擴充功能或模組, Microsoft.App 如果您之前尚未註冊命名空間和提供者, Microsoft.OperationalInsights 請註冊命名空間和提供者。

az provider register --namespace Microsoft.App
az provider register --namespace Microsoft.OperationalInsights

接下來,設定下列環境變數。 將 <PLACEHOLDERS> 取代為您自己的值。

RESOURCE_GROUP="<YOUR_RESOURCE_GROUP_NAME>"
LOCATION="<YOUR_LOCATION>"
CONTAINERAPPS_ENVIRONMENT="<YOUR_ENVIRONMENT_NAME>"
REGISTRY_NAME="<YOUR_REGISTRY_NAME>"
CONTAINERAPP_NAME="<YOUR_CONTAINERAPP_NAME>"
IMAGE_NAME="<YOUR_IMAGE_NAME>"

如果您已經有資源群組,請略過此步驟。 否則,請建立資源群組。

az group create \
  --name $RESOURCE_GROUP \
  --location $LOCATION

建立容器應用程式環境

如果環境不存在,請執行下列命令:

若要建立環境,請執行下列命令:

az containerapp env create \
  --name $CONTAINERAPPS_ENVIRONMENT \
  --resource-group $RESOURCE_GROUP \
  --location $LOCATION

繼續進行下一節,以設定使用者指派的受控識別,或跳至 系統指派的受控識別 區段。

使用者指派的受控識別

請遵循此程式來設定使用者指派的受控識別:

  1. 建立使用者指派的受控識別。
  2. 如果您使用PowerShell,請將 acrpull 登錄的角色指派給受控識別。 Azure CLI 會自動進行此指派。
  3. 從使用使用者指派的受控識別驗證的私人登錄建立具有映像的容器應用程式。

建立使用者指派的受控識別

建立使用者指派的受控識別。 以 <受控識別的名稱取代 PLACEHOLDERS>

IDENTITY="<YOUR_IDENTITY_NAME>"
az identity create \
  --name $IDENTITY \
  --resource-group $RESOURCE_GROUP

取得身分識別的資源標識碼。

IDENTITY_ID=`az identity show \
  --name $IDENTITY \
  --resource-group $RESOURCE_GROUP \
  --query id`

建立容器應用程式

從使用身分識別驗證的私人登錄建立您的容器應用程式。

複製身分識別的資源標識碼,以貼到 <下列命令中的IDENTITY_ID> 佔位元元中。 如果您的映像標籤不是 latest,請將 'latest' 取代為您的標記。

echo $IDENTITY_ID
az containerapp create \
  --name $CONTAINERAPP_NAME \
  --resource-group $RESOURCE_GROUP \
  --environment $CONTAINERAPPS_ENVIRONMENT \
  --user-assigned <IDENTITY_ID> \
  --registry-identity <IDENTITY_ID> \
  --registry-server "$REGISTRY_NAME.azurecr.io" \
  --image "$REGISTRY_NAME.azurecr.io/$IMAGE_NAME:latest"

清理

警告

下列命令會刪除指定的資源群組及其內含的所有資源。 如果本快速入門範圍以外的資源存在於指定的資源群組中,也會刪除它們。

az group delete --name $RESOURCE_GROUP

系統指派的受控識別

若要設定系統指派的身分識別,您必須:

  1. 建立具有公用映像的容器應用程式。
  2. 將系統指派的受控識別指派給容器應用程式。
  3. 使用私人映像更新容器應用程式。

建立容器應用程式

建立具有公用映像的容器。

az containerapp create \
  --name $CONTAINERAPP_NAME \
  --resource-group $RESOURCE_GROUP \
  --environment $CONTAINERAPPS_ENVIRONMENT \
  --image mcr.microsoft.com/k8se/quickstart:latest \
  --target-port 80 \
  --ingress external

更新容器應用程式

使用私人容器登錄中的映像更新容器應用程式,並新增系統指派的身分識別來驗證 Azure Container Registry 提取。 您也可以包含容器應用程式所需的其他設定,例如輸入、調整和 Dapr 設定。

設定登錄伺服器,並在容器應用程式中開啟系統指派的受控識別。

az containerapp registry set \
  --name $CONTAINERAPP_NAME \
  --resource-group $RESOURCE_GROUP \
  --identity system \
  --server "$REGISTRY_NAME.azurecr.io"
az containerapp update \
  --name $CONTAINERAPP_NAME \
  --resource-group $RESOURCE_GROUP \
  --image "$REGISTRY_NAME.azurecr.io/$IMAGE_NAME:latest"

清理

警告

下列命令會刪除指定的資源群組及其內含的所有資源。 如果本快速入門範圍以外的資源存在於指定的資源群組中,也會刪除它們。

az group delete --name $RESOURCE_GROUP

下一步