我想以编程方式将Azure VM的贡献者角色分配给另一个修改其他资源(例如路由表,存储帐户)中的事物。
msft文档上方介绍了如何使用Azure CLI向启用MSI的VM授予Azure存储帐户的贡献者角色。有人可以使用Azure Python SDK代替Azure CLI达到相同的目的吗?不启用MSI是否可以达到相同的目的?
答案 0 :(得分:1)
如果为虚拟机创建服务主体,并以某种方式推送虚拟机上的凭据,则可以避免MSI。但是创建MSI的目的是为了避免这种情况,因为将凭据推送到VM内部并不是一个简单的过程,也不安全。
要将角色分配给Active Directory ID(无论使用MSI还是专用ServicePrincipal),都可以使用此代码来分配角色(使用azure-mgmt-authorization
包)。
https://github.com/Azure-Samples/compute-python-msi-vm#role-assignement-to-the-msi-credentials
# 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将只能执行该角色,仅此而已。