访问管理实践

最近更新时间:2019-02-21 11:23:23

访问管理概述

访问管理(Cloud Access Management,CAM)是腾讯云提供的一种身份验证和授权服务,主要用于帮助客户安全管理腾讯云账户下的资源的访问权限。在授予权限时,可以对授权的对象、资源、操作进行管理,并支持设置一些策略限制。

功能

主账号资源的授权

可以将主账号的资源授权给其他人员,包括子账号或者是其它主账号,而不需要分享主账号相关的身份凭证。

精细化的权限管理

可以针对不同的资源为不同的人员授予不同的访问权限。例如,可以允许某些子账号拥有某个 COS 存储桶的读权限,而另外一些子账号或者主账号可以拥有某个 COS 存储对象的写权限等。上述资源、访问权限和用户都可以批量打包。

最终一致性

CAM 目前支持腾讯云的多个地域,通过复制策略数据实现在跨地域的数据同步,虽然 CAM 策略的修改会及时提交,不过跨地域的策略同步会导致策略生效的延迟;同时 CAM 使用缓存来提高性能(目前是一分钟缓存),更新需要在缓存过期后生效。

应用场景

企业子账号权限管理

企业内不同岗位的员工需要拥有该企业云资源的最小化访问权限。

场景:某个企业拥有很多云资源,包括 CVM 、 VPC 实例、 CDN 实例、 COS 存储桶和对象等。该企业拥有很多员工,包括开发人员、测试人员、运维人员等。
部分开发人员需要拥有其所在项目相关的开发机云资源的读写权限,测试人员需要拥有其所在项目的测试机云资源的读写权限,运维人员负责机器的购买和日常运营。当企业员工职责或参与项目发生变更,将终止对应的权限。

不同企业之间的权限管理

不同企业间需要进行云资源的共享。

场景:某企业拥有很多云资源,该企业希望能专注产品研发,而将云资源运维工作授权给其他运营企业来实施。当运营企业的合同终止时,将收回对应的管理权限。

访问管理策略语法

策略(policy)由若干元素构成,用来描述授权的具体信息。核心元素包括委托人(principal)、操作(action)、资源(resource)、生效条件(condition)以及效力(effect)。如需了解更多详情,请查阅 访问策略语言概述

说明:

  • 元素仅支持小写。它们在描述上没有顺序要求。
  • 对于策略没有特定条件约束的情况, condition 元素是可选项。
  • 在控制台中不允许写入 principal 元素,仅支持在策略管理 API 中和策略语法相关的参数中使用 principal 。

核心元素

核心元素 描述 是否必填
版本 version 描述策略语法版本。目前仅允许值为2.0
委托人 principal 用于描述策略授权的实体。包括用户(开发商、子账号、匿名用户)、用户组 仅支持在策略管理 API 中策略语法相关的参数中使用该元素
语句 statement 用于描述一条或多条权限的详细信息。该元素包括 action 、 resource 、 condition 、 effect 等多个其他元素的权限或权限集合。一条策略有且仅有一个 statement 元素
操作 action 用于描述允许或拒绝的操作。操作可以是 API (以 name 前缀描述)或者功能集(一组特定的 API ,以 permid 前缀描述)
资源 resource 用于描述授权的具体数据。资源用六段式描述。每款产品的资源定义详情会有所区别。有关如何指定资源的信息,请参阅您编写的资源声明所对应的产品文档
生效条件 condition 用于描述策略生效的约束条件。条件包括操作符、操作键和操作值组成。条件值可包括时间、 IP 地址等信息。有些服务允许您在条件中指定其他值
效力 effect 用于描述声明产生的结果,包括 allow(允许)和 deny(显式拒绝)两种情况

策略限制

限制项 限制值
一个主账号中的用户组数 20
一个主账号中的子账号数 1000
一个主账号中的角色数 250
一个子账号可加入的用户组数 10
一个协作者可协作的主账号数 10
一个用户组中的子账号数 100
一个主账号可创建的策略数 1000
一个用户、用户组或角色的关联策略数 200
一个自定义策略最大字符数 4096

策略示例

该样例描述为:允许属于主账号 ID 为100000000001(APPID 为1250000000)下的子账号 ID 100000000011以及组 ID 18825, 对北京地域的存储桶 examplebucket-bj 和广州地域的存储桶 examplebucket-gz 下的对象 exampleobject,在访问 IP 为 10.*.*.10/24 网段时,拥有所有 COS 读 API 的权限以及写对象的权限,以及可以发送消息队列的权限。

{
    "version": "2.0",
    "principal": {
        "qcs": ["qcs::cam::uin/100000000001:uin/100000000011",
            "qcs::cam::uin/100000000001:groupid/18825"
        ]
    },
    "statement": [{
            "effect": "allow",
            "action": ["name/cos:PutObject", "permid/280655"],
            "resource": ["qcs::cos:ap-beijing:uid/1250000000:examplebucket-bj-1250000000/*",
                "qcs::cos:ap-guangzhou:uid/1250000000:examplebucket-gz-1250000000/exampleobject"
            ],
            "condition": {
                "ip_equal": {
                    "qcs:ip": "10.*.*.10/24"
                }
            }
        },
        {
            "effect": "allow",
            "action": "name/cmqqueue:Sendmessages",
            "resource": "*"
        }
    ]
}