管理 Azure 容器應用程式 中的機密

Azure 容器應用程式 允許你的應用程式安全地儲存敏感的設定值。 一旦祕密在應用程式層級定義,安全值即可供容器應用程式中的修訂版本使用。 此外,您還可以在級別規則內參考受保護的值。 如需有關將秘密用於 Dapr 的資訊,請參閱 Dapr 整合

  • 秘密的範圍定義在一個應用程式,排除應用程式的任何特定修訂。
  • 新的修訂不會透過新增、移除或變更秘密來產生。
  • 每個應用程式修訂版本都可以參考一或多個秘密。
  • 多個修訂可以參考相同的機密。

更新或刪除的秘密不會自動影響您應用程式中現有的修訂。 當秘密更新或刪除時,您可以使用下列兩種方式之一回應變更:

  1. 新增修訂版本。
  2. 重新啟動現有的修訂版本。

在刪除秘密之前,請先部署不再參考舊密碼的新修訂版本。 然後停用參考秘密的所有修訂。

定義秘密

祕密定義為一組名稱/值組。 每個秘密的值會直接指定,或作為 Azure Key Vault 中儲存的秘密的參考。

注意

避免直接在生產環境中指定秘密的值。 請改為使用儲存在 Azure Key Vault 中之祕密的參考,如 在 Container Apps 區段中儲存祕密值 所述。

在容器應用程式中儲存祕密值

以下內容用於透過入口網站或不同命令列選項定義秘密。

  1. 請進入你的容器應用程式,進入 Azure 入口網站

  2. 安全性 區塊中,選擇 秘密

  3. 選取新增

  4. 在「新增祕密」窗格上,輸入下列資訊:

    • 名稱:祕密名稱。
    • 類型:選取「容器應用程式祕密」。
    • :祕密的值。
  5. 選取新增

從 金鑰保存庫 參考秘密

當您設定一個秘密時,會建立一個連結至儲存在 Azure Key Vault 中的秘密。 容器應用程式會自動從 金鑰保存庫 取得秘密值,並將其作為秘密存在於你的容器應用程式中。

要參考 金鑰保存庫 的秘密,您必須先在您的容器應用程式中啟用管理身份,並授權該身份存取 金鑰保存庫 的秘密。

若在容器應用程式中啟用受控識別,請參閱受控識別

若要授與 金鑰保存庫 秘密的存取權,請將 Azure RBAC 角色 金鑰保存庫 祕密使用者授與受控識別。

  1. 請進入你的容器應用程式,進入 Azure 入口網站

  2. 安全性區塊中,選擇「身份」。

  3. 系統指派 標籤頁中,將 狀態 設定為 開啟

注意

您也可以使用使用者指派的受控識別,此身分識別可以跨多個資源重複使用,且與應用程式生命周期無關。 若要使用它,請選取 [使用者指派] 索引 標籤,然後選擇現有的身分識別。

  1. 選取 [ 儲存 ] 以啟用系統指派的受控識別。

  2. 彈出視窗確認您想啟用系統指派的管理身份,並以 Microsoft Entra ID 註冊您的容器應用程式。 選取 [是]

  3. 安全性 區塊中,選擇 秘密

  4. 選取新增

  5. 在「新增祕密」窗格上,輸入下列資訊:

    • 名稱:祕密名稱。
    • 類型:選擇 金鑰保存庫 參考
    • 金鑰保存庫 秘密網址:你的秘密在 金鑰保存庫 中的 URI。 此 URI 格式如下: https://<YOUR_KEY_VAULT_NAME>.vault.azure.net/secrets/<YOUR_SECRET_NAME>/<32_DIGIT_HEX_ID>
    • 身份:選取系統指派
  6. 選取新增

注意

如果你使用 UDR 與 Azure 防火牆 搭配使用,你需要將 AzureKeyVaultlogin.microsoft.com FQDN 加入防火牆的允許清單。 請參考 配置 UDR,Azure 防火牆 來決定你需要哪些額外的服務標籤。

金鑰保存庫 祕密 URI 和祕密輪替

金鑰保存庫 的秘密 URI 必須採用以下格式之一:

  • https://myvault.vault.azure.net/secrets/mysecret/ec96f02080254f109c51a1f14cdb1931:參考密鑰的特定版本。
  • https://myvault.vault.azure.net/secrets/mysecret:參考祕密的最新版本。

若未在 URI 中指定版本,則應用程式會使用金鑰保存庫中的現有最新版本。 當較新版本可用時,應用程式會在 30 分鐘內自動擷取最新版本。 任何在環境變數中參考該祕密的作用中修訂版本,都會自動重新啟動以擷取新值。

若要完整控制使用哪一個祕密版本,請在 URI 中指定版本。

在環境變數中引用祕密

在應用程式層級宣告祕密之後 (如定義祕密一節中所述),您可以在容器應用程式中建立新的修訂時,於環境變數中參考這些祕密。 當環境變數參考秘密時,其值會以秘密中定義的值填入。

範例

以下範例展示了一個在應用程式層級宣告連接字串的應用程式。 此連線會在容器環境變數以及調整規則中被引用。

已在容器應用程式中定義祕密之後,便可在建立新的修訂時在環境變數中予以參考。

  1. 請進入你的容器應用程式,進入 Azure 入口網站

  2. 在 [ 應用程式] 區段下,選取 [修訂和複本]。

  3. 在 [ 修訂和複本] 頁面中,選取 [ 建立新修訂]。

  4. 在 [建立及部署新的修訂] 頁面的 [容器] 標籤中,在 容器映像檔 區段下,選取一個容器。

  5. 選取編輯

  6. 在 [ 編輯容器 內容] 窗格中,選取 [ 環境變數 ] 索引標籤。

  7. 選取新增

  8. 輸入下列資訊:

    • 名稱:環境變數的名稱。
    • 來源:選取參考機密
    • :選取您先前定義的秘密。
  9. 選取儲存

  10. 在 [ 建立及部署新的修訂 ] 頁面中,選取 [建立 ] 以建立新的修訂。

在磁碟區中掛接祕密

定義祕密一節所述,在應用程式層級宣告祕密之後,您可以在容器應用程式中建立新修訂版本時,於磁碟區掛接中參考這些祕密。 當您將敏感資訊掛接到一個卷中時,每個敏感資訊都會掛接為該卷中的一個檔案。 檔名是祕密的名稱,而檔案內容則是祕密值。 您可以在磁碟區掛接中載入所有祕密,也可以載入特定祕密。

範例

在容器應用程式中定義祕密後,可於建立新的修訂版本時在卷掛載中引用該祕密。

  1. 請進入你的容器應用程式,進入 Azure 入口網站

  2. 在 [ 應用程式] 區段下,選取 [修訂和複本]。

  3. 在 [ 修訂和複本] 頁面中,選取 [ 建立新修訂]。

  4. 在 [建立及部署新的修訂] 頁面的 [容器] 標籤中,在 容器映像檔 區段下,選取一個容器。

  5. 選取編輯

  6. 在 [編輯容器] 內容窗格中,選取 [磁碟區掛接] 索引標籤。

  7. 選取「建立新磁碟區」。

  8. 新增磁碟區 環境面板中,輸入下列資訊:

    • 磁碟區類型:選取 Secret
    • 名稱mysecrets
    • 掛載所有秘密資訊:已啟用

    注意

    如果您想要載入特定祕密,請停用掛接所有祕密,然後選取您想要載入的祕密。

  9. 選取新增

  10. [編輯容器內容] 窗格中的 [磁碟區名稱] 下,選取 mysecrets

  11. 掛接路徑底下,輸入 /mnt/secrets

  12. 選取儲存

  13. 建立及部署新的修訂頁面中,選取 建立以建立具有磁碟區掛接的新修訂。

疑難排解金鑰保管庫的引用

當你存取 Azure Key Vault 的機密資料時,可能會在擷取或同步過程中遇到問題。 以下是常見的錯誤與解決方法:

錯誤 原因 Resolution
未啟用管理身份 容器應用程式沒有指派受管理身份。 在您的容器應用程式中啟用系統指派或使用者指派的管理身份。 請參閱<受控識別>(機器翻譯)。
身份未找到 指定的管理身份不存在,或是沒有指派給容器應用程式。 身份 區塊中確認身份是否已建立並指派到容器應用程式。
金鑰保存庫 中的機密被停用 該秘密在 金鑰保存庫 資源中被停用。 到你的 Azure Portal 裡的 金鑰保存庫 並啟用這個密鑰。
認證失敗 受管理身份缺乏讀取秘密所需的權限。 金鑰保存庫機密使用者角色授予您的金鑰保存庫上的受控身份。 請參見 金鑰保存庫 Secrets User
RBAC 申請被拒 管理身份權限不足以存取 金鑰保存庫。 確認 金鑰保存庫 上的 RBAC 角色指派,並確保其中包含對機密的讀取權限。

下一步