以编程方式为azure资源A分配azure资源B的贡献者角色



我想以编程方式赋予Azure虚拟机一个参与者角色,以修改其他资源中的内容,如路由表、存储帐户。

https://learn.microsoft.com/en-us/azure/active-directory/managed-service-identity/howto-assign-access-cli

上面的msft文档解释了如何使用Azure CLI为支持MSI的VM提供Azure存储帐户的贡献者角色。有人能使用Azure Python SDK而不是Azure CLI实现同样的功能吗?是否可以在不启用MSI的情况下实现相同的目的?

如果为虚拟机创建服务主体,并以某种方式在虚拟机上推送凭据,则可以避免MSI。但MSI的创建是为了避免这种情况,因为在虚拟机内推送凭据既不是一个简单的过程,也不安全。

要将角色分配给Active Directory ID(使用MSI或专用ServicePrincipal(,可以使用此代码分配角色(使用azure-mgmt-authorization包(。

https://github.com/Azure-Samples/compute-python-msi-vm#role-分配给msi凭证

# Get "Contributor" built-in role as a RoleDefinition object
role_name = 'Contributor'
roles = list(authorization_client.role_definitions.list(
resource_group.id,
filter="roleName eq '{}'".format(role_name)
))
assert len(roles) == 1
contributor_role = roles[0]
# Add RG scope to the AD id
# This assumes "sp_id" is either a MSI id or a SP id
role_assignment = authorization_client.role_assignments.create(
resource_group.id,
uuid.uuid4(), # Role assignment random name
{
'role_definition_id': contributor_role.id,
'principal_id': sp_id
}
)

然后,此AD id将只能执行该角色,而不能执行其他操作。

最新更新