Spring Cloud Azure 驗證
本文適用于: ✔️版本 4.14.0 ✔️ 5.8.0
本文說明所有 Spring Cloud Azure 驗證方法。
DefaultAzureCredential
適用于 DefaultAzureCredential
大部分應用程式打算在 Azure 雲端中執行的情況。 這是因為 結合 DefaultAzureCredential
通常用來在開發環境中驗證的認證部署時用來驗證的認證。
注意
DefaultAzureCredential
旨在透過處理具有合理預設行為的常見案例,來簡化開始使用 SDK 的過程。 如果您想要更多控制或您的案例未由預設設定提供,您應該使用其他認證類型。
DefaultAzureCredential
會嘗試透過下列機制進行驗證,順序如下:
- 環境:
DefaultAzureCredential
會透過環境變數讀取指定的帳號資訊,並用於進行驗證。 - 受控識別:如果應用程式部署到已啟用受控識別的 Azure 主機,則
DefaultAzureCredential
將會使用該帳戶進行驗證。 - IntelliJ - 如果您已透過適用于 IntelliJ 的 Azure 工具組進行驗證,
DefaultAzureCredential
將會使用該帳戶進行驗證。 - Visual Studio Code - 如果您已透過 Visual Studio Code Azure 帳戶外掛程式進行驗證,
DefaultAzureCredential
將會使用該帳戶進行驗證。 - Azure CLI - 如果您已透過 Azure CLI
az login
命令驗證帳戶,DefaultAzureCredential
將會使用該帳戶進行驗證。
提示
請確定安全性主體已獲得足夠的許可權來存取 Azure 資源。 如需詳細資訊,請參閱 使用 Microsoft Entra ID 授權存取權。
注意
由於 Spring Cloud Azure AutoConfigure 4.1.0, ThreadPoolTaskExecutor
依預設會自動註冊名為 springCloudAzureCredentialTaskExecutor
的 Bean,並將管理 Azure 身分識別所建立的所有線程。 這個執行緒集區所管理的每個執行緒名稱前面會加上 az-identity-
。 此 ThreadPoolTaskExecutor
豆與 Executor
Spring Boot 所提供的豆無關。
受控識別
常見的挑戰是管理用來保護組成解決方案之不同元件之間通訊的秘密和認證。 受控識別可免除管理認證的需求。 受控識別可為應用程式提供身分識別,以便在連線至支援 Microsoft Entra 驗證的資源時使用。 應用程式可以使用受控識別來取得 Microsoft Entra 權杖。 例如,應用程式可能會使用受控識別來存取 Azure 金鑰保存庫等資源,您可以在其中以安全的方式儲存認證,或存取儲存體帳戶。
我們鼓勵使用受控識別,而不是在應用程式中使用連接字串或金鑰,因為它更安全,而且會節省管理秘密和認證的問題。 在此情況下, DefaultAzureCredential
可以更妥善地使用儲存在本機的帳戶資訊在本機開發案例,然後將應用程式部署至 Azure 雲端,並使用受控識別。
受控識別類型
受控身分識別有兩種:
- 系統指派 - 某些 Azure 服務可讓您直接在服務實例上啟用受控識別。 啟用系統指派的受控識別時,會在 Microsoft Entra 中建立身分識別,該識別與服務執行個體的生命週期繫結在一起。 因此,當刪除資源時,Azure 會自動為您刪除身分識別。 根據設計,只有該 Azure 資源可以使用此身分識別,自 Microsoft Entra ID 要求權杖。
- 使用者指派 - 您也可以建立受控識別作為獨立 Azure 資源。 您可以建立使用者指派的受控身分識別,並將其指派給 Azure 服務的一或多個執行個體。 若是使用者指派的受控識別,Azure 會分開管理身分識別與使用該身分識別的資源。
注意
使用使用者指派的受控識別時,您可以透過 spring.cloud.azure.credential.managed-identity-client-id
或 spring.cloud.azure.<azure-service>.credential.managed-identity-client-id
指定用戶端識別碼。 如果您使用系統指派的受控識別,則不需要認證設定。
提示
請確定安全性主體已獲得足夠的許可權來存取 Azure 資源。 如需詳細資訊,請參閱 使用 Microsoft Entra ID 授權存取權。
如需受控識別的詳細資訊,請參閱 什麼是 Azure 資源的受控識別? 。
其他認證類型
如果您想要更多控制,或您的案例未由 DefaultAzureCredential
或 預設設定提供,您應該使用其他認證類型。
使用 Microsoft Entra 識別碼進行驗證和授權
您可以使用 Microsoft Entra ID,使用 Azure 角色型存取控制 (Azure RBAC) 將許可權授與安全性主體,這可能是使用者或應用程式服務主體。 當安全性主體(使用者或應用程式)嘗試存取 Azure 資源時,例如事件中樞資源,必須授權要求。 使用 Microsoft Entra 識別碼,資源的存取是兩個步驟的程式:
- 首先,安全性主體的身分識別已通過驗證,並傳回 OAuth 2.0 權杖。
- 接下來,權杖會當做要求傳遞至 Azure 服務的一部分,以授權存取指定的資源。
使用 Microsoft Entra 識別碼驗證
若要將應用程式連線到支援 Microsoft Entra 驗證的資源,您可以使用前置詞 spring.cloud.azure.credential
或 spring.cloud.azure.<azure-service>.credential
下表列出驗證屬性:
屬性 | 說明 |
---|---|
client-id | 使用 Azure 執行服務主體驗證時要使用的用戶端識別碼。 |
用戶端密碼 | 使用 Azure 執行服務主體驗證時要使用的用戶端密碼。 |
client-certificate-path | 使用 Azure 執行服務主體驗證時要使用的 PEM 憑證檔案路徑。 |
client-certificate-password | 憑證檔案的密碼。 |
username | 使用 Azure 執行使用者名稱/密碼驗證時要使用的使用者名稱。 |
password | 使用 Azure 執行使用者名稱/密碼驗證時要使用的密碼。 |
已啟用 managed-identity-enabled | 是否要啟用受控識別。 |
提示
如需所有 Spring Cloud Azure 組態屬性的清單,請參閱 Spring Cloud Azure 組態屬性 。
應用程式會尋找數個位置來尋找可用的認證,而且如果未設定認證屬性,則會使用 DefaultAzureCredential
。 如果您想要使用特定認證,請參閱下列範例以取得指引。
下列範例示範如何使用系統指派的受控識別進行驗證:
spring.cloud.azure:
credential:
managed-identity-enabled: true
下列範例示範如何使用使用者指派的受控識別進行驗證:
spring.cloud.azure:
credential:
managed-identity-enabled: true
client-id: ${AZURE_CLIENT_ID}
下列範例示範如何使用服務主體搭配用戶端密碼進行驗證:
spring.cloud.azure:
credential:
client-id: ${AZURE_CLIENT_ID}
client-secret: ${AZURE_CLIENT_SECRET}
profile:
tenant-id: <tenant>
注意
允許 tenant-id
的值包括: common
、 organizations
、 consumers
或租使用者識別碼。 如需這些值的詳細資訊,請參閱 使用錯誤的端點(個人和組織帳戶) 一節錯誤 AADSTS50020 - 來自識別提供者的使用者帳戶不存在於租使用者 中。 如需轉換單一租使用者應用程式的資訊,請參閱 在 Microsoft Entra 識別碼 上將單一租使用者應用程式轉換成多租使用者。
下列範例示範如何搭配用戶端 PFX 憑證使用服務主體進行驗證:
spring.cloud.azure:
credential:
client-id: ${AZURE_CLIENT_ID}
client-certificate-path: ${AZURE_CLIENT_CERTIFICATE_PATH}
client-certificate-password: ${AZURE_CLIENT_CERTIFICATE_PASSWORD}
profile:
tenant-id: <tenant>
注意
允許 tenant-id
的值包括: common
、 organizations
、 consumers
或租使用者識別碼。 如需這些值的詳細資訊,請參閱 使用錯誤的端點(個人和組織帳戶) 一節錯誤 AADSTS50020 - 來自識別提供者的使用者帳戶不存在於租使用者 中。 如需轉換單一租使用者應用程式的資訊,請參閱 在 Microsoft Entra 識別碼 上將單一租使用者應用程式轉換成多租使用者。
下列範例示範如何搭配用戶端 PEM 憑證使用服務主體進行驗證:
spring.cloud.azure:
credential:
client-id: ${AZURE_CLIENT_ID}
client-certificate-path: ${AZURE_CLIENT_CERTIFICATE_PATH}
profile:
tenant-id: <tenant>
注意
允許 tenant-id
的值包括: common
、 organizations
、 consumers
或租使用者識別碼。 如需這些值的詳細資訊,請參閱 使用錯誤的端點(個人和組織帳戶) 一節錯誤 AADSTS50020 - 來自識別提供者的使用者帳戶不存在於租使用者 中。 如需轉換單一租使用者應用程式的資訊,請參閱 在 Microsoft Entra 識別碼 上將單一租使用者應用程式轉換成多租使用者。
下列範例示範如何使用使用者認證進行驗證:
spring.cloud.azure:
credential:
client-id: ${AZURE_CLIENT_ID}
username: ${AZURE_USER_USERNAME}
password: ${AZURE_USER_PASSWORD}
下列範例示範如何使用不同的服務主體向金鑰保存庫進行驗證。 此範例會使用兩個認證來設定應用程式:一個系統指派的受控識別和一個服務主體。 金鑰保存庫 Secret 用戶端會使用服務主體,但任何其他元件將會改用受控識別。
spring.cloud.azure:
credential:
managed-identity-enabled: true
keyvault.secret:
credential:
client-id: ${AZURE_CLIENT_ID}
client-secret: ${AZURE_CLIENT_SECRET}
profile:
tenant-id: <tenant>
注意
允許 tenant-id
的值包括: common
、 organizations
、 consumers
或租使用者識別碼。 如需這些值的詳細資訊,請參閱 使用錯誤的端點(個人和組織帳戶) 一節錯誤 AADSTS50020 - 來自識別提供者的使用者帳戶不存在於租使用者 中。 如需轉換單一租使用者應用程式的資訊,請參閱 在 Microsoft Entra 識別碼 上將單一租使用者應用程式轉換成多租使用者。
使用 Microsoft Entra 識別碼授權存取權
授權步驟需要將一或多個 Azure 角色指派給安全性主體。 指派給安全性主體的角色會決定主體將擁有的許可權。
提示
如需所有 Azure 內建角色的清單,請參閱 Azure 內建角色 。
下表列出 Azure 內建角色,以授權存取 Spring Cloud Azure 中支援的 Azure 服務:
角色 | 描述 |
---|---|
應用程式組態資料擁有者 | 允許完整存取應用程式組態資料。 |
應用程式組態資料讀取器 | 允許讀取應用程式組態資料。 |
Azure 事件中樞資料擁有者 | 允許完整存取Azure 事件中樞資源。 |
Azure 事件中樞資料接收器 | 允許接收Azure 事件中樞資源的存取權。 |
Azure 事件中樞資料傳送者 | 允許傳送Azure 事件中樞資源的存取權。 |
Azure 服務匯流排資料擁有者 | 允許完整存取Azure 服務匯流排資源。 |
Azure 服務匯流排資料接收器 | 允許接收Azure 服務匯流排資源的存取權。 |
Azure 服務匯流排資料傳送者 | 允許傳送Azure 服務匯流排資源的存取權。 |
儲存體 Blob 資料擁有者 | 提供Azure 儲存體 Blob 容器和資料的完整存取權,包括指派 POSIX 存取控制。 |
儲存體 Blob 資料讀者 | 讀取和列出容器和 Blob Azure 儲存體。 |
儲存體佇列資料讀取器 | 讀取和列出佇列和佇列訊息Azure 儲存體。 |
Redis 快取參與者 | 管理 Redis 快取。 |
注意
使用 Spring Cloud Azure Resource Manager 取得事件中樞、服務匯流排和儲存體佇列的連接字串,或 Cache for Redis 的屬性時,請指派 Azure 內建角色 Contributor
。 Azure Cache for Redis 很特別,您也可以指派 Redis Cache Contributor
角色以取得 Redis 屬性。
注意
金鑰保存庫存取原則會決定指定的安全性主體,即使用者、應用程式或使用者群組,是否可以對金鑰保存庫秘密、金鑰和憑證執行不同的作業。 您可以使用 Azure 入口網站、Azure CLI 或 Azure PowerShell 指派存取原則。 如需詳細資訊,請參閱指派 Key Vault 存取原則。
重要
Azure Cosmos DB 會公開兩個內建角色定義: Cosmos DB Built-in Data Reader
和 Cosmos DB Built-in Data Contributor
。 不過,Azure 入口網站尚未提供角色管理的支援。 如需許可權模型、角色定義和角色指派的詳細資訊,請參閱 使用 Azure Cosmos DB 帳戶 的 Microsoft Entra ID 設定角色型存取控制。
SAS 權杖
您也可以設定服務以使用共用存取簽章進行驗證(SAS)。 spring.cloud.azure.<azure-service>.sas-token
是要設定的屬性。 例如,使用 spring.cloud.azure.storage.blob.sas-token
來驗證 儲存體 Blob 服務。
連接字串
某些 Azure 服務支援連線字串,以提供連線資訊和認證。 若要使用 連接字串 連線到這些 Azure 服務,只需設定 spring.cloud.azure.<azure-service>.connection-string
即可。 例如,將 設定 spring.cloud.azure.eventhubs.connection-string
為連線到事件中樞服務。