操作场景
如果预设策略不能满足您的要求,您可以通过创建自定义策略实现最小授权。本文提供了使用访问管理(Cloud Access Management,CAM)策略让用户拥有在腾讯云弹性 MapReduce(以下简称 EMR)控制台中查看和使用特定资源的权限示例,指导用户如何使用控制台配置特定权限策略。
自定义权限策略创建方式
创建方式 | 授权指南 |
通过策略生成器创建自定义策略 | |
通过标签授权创建自定义策略 | |
通过策略语法创建自定义策略 |
授权策略语法参考
通过策略语法创建自定义策略时,需要了解业务的权限管控需求和 EMR 策略语法定义。下文为您介绍 CAM 权限策略的基本结构,以及如何在策略中定义 EMR 的操作(Action)、资源(Resource)和使用条件(Condition)。
CAM通用策略语法
语法示例 | 说明 |
{ "version":"2.0", "statement": [ { "effect":"effect", "action":["action"], "resource":["resource"], "condition": {"key":{"value"}} } ] } | 版本 version (必填):目前仅允许值为"2.0"。 |
| 语句 statement 是用来描述一条或多条权限的详细信息。该元素包括 effect、action、resource,condition 等多个其他元素的权限或权限集合。一条策略有且仅有一个 statement 元素。 1. 效果 effect (必填):描述声明产生的结果是“允许”还是“显式拒绝”。包括 allow (允许)和 deny (显式拒绝)两种情况。 2. 操作 action (必填):用来描述允许或拒绝的操作。操作可以是 API(以 name 前缀描述)或者功能集(一组特定的 API,以 actionName 前缀描述)。详情参见 操作。 3. 资源 resource (必填):描述授权的具体数据。资源是用六段式描述。详情参见 资源。 4. 生效条件 condition(选填): 描述策略生效的约束条件。条件包括操作符、操作键和操作值组成。条件值可包括时间、IP 地址、标签等信息。详情参见 条件。 |
操作
支持访问管理的EMR接口
操作设置示例
场景 | 示例 |
在单个语句中指定多个操作 | 使用以 emr: 为前缀的 API,并使用逗号将它们隔开,如下所示: "action":["emr:action1","emr:action2"] |
使用通配符指定多项操作 | 指定名字以单词 "Describe" 开头的所有操作,如下所示: "action":["emr:Describe*"] |
指定 EMR 中所有操作 | 请使用 * 通配符,如下所示: "action":["emr:*"] |
资源
EMR可授权的资源类型
在访问管理(CAM)中可授权的EMR资源类型和对应的资源描述方法如下:
资源类型 | 授权策略中的资源描述方法 |
弹性MapReduce实例 | qcs::emr:${region}:uin/${uin}:emr-instance/${emrInstanceId} |
弹性MapReduce节点 | qcs::emr:${region}:uin/${uin}:emr-vm/${emrResourceId} |
弹性MapReduce预定包 | qcs::emr:${region}:uin/${uin}:emr-reserve/${emrReserveId} |
${region}
:描述地域信息,地域命名方式请参见 地域列表。值为空的时候表示所有地域。如华北地区(北京)为 ap-beijing。${uin}
:主账号的账户ID。如:uin/12345678。${emrInstanceId}、${emrResourceId}、${emrReserveId}
:具体的资源 ID,可前往各个产品控制台查看,值为 * 时代表该类型资源的所有资源。如emr-instance/*。EMR 接口授权粒度分为操作级和资源级:
资源级接口:此类型接口支持对某一个具体特定的资源进行授权。资源级接口可授权的资源类型参见 支持 CAM 的 EMR 接口。
操作级接口:此类型接口不支持对某一个特定的资源进行授权。授权时策略语法若限定了具体的资源,CAM 会判断此接口不在授权范围,判断为无权限。故操作级接口授权时策略语句的资源元素必须指定为 *。
资源设置示例
场景 | 示例 |
指定使用特定集群资源 | 指定使用北京地域的集群ID(emr-12345),如下所示: "resource":[ "qcs::emr:ap-beijing:uin/12345678:emr-instance/emr-12345"] |
指定使用主账号下所有集群资源 | 可使用* 通配符表示所有资源,如下所示: "resource":[ "qcs::emr:ap-beijing:uin/12345678:emr-instance/*"] |
指定所有资源,或特定 API 操作不支持资源级权限 | 请在 Resource 元素中使用 * 通配符,如下所示: "resource": "*" |
在一条指令中同时指定多个资源 | 指定两个资源,并使用逗号将它们隔开,如下所示: "resource":["resource1","resource2"] |
条件
场景示例
示例场景 | 支持使用的创建策略方式 |
(预设策略,无需自定义) | |
按策略生成器创建、按策略语法创建 | |
按策略语法创建、按标签授权 | |
按策略生成器创建、按策略语法创建 | |
按策略生成器创建、按策略语法创建 | |
按策略语法创建、按标签授权 |
示例1:授权用户 EMR 的只读权限
示例2:授权用户 EMR 的查看集群权限
下文为您介绍如何授权子账号EMR的查看集群的基础权限,可将以下策略关联到该用户。具体操作步骤如下:
1. 新建自定义策略
进入 访问管理策略 页面,单击新建自定义策略。
选择创建策略方式:
选择按策略生成器创建。
在“可视化策略生成器”中选择服务的页面,选择弹性MapReduce (emr),补充以下信息。
效果(必选):选择允许。
服务(必选):选择弹性MapReduce (emr)。
操作(必选):选择添加自定义操作,依次添加Inquir*、Check*、Describe*。
资源(必填):选择全部资源。
单击添加权限,选择标签 (tag),补充以下信息。
效果(必选):选择允许。
服务(必选):选择标签 (tag)。
操作(必选):展开全部操作,依次选中GetTags、DescribeResourceTagsByResourceIds、GetTagKeys和GetTagValues。
资源(必填):选择全部资源。
单击添加权限,选择财务 (finance),补充以下信息。
效果(必选):选择允许。
服务(必选):选择财务 (finance)。
操作(必选):选择全部操作。
资源(必填):选择全部资源。
完成策略授权声明编辑后,点击“下一步”,进入基本信息和关联用户/用户组/角色页面。
在关联用户/用户组/角色页面,新建名为 Operator-emr-basic 自定义策略,可同时关联用户/用户组/角色快速授权。
单击完成,完成按策略生成器创建自定义策略的操作。
选择按策略语法创建。
选择策略模板时,选择空白模板,单击下一步。
新建名为 Operator-emr-basic 自定义策略,将策略内容中原有内容清除后,在策略里面配置如下,创建好之后保存即可。
{"statement": [{"action": ["tag:GetTags","finance:*","tag:DescribeResourceTagsByResourceIds","tag:GetTagKeys","tag:GetTagValues","emr:Inquir*","emr:Check*","emr:Describe*"],"effect": "allow","resource": ["*"]}],"version": "2.0"}
说明:
为了支持用户创建集群、使用标签并进行标签授权,本策略增加了finance、tag权限,可按需添加。
2. 子账号赋权并验证
在用户列表页面找到要赋权的子用户,单击右侧的授权按钮;新建子用户详细操作请参见 新建子用户。
选择自定义策略 Operator-emr-basic,并将其授权给子账号,详情参见授权管理 。
以子用户身份登录进行验证,用户可以创建和查看EMR集群。
示例3:授权用户创建资源时强制绑定标签权限
下文为您介绍如何让子账号在创建集群时,必须绑定权限策略里面指定的标签键值对才能创建,不绑定标签或者绑定其他标签都会创建失败。可先授权用户 EMR 的查看集群权限,再将以下策略关联到该用户。具体操作步骤如下:
1. 新建自定义策略
进入 访问管理策略 页面,单击新建自定义策略。
选择创建策略方式:
选择按策略语法创建。
选择策略模板时,选择空白模板,单击下一步。
新建名为 Operator-emr-request_tag 自定义策略,将策略内容中原有内容清除后,在策略里面配置如下,创建好之后保存即可。
{"statement": [{"action": ["emr:CreateInstance"],"condition": {"for_any_value:string_equal": {"qcs:request_tag": ["App&Dev"]}},"effect": "allow","resource": ["*"]}],"version": "2.0"}
选择按标签授权。
在“可视化策略生成器”中选择服务的页面,选择弹性MapReduce (emr),补充以下信息。
效果(必选):选择允许。
服务(必选):选择弹性MapReduce (emr)。
操作(必选):展开全部操作,选中CreateInstance接口。
在选择标签栏,选择标签键(App)和标签值(Dev)。
在选择条件键,选择request_tag,条件运算符选择或(for_any_value)。
是否授予不支持标签的接口"resource": "*"权限,选择否。
完成策略授权声明编辑后,点击“下一步”,进入基本信息和关联用户/用户组/角色页面。
在关联用户/用户组/角色页面,新建名为 Operator-emr-request_tag 自定义策略,可同时关联用户/用户组/角色快速授权。
单击完成,完成按策略生成器创建自定义策略的操作。
2. 子账号赋权并验证
在用户列表页面找到要赋权的子用户,单击右侧的授权按钮;新建子用户详细操作请参见 新建子用户。
选择自定义策略 Operator-emr-basic和Operator-emr-request_tag,并将其授权给子账号,详情参见授权管理 。
以子用户身份登录进行验证,在不设置标签和不设置对应标签(App&Dev)的情况下,尝试购买EMR集群。
不设置标签情况下,提示无操作权限。
不设置对应标签(App&Dev)情况下,提示无操作权限。
在设置对应标签(App&Dev)情况下,集群创建成功。
示例4:授权用户 EMR 的特定操作权限
1. 新建自定义策略
进入 访问管理策略 页面,单击新建自定义策略。
选择创建策略方式:
选择按策略生成器创建。
在“可视化策略生成器”中选择服务的页面,选择弹性MapReduce (emr),补充以下信息。
效果(必选):选择允许。
服务(必选):选择弹性MapReduce (emr)。
操作(必选):展开全部操作,选中ScaleOutInstance。
资源(必填):选择全部资源。
完成策略授权声明编辑后,点击“下一步”,进入基本信息和关联用户/用户组/角色页面。
在关联用户/用户组/角色页面,新建名为 Operator-emr-ScaleOutInstance 自定义策略,可同时关联用户/用户组/角色快速授权。
单击完成,完成按策略生成器创建自定义策略的操作。
选择按策略语法创建。
选择策略模板时,选择空白模板,单击下一步。
新建名为 Operator-emr-ScaleOutInstance 自定义策略(可自行定义),将策略内容中原有内容清除后,在策略里面配置如下,创建好之后保存即可。
{"statement": [{"action": ["emr:ScaleOutInstance"],"effect": "allow","resource": ["*"]}],"version": "2.0"}
2. 子账号赋权并验证
在用户列表页面找到要赋权的子用户,单击右侧的授权按钮;新建子用户详细操作请参见 新建子用户。
选择自定义策略 Operator-emr-basic和Operator-emr-ScaleOutInstance,并将其授权给子账号,详情参见授权管理 。
以子用户身份登录进行验证,尝试扩容EMR节点,扩容成功。
示例5:授权用户拥有指定资源的操作权限
1. 新建自定义策略
进入 访问管理策略 页面,单击新建自定义策略。
选择创建策略方式:
选择按策略生成器创建。
在“可视化策略生成器”中选择服务的页面,选择弹性MapReduce (emr),补充以下信息。
效果(必选):选择允许。
服务(必选):选择弹性MapReduce (emr)。
操作(必选):展开全部操作,选中TerminateNodes。
资源(必填):选择特定资源,例如,对emr-instance添加资源六段式,资源输入
emr-12345
;对emr-vm添加资源六段式,资源输入emr-vm-12345
。完成策略授权声明编辑后,点击“下一步”,进入基本信息和关联用户/用户组/角色页面。
在关联用户/用户组/角色页面,新建名为 Operator-emr-resource-instance 自定义策略,可同时关联用户/用户组/角色快速授权。
单击完成,完成按策略生成器创建自定义策略的操作。
选择按策略语法创建。
选择策略模板时,选择空白模板,单击下一步。
新建名为 Operator-emr-resource-instance 自定义策略(可自行定义),将策略内容中原有内容清除后,在策略里面配置如下,创建好之后保存即可。
{"statement": [{"action": ["emr:TerminateNodes"],"effect": "allow","resource": ["qcs::emr::uin/12345678
:emr-instance/emr-12345
","qcs::emr::uin/12345678
:emr-vm/emr-vm-12345"]}],"version": "2.0"}
2. 子账号赋权并验证
在用户列表页面找到要赋权的子用户,单击右侧的授权按钮;新建子用户详细操作请参见 新建子用户。
选择自定义策略 Operator-emr-basic和Operator-emr-resource-instance,并将其授权给子账号,详情参见授权管理 。
以子用户身份登录进行验证,尝试分别缩容节点A(节点ID:emr-vm-12345)和节点B。
缩容节点A,缩容成功。
缩容节点B,提示无操作权限。
示例6:授权用户基于标签的操作权限
1. 新建标签并为集群打上标签。
进入 标签列表页面,单击新建标签。
说明:
此处及后续流程以标签 App 举例。

输入标签键(App)和标签值(Dev),单击确定即可创建成功。
在 集群列表 页面选择要打标签的集群,单击上方更多操作,单击编辑标签。
编辑标签中选择之前建立的标签 App,单击确定即可。
2. 新建自定义策略。
进入 访问管理策略 页面,单击新建自定义策略。
选择按策略语法创建。
选择创建策略方式:
选择策略模板时,选择空白模板,单击下一步。
新建名为 Operator-emr-resource_tag 自定义策略(可自行定义),将策略内容中原有内容清除后,在策略里面配置如下,创建好之后保存即可。
{"statement": [{"action": ["emr:ModifyResource"],"condition": {"for_any_value:string_equal": {"qcs:resource_tag": ["App&Dev"]}},"effect": "allow","resource": ["*"]}],"version": "2.0"}
选择按标签授权。
在“可视化策略生成器”中选择服务的页面,选择弹性MapReduce (emr),补充以下信息。
效果(必选):选择允许。
服务(必选):选择弹性MapReduce (emr)。
操作(必选):展开全部操作,选中ModifyResource接口。
在选择标签栏,选择标签键(App)和标签值(Dev)。
在选择条件键,选择resource_tag,条件运算符选择或(for_any_value)。
是否授予不支持标签的接口"resource": "*"权限,选择是。
完成策略授权声明编辑后,点击“下一步”,进入基本信息和关联用户/用户组/角色页面。
在关联用户/用户组/角色页面,新建名为 Operator-emr-resource_tag 自定义策略,可同时关联用户/用户组/角色快速授权。
单击完成,完成按策略生成器创建自定义策略的操作。
3. 子账号赋权并验证。
在用户列表页面找到要赋权的子用户,单击右侧的授权按钮;新建子用户详细操作请参见 新建子用户。
选择自定义策略 Operator-emr-basic和Operator-emr-resource_tag,并将其授权给子账号,详情参见授权管理 。
以子用户身份登录进行验证,尝试分别变配有标签(App&Dev)的节点和无标签(App&Dev)的节点。
操作有标签(App&Dev)的节点,变配成功。
操作无标签(App&Dev)的节点,提示无操作权限。