在 Batch 集區中設定受控識別
Azure 資源的受控識別可藉由為 Microsoft Entra ID (Azure AD ID) 中的 Azure 資源提供身分識別,藉以消除複雜的身分識別和認證管理。 此身分識別可用來取得 Microsoft Entra 權杖,以向 Azure 中的目標資源進行驗證。
將使用者指派的受控識別新增至 Batch 集區時,請務必在設定中設定 Identity 屬性。 此屬性會將受控識別連結至集區,使其能夠安全地存取 Azure 資源。 Identity 屬性的設定不正確可能會導致常見的錯誤,例如存取問題或上傳錯誤。
如需在 Azure Batch 中設定受控識別的詳細資訊,請參閱 Azure Batch 受控識別檔。
本主題說明如何在 Batch 集區上啟用使用者指派的受控識別,以及如何在節點中使用受控識別。
重要
使用受控身分識別建立集區只能透過使用 Entra 驗證的 Batch 管理平面 API 或 SDK 來執行。 無法使用 Batch 服務 API 或 SDK 建立具有受控身分識別的集區。 如需詳細資訊,請參閱 Batch API 和工具的概觀文件。
建立使用者指派的受控識別
首先,在與 Batch 帳戶相同的租用戶中建立使用者指派的受控識別。 您可使用 Azure 入口網站、Azure 命令列介面 (Azure CLI)、PowerShell、Azure Resource Manager 或 Azure REST API 來建立身分識別。 此受控識別無須位於相同資源群組,甚或位於相同訂用帳戶。
提示
為 Batch 帳戶建立系統指派的受控識別以用於客戶資料加密,無法作為 Batch 集區上使用者指派的受控識別,如本文所述。 如果您想要在 Batch 帳戶和 Batch 集區上使用相同的受控識別,請改用一般使用者指派的受控識別。
以使用者指派的受控識別建立 Batch 集區
建立一個或多個使用者指派的受控身分識別後,便可使用這些識別來建立 Batch 集區。 您可以:
警告
集區具有作用中節點時,不支援集區受控身分識別的就地更新。 現有的計算節點不會隨著變更而更新。 建議您先將集區縮減為零計算節點,再修改身分識別集合,以確保所有 VM 都已獲派相同的一組身分識別集。
在 Azure 入口網站中建立 Batch 集區
若要透過 Azure 入口網站建立具有使用者指派受控識別的 Batch 集區:
- 登入 Azure 入口網站。
- 在搜尋列中,輸入並選取 [Batch 帳戶]。
- 在 [Batch 帳戶] 頁面上,選取要建立 Batch 集區的 Batch 帳戶。
- 在 Batch 帳戶的功能表中,選取 [功能] 下的 [集區]。
- 在 [集區] 功能表中,選取 [新增] 以新增 Batch 集區。
- 針對 [集區識別碼],輸入集區的識別碼。
- 針對 [身分識別],將設定變更為 [使用者指派]。
- 在 [使用者指派的受控識別] 下,選取 [新增]。
- 選取要使用的使用者指派受控識別或身分識別。 然後選取 [新增]。
- 在 [作業系統] 下,選取發行者、供應項目和要使用的 SKU。
- 或者,也可在容器登錄中啟用受控識別:
- 針對 [容器設定],將設定變更為 [自訂]。 接著選取您的自訂設定。
- 針對 [啟動工作],選取 [已啟用]。 接著,選取 [資源檔案] 並新增儲存體容器資訊。
- 啟用容器設定。
- 將容器登錄變更為自訂
- 針對 [身分識別參考],選取儲存體容器。
使用 .NET 建立 Batch 集區
若要以使用者指派的受控識別與 Batch .NET 管理程式庫建立 Batch 集區,請使用下列範例程式碼:
var credential = new DefaultAzureCredential();
ArmClient _armClient = new ArmClient(credential);
var batchAccountIdentifier = ResourceIdentifier.Parse("your-batch-account-resource-id");
BatchAccountResource batchAccount = _armClient.GetBatchAccountResource(batchAccountIdentifier);
var poolName = "HelloWorldPool";
var imageReference = new BatchImageReference()
{
Publisher = "canonical",
Offer = "0001-com-ubuntu-server-jammy",
Sku = "22_04-lts",
Version = "latest"
};
string nodeAgentSku = "batch.node.ubuntu 22.04";
var batchAccountPoolData = new BatchAccountPoolData()
{
VmSize = "Standard_DS1_v2",
DeploymentConfiguration = new BatchDeploymentConfiguration()
{
VmConfiguration = new BatchVmConfiguration(imageReference, nodeAgentSku)
},
ScaleSettings = new BatchAccountPoolScaleSettings()
{
FixedScale = new BatchAccountFixedScaleSettings()
{
TargetDedicatedNodes = 1
}
}
};
ArmOperation<BatchAccountPoolResource> armOperation = batchAccount.GetBatchAccountPools().CreateOrUpdate(
WaitUntil.Completed, poolName, batchAccountPoolData);
BatchAccountPoolResource pool = armOperation.Value;
注意
若要包含 Identity 屬性,請使用下列範例程式代碼:
var pool = batchClient.PoolOperations.CreatePool(
poolId: "myPool",
virtualMachineSize: "STANDARD_D2_V2",
cloudServiceConfiguration: new CloudServiceConfiguration(osFamily: "4"),
targetDedicatedNodes: 1,
identity: new PoolIdentity(
type: PoolIdentityType.UserAssigned,
userAssignedIdentities: new Dictionary<string, UserAssignedIdentity>
{
{ "/subscriptions/{subscription-id}/resourceGroups/{resource-group}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identity-name}", new UserAssignedIdentity() }
}
));
在 Batch 節點中使用使用者指派的受控識別
許多直接在計算節點上存取其他 Azure 資源的 Azure Batch 函式 (例如 Azure 儲存體或 Azure Container Registry) 都支援受控識別。 如需使用 Azure Batch 受控識別的詳細資訊,請參閱下列連結:
您也可手動設定工作,以便受控識別直接存取支援受控識別的 Azure 資源。
在 Batch 節點內,您可取得受控識別權杖並用於驗證:透過 Azure Instance Metadata Service 進行 Microsoft Entra 驗證。
若為 Windows,取得待驗證存取權杖的 PowerShell 指令碼為:
$Response = Invoke-RestMethod -Uri 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource={Resource App Id Url}' -Method GET -Headers @{Metadata="true"}
若為 Linux,Bash 指令碼為:
curl 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource={Resource App Id Url}' -H Metadata:true
如需詳細資訊,請參閱了解如何在 Azure VM 上使用 Azure 資源受控識別來取得存取權杖。
下一步
- 了解 Azure 資源的受控識別。
- 了解如何使用客戶自控金鑰搭配使用者受控身分識別。
- 了解如何在 Batch 集區中啟用自動憑證輪替。