函数计算支持通过标签Tag对函数进行多维分类管理,便于快速检索资源,也可以通过标签实现精细化权限管控,通过为不同RAM用户或用户组授予不同的权限,实现RAM用户间资源隔离,提升安全管理效率。
应用场景
某企业的阿里云主账号创建了多个函数,需要按业务分组将不同的函数授权给不同的团队,企业希望每个团队只能查看和管理被授权的函数,未被授权的函数不允许查看和管理。
例如:
开发团队:只能管理开发环境相关的函数
运维团队:只能管理生产环境相关的函数
注意事项
为遵循最小授权原则,请不要为RAM用户授予权限策略
AliyunFCFullAccess
或AliyunFCReadOnlyAccess
等权限级别过高的策略,否则将不能使用本文介绍的通过函数标签分组管理函数。RAM用户必须使用标签筛选才能查看和管理对应授权的函数,否则,RAM用户无法查看任何函数。
确保RAM用户操作时选择的地域与资源组内函数所在地域一致。
RAM用户组中的RAM用户自动继承RAM用户组的权限。
函数下的子资源与配置,包括别名、触发器、函数异步配置、函数并发配置、实例、VPC绑定、异步任务等,都将遵循函数的权限控制,只能被有对应标签的RAM用户管理。
流程概览
按标签标识不同团队的函数
规划两个标签,分别用来标识developer团队和operator团队。
将RAM用户分组
规划两个RAM用户,分别对应developer团队和operator团队,将对应团队的RAM用户加入到对应的RAM用户组。
基于标签鉴权对RAM用户组进行授权
规划两个自定义权限策略,使用标签鉴权Condition确定资源范围。然后,将不同的权限策略授权给不同的RAM用户组,RAM用户组中的RAM用户将继承RAM用户组的权限。
详细规划见下表:
团队 | RAM用户组 | RAM权限策略 | 标签 |
developer团队 | developer | FCPolicyForDevTeam |
|
operator团队 | operator | FCPolicyForOpsTeam |
|
操作步骤
创建函数并绑定标签。
使用阿里云主账号登录函数计算控制台,创建函数,并为部分函数绑定标签
team:dev
,部分函数绑定标签team:ops
。关于绑定标签的具体操作,请参见标签管理。创建RAM用户。
创建RAM用户组并绑定RAM用户。绑定后RAM用户将继承对应RAM用户组的权限。
使用阿里云主账号登录RAM控制台创建developer和operator两个用户组,将已创建的两个RAM用户分别添加到用户组developer和operator下。具体操作,请参见创建RAM用户组和为RAM用户组添加RAM用户。
创建自定义权限策略。
权限策略分为系统权限策略和自定义权限策略,根据实际场景选择合适的权限策略。本文以为用户组授予自定义权限策略为例进行介绍。
假设给developer团队创建的自定义策略名称为FCPolicyForDevTeam,策略示例如下。
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "fc:*", "Resource": "*", "Condition": { "StringEquals": { "acs:RequestTag/team": [ "dev" ] } } }, { "Effect": "Allow", "Action": "fc:*", "Resource": "*", "Condition": { "StringEquals": { "acs:ResourceTag/team": [ "dev" ] } } }, { "Effect": "Allow", "Action": [ "fc:ListTaggedResources", "tag:ListTagKeys", "fc:GetAccountSettings" ], "Resource": "*" }, { "Effect": "Deny", "Action": [ "fc:UntagResources", "fc:TagResources" ], "Resource": "*" } ] }
假设给operator团队创建的自定义策略名称为FCPolicyForOpsTeam,策略示例如下。
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "fc:*", "Resource": "*", "Condition": { "StringEquals": { "acs:RequestTag/team": [ "ops" ] } } }, { "Effect": "Allow", "Action": "fc:*", "Resource": "*", "Condition": { "StringEquals": { "acs:ResourceTag/team": [ "ops" ] } } }, { "Effect": "Allow", "Action": [ "fc:ListTaggedResources", "tag:ListTagKeys", "fc:GetAccountSettings" ], "Resource": "*" }, { "Effect": "Deny", "Action": [ "fc:UntagResources", "fc:TagResources" ], "Resource": "*" } ] }
权限策略说明如下:
策略内容
策略说明
{ "Effect": "Allow", "Action": "fc:*", "Resource": "*", "Condition": { "StringEquals": { "acs:RequestTag/team": [ "dev" ] } } }
允许RAM用户通过标签
team:dev
筛选函数,以及控制RAM用户创建函数时,必须同时指定标签team:dev
。{ "Effect": "Allow", "Action": "fc:*", "Resource": "*", "Condition": { "StringEquals": { "acs:ResourceTag/team": [ "dev" ] } } }
限制RAM用户只能对绑定了标签
team:dev
的函数进行管理操作。{ "Effect": "Allow", "Action": [ "fc:ListTaggedResources", "tag:ListTagKeys", "fc:GetAccountSettings" ], "Resource": "*" },
允许查看FC函数的所有标签列表、获取自身账户信息。
{ "Effect": "Deny", "Action": [ "fc:UntagResources", "fc:TagResources" ], "Resource": "*" },
不允许解绑、绑定标签。
避免RAM用户因修改标签破坏权限隔离。
{ "Effect": "Allow", "Action": [ "log:Get*", "log:List*", "log:Query*", "log:CreateProject", "log:CreateLogStore", "log:CreateIndex" ], "Resource": "*" },
允许函数计算创建与读取日志。
{ "Effect": "Allow", "Action": [ "fc:GetLayerVersionByArn", "fc:ListLayers", "fc:PutLayerACL", "fc:ListLayerVersions", "fc:CreateLayerVersion", "fc:DeleteLayerVersion", "fc:GetLayerVersion" ], "Resource": "*" },
允许使用层相关功能。
{ "Effect": "Allow", "Action": [ "fc:ListCustomDomains", "fc:GetCustomDomain", "fc:DeleteCustomDomain", "fc:UpdateCustomDomain", "fc:CreateCustomDomain" ], "Resource": "*" },
允许使用自定义域名相关功能。
{ "Effect": "Allow", "Action": [ "ram:ListRoles" ], "Resource": "*" },
在配置“函数角色”时,允许查询角色列表。
说明如果您需要在FC中配置使用OSS、NAS、VPC等产品,您还需要单独添加对应产品的相关权限。具体策略内容请参见权限策略及示例。
为RAM用户组授权。
分别为用户组developer和operator授予自定义权限策略FCPolicyForDevTeam和FCPolicyForOpsTeam。
为用户组developer和operator授予系统权限策略AliyunRAMFullAccess和AliyunECSFullAccess。授权后,该RAM用户组内的RAM用户可以创建指定标签的函数,创建RAM用户、用户组以及创建和绑定权限策略等。
关于为用户组授权的具体操作,请参见为RAM用户组授权。
以用户组developer为例,建议授权的策略如下所示:
结果验证
分别使用两个RAM用户登录函数计算控制台,在左侧导航栏,选择 。
关于使用RAM用户登录控制台的操作步骤,请参见RAM用户登录阿里云控制台。
在顶部菜单栏,选择地域,然后在函数页面,单击标签筛选,筛选对应的标签键和标签值,查询和管理已授权函数。
仅当RAM用户选择了对应用户组已授权策略中包含的标签时,该RAM用户才能查看和管理绑定了对应标签的函数,否则,RAM用户无法查看任何函数。
以RAM用户组developer下的RAM用户为例,可以通过标签
team:dev
筛选被授权函数。