保護受控 HSM 的存取

Azure 金鑰保存庫 受控 HSM 是保護加密金鑰的雲端服務。 由於此數據是機密且業務關鍵,因此您必須只允許授權的應用程式和使用者存取受控 HSM 來保護其存取權。 本文提供受控 HSM 訪問控制模型的概觀。 它說明驗證和授權,並說明如何保護受控 HSM 的存取。

本教學課程將逐步引導您完成一個簡單的範例,示範如何使用 Azure RBAC 和受控 HSM 本機 RBAC 來達成職責和訪問控制的分離。 請參閱 受控 HSM 訪問控制 ,以瞭解受控 HSM 訪問控制模型。

必要條件

若要完成本文中的步驟,您必須具有下列項目︰

Azure Cloud Shell

Azure Cloud Shell 是裝載於 Azure 中的互動式殼層環境,可在瀏覽器中使用。 您可以使用 Bash 或 PowerShell 搭配 Cloud Shell,與 Azure 服務共同使用。 您可以使用 Cloud Shell 預先安裝的命令,執行本文提到的程式碼,而不必在本機環境上安裝任何工具。

要啟動 Azure Cloud Shell:

選項 範例/連結
選取程式碼或命令區塊右上角的 [試試看]。 選取 [試試看] 並不會自動將程式碼或命令複製到 Cloud Shell 中。 Screenshot that shows an example of Try It for Azure Cloud Shell.
請前往 https://shell.azure.com,或選取 [啟動 Cloud Shell] 按鈕,在瀏覽器中開啟 Cloud Shell。 Button to launch Azure Cloud Shell.
選取 Azure 入口網站右上方功能表列上的 [Cloud Shell] 按鈕。 Screenshot that shows the Cloud Shell button in the Azure portal

若要使用 Azure Cloud Shell:

  1. 啟動 Cloud Shell。

  2. 選取程式碼區塊 (或命令區塊) 上的 [複製] 按鈕以複製程式碼或命令。

  3. 透過在 Windows 和 Linux 上選取 Ctrl+Shift+V;或在 macOS 上選取 Cmd+Shift+V,將程式碼或命令貼到 Cloud Shell 工作階段中。

  4. 選取 Enter 鍵執行程式碼或命令。

登入 Azure

若要使用 CLI 登入 Azure,您可以輸入:

az login

如需透過 CLI 登入選項的詳細資訊,請參閱 使用 Azure CLI 登入

範例

在此範例中,我們正在開發使用 RSA 2,048 位密鑰進行簽署作業的應用程式。 我們的應用程式會在具有受控識別的 Azure 虛擬機 (VM) 中執行。 用於簽署的 RSA 金鑰都會儲存在我們的受控 HSM 中。

我們識別出下列負責管理、部署和稽核應用程式的角色:

  • 安全小組:CSO 辦公室的IT人員(首席安全官)或類似的參與者。 安全性小組負責妥善保護金鑰。 用於簽署的金鑰 RSA 或 EC 金鑰,以及用於數據加密的 RSA 或 AES 金鑰。
  • 開發人員和操作員:開發應用程式並在 Azure 中部署它的員工。 此小組的成員不屬於安全性工作人員。 他們不應該能夠存取敏感數據,例如 RSA 金鑰。 只有他們部署的應用程式才能存取此敏感數據。
  • 稽核員:此角色適用於不是開發或一般IT人員成員的參與者。 其會檢閱憑證、金鑰和祕密的使用與維護情形,以確保各項作業符合安全性標準。

有另一個角色超出應用程式範圍:訂用帳戶(或資源群組)系統管理員。 訂用帳戶管理員會設定安全性小組的初始存取權限。 其會使用資源群組 (具有此應用程式所需的資源),將存取權授與安全性小組。

我們需要為角色授權下列作業:

安全性小組

  • 建立受控 HSM。
  • 下載受控 HSM 安全性網域(用於災害復原)
  • 開啟記錄。
  • 產生或匯入金鑰
  • 建立受控 HSM 備份以進行災害復原。
  • 設定受控 HSM 本機 RBAC,將許可權授與使用者和應用程式以進行特定作業。
  • 定期變換金鑰。

開發人員和操作員

  • 從安全性小組取得用於簽署的 RSA 金鑰的參考 (金鑰 URI)。
  • 開發及部署以程式設計方式存取金鑰的應用程式。

核 數 師

  • 檢閱金鑰到期日,以確保金鑰是最新的
  • 監視角色指派,以確保密鑰只能由授權的使用者/應用程式存取
  • 檢閱受控 HSM 記錄,以確認金鑰符合資料安全性標準的適當使用。

下表摘要說明小組和資源的角色指派,以存取受控 HSM。

角色 管理平面角色 數據平面角色
安全性小組 受控 HSM 參與者 受控 HSM 管理員
開發人員和操作員
稽核者 受控 HSM 密碼編譯稽核員
受控識別應用程式所使用的 VM 受控 HSM 密碼編譯使用者
應用程式所使用的 儲存體 帳戶受控識別 受控 HSM 服務加密

這三個小組角色需要存取其他資源,以及受控 HSM 許可權。 若要部署 VM(或 Azure App 服務 的 Web Apps 功能),開發人員和操作員需要Contributor存取這些資源類型。 稽核員需要儲存受控 HSM 記錄的 儲存體 帳戶讀取許可權。

若要指派管理平面角色 (Azure RBAC),您可以使用 Azure 入口網站 或任何其他管理介面,例如 Azure CLI 或 Azure PowerShell。 若要指派受控 HSM 數據平面角色,您必須使用 Azure CLI。 如需管理平面角色的詳細資訊,請參閱 Azure 內建角色。 如需受控 HSM 數據平面角色的詳細資訊,請參閱 受控 HSM 的本機 RBAC 內建角色。

本節中的 Azure CLI 代碼段是使用下列假設所建置:

  • Microsoft Entra 系統管理員已建立安全組來代表三個角色:Contoso 安全性小組、Contoso 應用程式 DevOps 和 Contoso 應用程式稽核員。 系統管理員已將使用者新增至其各自的群組。
  • 所有資源都位於 ContosoAppRG 資源群組中。
  • 受控 HSM 記錄會儲存在 contosologstorage 儲存器帳戶中。
  • ContosoMHSM 受控 HSMcontosologstorage 儲存器帳戶位於相同的 Azure 位置。

訂用帳戶管理員會將 Managed HSM Contributor角色指派給安全性小組。 此角色可讓安全性小組管理現有的受控 HSM,並建立新的 HSM。 如果有現有的受控 HSM,則必須指派「受控 HSM 管理員 istrator」角色,才能管理它們。

# This role assignment allows Contoso Security Team to create new Managed HSMs
az role assignment create --assignee-object-id $(az ad group show -g 'Contoso Security Team' --query 'id' -o tsv) --assignee-principal-type Group --role "Managed HSM Contributor"

# This role assignment allows Contoso Security Team to become administrator of existing managed HSM
az keyvault role assignment create  --hsm-name ContosoMHSM --assignee $(az ad group show -g 'Contoso Security Team' --query 'id' -o tsv) --scope / --role "Managed HSM Administrator"

安全性小組會設定記錄,並將角色指派給稽核員和 VM 應用程式。

# Enable logging
hsmresource=$(az keyvault show --hsm-name ContosoMHSM --query id -o tsv)
storageresource=$(az storage account show --name contosologstorage --query id -o tsv)
az monitor diagnostic-settings create --name MHSM-Diagnostics --resource $hsmresource --logs    '[{"category": "AuditEvent","enabled": true}]' --storage-account $storageresource

# Assign the "Crypto Auditor" role to Contoso App Auditors group. It only allows them to read.
az keyvault role assignment create  --hsm-name ContosoMHSM --assignee $(az ad group show -g 'Contoso App Auditors' --query 'objectId' -o tsv) --scope / --role "Managed HSM Crypto Auditor"

# Grant the "Crypto User" role to the VM's managed identity. It allows to create and use keys. 
# However it cannot permanently delete (purge) keys
az keyvault role assignment create  --hsm-name ContosoMHSM --assignee $(az vm identity show --name "vmname" --resource-group "ContosoAppRG" --query objectId -o tsv) --scope / --role "Managed HSM Crypto Auditor"

# Assign "Managed HSM Crypto Service Encryption User" role to the Storage account ID
storage_account_principal=$(az storage account show --id $storageresource --query identity.principalId -o tsv)
# (if no identity exists), then assign a new one
[ "$storage_account_principal" ] || storage_account_principal=$(az storage account update --assign-identity --id $storageresource)

az keyvault role assignment create --hsm-name ContosoMHSM --role "Managed HSM Crypto Service Encryption User" --assignee $storage_account_principal

本教學課程只會顯示大部分與訪問控制相關的動作。 此處不會顯示與在 VM 中部署應用程式相關的其他動作和作業、開啟以客戶管理密鑰進行加密、建立受控 HSM,讓範例著重於訪問控制和角色管理。

我們的範例描述簡單的案例。 實際案例可能更為複雜。 您可以根據您的需求調整金鑰保存庫的許可權。 我們假設安全性小組會提供其應用程式中 DevOps 人員所使用的金鑰和秘密參考 (URI 和指紋)。 開發人員和操作員不需要任何數據平面存取。 我們著重於如何保護您的金鑰保存庫。 當您保護 VM記憶體帳戶和其他 Azure 資源時,請提供類似的考慮。

資源

下一步

如需系統管理員的入門教學課程,請參閱 什麼是受控 HSM?

如需受控 HSM 記錄使用記錄的詳細資訊,請參閱 受控 HSM 記錄