在 az cli 中向 Azure 服务主体授予安全 Reader 角色

Grant Security Reader role to an Azure Service Principal in az cli

我正在尝试允许 Azure 中的服务主体从 Azure Active Directory 读取,以便在使用 Terraform 时针对 AAD 执行查找。

我很确定所需的角色是安全 Reader 角色,但是,我不确定需要什么上下文才能将服务主体添加到该角色。我假设它在 tenantId 上,但不确定 az role assignment 命令随后需要的格式?

我目前使用的代码如下:-

sp=$(az ad sp list --query "[?displayName=='[my app]'].appId" --output tsv)
tenantId=$(az account show --query tenantId --output tsv)
az role assignment create --role "Secuity Reader" --assignee $sp --scope $tenantId

但这并没有根据范围正确验证,所以它显然不仅仅是租户 ID。我知道订阅级范围是 /subscriptions/[subscription id]... 等,但我不知道租赁级权限的格式是什么?

az role assignment 命令是一个基于订阅的命令,使用它您只能向特定订阅添加分配,即所谓的 RBAC(基于资源的访问控制)分配。

您要搜索的是将角色添加到 Azure AD。

向您展示如何添加一个 AAD 角色,这是您使用 PowerShell 向用户添加 AAD 角色的方法:https://docs.microsoft.com/en-us/powershell/module/azuread/add-azureaddirectoryrolemember?view=azureadps-2.0

Add-AzureADDirectoryRoleMember
   -ObjectId <String>
   -RefObjectId <String>
   [-InformationAction <ActionPreference>]
   [-InformationVariable <String>]
   [<CommonParameters>]

这是使用 PowerShell 添加 RBAC 角色的方法:https://docs.microsoft.com/en-us/powershell/module/az.resources/new-azroleassignment?view=azps-4.4.0

New-AzRoleAssignment
   -ObjectId <String>
   [-Scope <String>]
   -RoleDefinitionName <String>
   [-AllowDelegation]
   [-DefaultProfile <IAzureContextContainer>]
   [<CommonParameters>]

使用两个不同的模块是完全不同的两件事。我不知道是否有 CLI 插件来支持 AzureAD 模块。

使用 az restcurl 并按照文档了解更多详细信息 Assign an Azure role

像这样,

az rest --method PUT --resource "https://management.azure.com/" --uri "https://management.azure.com/{scope}/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId}?api-version=2015-07-01" --headers 'Content-Type=application/json' --body $jsonBody

使用 jsonBody 变量根据文档 json 构建对象 link。