如何定义 Azure 基于角色的访问控制 (RBAC)
介绍
Azure 允许云管理员使用基于角色的访问控制 (RBAC) 来管理对其资源的访问。这允许向用户、组和应用授予特定权限。如果正确实施,这将通过应用最小特权原则来增强安全性。但是,当您的云基础架构规模庞大,包含数十个应用和数百个用户时,以可重复和透明的方式管理所有这些权限将变得困难。
在本指南中,您将了解如何使用 Azure CLI 定义角色并分配角色。这允许您使用代码编写 RBAC 角色分配脚本以简化部署和维护。本指南假定您对 bash 有基本的了解。
角色定义和分配
在 Azure CLI 中,有两个组件需要管理:
- 角色定义定义了一组权限。这些权限包括授予或拒绝受让人访问哪些数据和操作。
- 角色分配是角色定义、范围和受让人之间的映射。受让人可以是 Active Directory 域中的用户、代表应用的服务主体或包含一个或多个用户的安全组。范围是一种属性,允许管理员将角色定义限制为订阅、资源组或特定的 Azure 资源。
需要澄清的是,您的 Azure 订阅已经具有一组内置角色定义。例如,您可以创建一个角色分配,将角色读取者分配给my-web-app资源组范围内的安全组开发人员。这允许开发人员安全组的所有成员查看my-web-app资源组中包含的资源,但不能进行任何更改。
在 Azure CLI 中创建角色分配
要分配角色,您需要三个组件:
- 角色定义
- 受让人
- 分配的范围。如果不提供范围,则默认为整个订阅。
要将读者范围分配给开发人员安全组,请运行以下命令:
# get a list of all roles definitions
az role definition list --query "sort_by([],&roleName)[].{name:name,roleType:roleType,roleName:roleName}" -o tsv
# save security group object's id to a variable
developers_security_group=$(az ad group list --query "[?displayName=='developers'].{objectId:objectId}" -o tsv)
# assign the role by omitting the scope. This defaults to entire subscription.
az role assignment create --role "Reader" --assignee $developers_security_group
# assign the role and specify a resource group scope.
az role assignment create --role "Reader" --assignee $developers_security_group --scope /subscriptions/xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxx/resourceGroups/my-web-app
在 Azure CLI 中创建角色定义
您还可以创建自己的角色定义。当您有一组想要授予不同范围的应用程序的标准权限时,这很有用。例如,假设您有 100 个资源组,每个资源组内有两个应用程序。每个应用程序仅被允许从其自己的资源组内的存储帐户和 Cosmos DB 数据库读取数据的权限。如果您坚持使用内置角色,则需要为每个应用程序分别分配Cosmos DB 帐户读取器角色、存储 Blob 数据读取器和存储队列数据消息处理器权限。
要定义您自己的名为“自定义数据读取器”的角色,请运行以下命令:
az role definition create --role-definition '{
"Name": "Custom Data Reader",
"Description": "Read data from storage accounts and cosmos DB Databases.",
"Actions": [
"Microsoft.DocumentDB/*/read",
"Microsoft.Storage/storageAccounts/blobServices/containers/read",
"Microsoft.Storage/storageAccounts/queueServices/queues/delete",
"Microsoft.Storage/storageAccounts/queueServices/queues/read",
"Microsoft.Storage/storageAccounts/queueServices/queues/write"
],
"DataActions": [
"Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read",
"Microsoft.Storage/storageAccounts/queueServices/queues/messages/delete",
"Microsoft.Storage/storageAccounts/queueServices/queues/messages/read",
"Microsoft.Storage/storageAccounts/queueServices/queues/messages/write"
],
"NotDataActions": [
],
"AssignableScopes": ["/subscriptions/xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxx"]
}'
# assign the new custom role to an app or group
az role assignment create --role "Custom Data Reader" --assignee $developers_security_group
使用托管标识
到目前为止,您已将角色分配给安全组。这很有用,因为它允许您一次管理多个用户的权限。
然而,在微服务环境中,您可能拥有数百个应用程序,但单个应用程序只需要用户可能拥有的角色的子集。在这种情况下,您需要单独识别应用程序并仅分配其所需的角色。
Microsoft 有一组支持托管标识的服务。这些身份使管理权限变得容易,因为您不需要自己管理密码或客户端凭据等机密信息。与用户一样,他们也可以分配角色。
要分配角色,首先查询身份,然后在适当的范围内创建角色分配。
# query the principalId of a webapp
APP_IDENTITY=$(az webapp identity show -n my-web-app -g my-web-app --query "{principalId:principalId}" -o tsv)
# assign a role to that webapp
az role assignment create --role "Custom Data Reader" --assignee $developers_security_group --scope /subscriptions/xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxx/resourceGroups/my-web-app
结论
RBAC 提供了一组丰富的功能,可让您控制组织内的访问。通过编写角色定义和分配脚本,可以简化大量角色的管理;您可以以可预测的方式进行广泛的更改。这还允许您通过源代码管理审核和查看更改。要进一步掌握这些技能,请阅读有关Azure AD 托管标识的更多信息。
免责声明:本内容来源于第三方作者授权、网友推荐或互联网整理,旨在为广大用户提供学习与参考之用。所有文本和图片版权归原创网站或作者本人所有,其观点并不代表本站立场。如有任何版权侵犯或转载不当之情况,请与我们取得联系,我们将尽快进行相关处理与修改。感谢您的理解与支持!
请先 登录后发表评论 ~