需求背景
众所周知,阿里云的访问控制可以通过资源ID作为资源描述符进行对资源的访问控制,当 这种描述资源的方式在管理较多的资源时,会大大的增加授权管理的成本,所以标签鉴权的方式应运而生
前置知识
需要详细的的了解标签鉴权首先需要了解以下几点:
需求场景
资源准备
有权限的账户准备两个迁移源,一个资源上不带任何标签,一个资源上包含owner:zhangsan 的标签
请求标签场景
场景描述
不管在控制台进行任何操作,必须带上鉴权策略的标签(owner:zhansan)参数才能成功
账户策略设计
{
"Statement": [
{
"Action": "*",
"Condition": {
"StringEquals": {
"acs:RequestTag/owner": "zhangsan"
}
},
"Effect": "Allow",
"Resource": "*"
},
{
"Action": [
"*:List*",
"*:Describe*",
],
"Effect": "Allow",
"Resource": "*"
}
],
"Version": "1"
}
场景验证:
给迁移源打标签,不带owner:zhangsan 的 操作,预期不成功
给迁移源打标签, 带owner: zhangsan 标签,预期成功
场景延伸:
但凡带有某个特定标签的操作都不被允许可以将账户的策略配置成如下:
{
"Statement": [
{
"Action": "*",
"Condition": {
"StringEquals": {
"acs:RequestTag/owner": "zhangsan"
}
},
"Effect": "Deny",
"Resource": "*"
},
{
"Action": "*",
"Effect": "Allow",
"Resource": "*"
}
],
"Version": "1"
}
资源标签场景
场景描述:
只能操作带有特定标签的资源,包括修改资源属性,删除资源,给资源打标签等操作
策略设计:
{
"Statement": [
{
"Action": "*",
"Condition": {
"StringEquals": {
"acs:ResourceTag/owner": "zhangsan"
}
},
"Effect": "Allow",
"Resource": "*"
},
{
"Action": "*:TagResources",
"Effect": "Deny",
"Resource": "*"
},
{
"Action": [
"*:List*",
"*:Describe*",
],
"Effect": "Allow",
"Resource": "*"
}
],
"Version": "1"
}
场景验证:
登录配置如上策略的子账户进行如下操作:
删除不含有owner:zhangsan 标签的迁移源,预期没有权限删除:
删除含owner:zhangsan 标签的迁移源, 预期可以删除成功:
场景延伸:
但凡资源上带有特定标签的资源都不允许被操作,策略设计如下:
{
"Statement": [
{
"Action": "*",
"Condition": {
"StringEquals": {
"acs:ResourceTag/owner": "zhangsan"
}
},
"Effect": "Deny",
"Resource": "*"
},
{
"Action": "*",
"Effect": "Allow",
"Resource": "*"
}
],
"Version": "1"
}
标签鉴权小结:
策略中ResourceTag 的条件配置,是基于资源上已有标签来控制对资源的操作
策略中RequestTag 的条件配置需要满足控制台操作允许设置标签,只要满足策略所配置的标签就有权限操作