全部产品
阿里云办公

RAM主子账号授权

更新时间:2018-10-16 19:04:03

简介

RAM (Resource Access Management) 是阿里云为客户提供的集中式访问控制服务,其核心功能主要包括用户身份与授权管理,应用场景可以覆盖企业子账号与分权管理、针对移动 APP 的临时授权管理,和不同组织之间的资源互操作与授权管理。更多关于 RAM 的介绍可前往 RAM 访问控制 查看。

消息队列(MQ)已全面对接 RAM 系统,通过 RAM 您可以对消息队列的 Topic 资源进行安全访问控制,包括 Topic 的创建和删除、消息的发布和订阅等权限的管理。

同时,MQ 控制台目前仍保留了权限管理,即您可以选择在 RAM 控制台还是 MQ 控制台进行权限管理。若您再两处都进行了权限配置,则系统处理逻辑如下:

  • 判断某子账号是否具有某项权限:只要在 RAM 控制台或 MQ 控制台任一平台上对该子账号授予了该项权限,该子账号就具有该项权限。
  • 判断某子账号是否不具有某项权限:只有当某子账号在 RAM 控制台和 MQ 控制台两处平台上都未被授予某项权限时,该子账号才不具有该项权限。

注意:系统进行判断时,会优先校验 RAM 中的权限配置,因此推荐您在 RAM 中进行权限配置即可。

RAM 基本概念

为了方便您更好地使用消息队列的访问控制功能,本文提供了以下几个关键术语的介绍。更多关于 RAM 的术语解释,请参考 RAM 相关术语

云账户(主账号)

云账户是阿里云资源归属、资源使用计量计费的基本主体。当用户开始使用阿里云服务时,首先需要注册一个云账户。云账户为其名下所拥有的资源付费,并对其名下所有资源拥有完全权限。默认情况下,资源只能被属主(ResourceOwner)所访问,任何其他用户访问都需要获得属主的显式授权。所以从权限管理的角度来看,云账户就是操作系统的 root 或 Administrator,所以我们有时称它为 根账户 或 主账户(主账号)。

RAM 用户 (子账号)

RAM 允许在一个云账户下创建多个 RAM 用户(可以对应企业内的员工、系统或应用程序)。RAM 用户不拥有资源,没有独立的计量计费,这些用户由所属云账户统一控制和付费。RAM 用户是归属于云账户,只能在所属云账户的空间下可见,而不是独立的云账户。RAM 用户必须在获得云账户的授权后才能登录控制台或使用 API 操作云账户下的资源。

资源(Resource)

资源是云服务呈现给用户与之交互的对象实体的一种抽象。对于消息队列而言,Topic 是其唯一资源。

每个资源有一个全局的阿里云资源名称(Aliyun Resource Name, ARN)。格式如下:

acs:<service-name>:<region>:<account-id>:<resource-relative-id>

该格式的各组成部分代表的含义如下:

  • acs: Alibaba Cloud Service 的首字母缩写,表示阿里云的公有云平台;
  • service-name: 服务名称,消息队列的服务名称为 mq;
  • region: 区域信息,也可使用通配符 “*” 号来代替。
    注意:目前 MQ 授权策略不支持 region,此处必须设置为”*“。
  • account-id: 阿里云账号 ID,例如 1234567890123456;
  • resource-relative-id: Topic 资源,填写具体的名称即可。

示例:

名称为 acs:mq:*:1234567890123456:TopicA 的资源表示的含义是:

  • 消息队列 MQ 资源;
  • 资源的 owner 是 1234567890123456;
  • 资源名称是 TopicA。

操作(Action)

操作定义了资源相关的权限控制。消息队列 MQ 定义了三种操作:

操作 含义
PUB 发布权限,包括在 MQ 控制台上创建生产者以及通过 SDK 进行消息发送的权限。
SUB 订阅权限,包括在 MQ 控制台上创建消费者以及通过 SDK 进行消息订阅的权限。
* 包含了 PUB 和 SUB 的操作。

授权策略

消息队列支持云账户(主账号)将 Topic 资源授权给 RAM 用户(子账号),有权限的 RAM 用户可在消息队列控制台上进行资源的管理,以及通过 SDK 进行消息的发布与订阅。

系统默认策略

消息队列目前支持三种默认授权策略,您可以按照以下步骤查看:

  1. 登录RAM 控制台,点击进入策略管理>系统授权策略
  2. 策略名或备注的搜索框中输入“MQ”, 单击搜索。您便可以看到目前消息队列支持的三种授权策略。

关于这三种授权策略的具体说明如下:

AliyunMQFullAccess:消息队列的管理权限。被授予该权限的 RAM 用户除了具有主账户所有资源的所有操作权限外,还可以代替主账户在消息队列的控制台上进行资源的管理,比如创建和删除 Topic、生产者和消费者。需要注意的是该 RAM 用户创建的资源所有者为主账户。

AliyunMQPubOnlyAccess:消息队列的发布权限。被授予该权限的 RAM 用户具有主账号所有资源的发布权限,包括 MQ 控制台上创建生产者以及通过 SDK 进行消息发送的权限,但不具有删除生产者的权限。

AliyunMQSubOnlyAccess:消息队列的订阅权限。被授予该权限的 RAM 用户具有主账号所有资源的订阅权限,包括 MQ 控制台上创建消费者以及通过 SDK 进行消息订阅的权限,但不具有删除消费者的权限。

建议:

您可通过组合 AliyunMQPubOnlyAccess、AliyunMQSubOnlyAccess 两种策略,将主账户所有资源的发布和订阅权限授予给 RAM 用户。

与 AliyunMQFullAccess 策略相比,这种组合策略并不会将消息队列的管理权限授予 RAM 用户,也就是说组合策略没有 Topic 资源的创建、删除等管理操作权限。

自定义策略

通常情况下,消息队列提供的三种系统授权策略已经能满足大部分业务需求,如果您需要有更细粒度的授权需求,那么可以通过创建自定义策略来进行访问控制。

可参考创建自定义授权策略,按文中步骤创建自定义策略。

以下是一个自定义策略的示例:

  1. {
  2. "Version": "1",
  3. "Statement": [
  4. {
  5. "Action": "mq:PUB",
  6. "Resource": [
  7. "acs:mq:*:*:TopicA",
  8. "acs:mq:*:*:TopicB"
  9. ],
  10. "Effect": "Allow"
  11. }
  12. ]
  13. }

该示例表示:

  • 资源名称: TopicA、TopicB;
  • 操作权限:发布权限,包括创建生产者以及通过 SDK 进行消息订阅的权限。

给 RAM 用户授权

首先,请参考RAM 用户创建了解如何创建 RAM 用户,以及参考RAM 用户授权了解授权相关的基本操作以及用户组授权的概念。

授权步骤

主账号给 RAM 用户授权的具体步骤如下:

  1. 使用主账号登录RAM 控制台
  2. 点击左侧导航栏中的用户管理
  3. 找到需要授权的用户(可通过登录名进行搜索),并点击其右侧操作栏目下的授权按钮进入编辑个人授权策略页面。
  4. 添加需要的授权策略(可按关键词进行搜索),并点击确认
    • 从左侧可选授权策略下选择需要的策略,点击右向箭头(即授权)将其添加到已选授权策略中。
    • 反之,通过左向箭头可将右侧已选授权策略取消。

RAM 用户权限校验

RAM 用户可登录消息队列控制台进行检验。登录消息队列控制台后,在Topic 管理页面可以看到被授权的所有 Topic 资源。

登录步骤如下:

  1. 登录RAM 控制台
  2. 在 RAM 控制台左侧的产品列表中找到消息队列 ,点击即跳转到消息队列控制台。或者直接点击MQ 控制台进入。

RAM 用户使用指南

子账号(RAM 用户)可登录消息队列控制台查看被授权的 Topic 资源,并为授权的 Topic 创建相应的生产者和消费者,然后便可通过 SDK 进行消息的发布和订阅。

注意:RAM 子账号被授权某 Topic 后,不可直接使用该 Topic 对应的主账号的 Producer ID 和 Consumer ID,否则会导致心跳连接异常。务必使用 RAM 子账号登录 MQ 控制台,给被授权的 Topic 分别新建 Producer ID 和 Consumer ID。

操作步骤

  1. 登录RAM 控制台
  2. 在 RAM 控制台左侧的产品列表中找到消息队列 ,点击即可跳转到消息队列控制台。或者在 RAM 子账号登录态下直接点击MQ 控制台 进入。
  3. 点击左侧导航栏中的Topic 管理,找到被授权的 Topic,点击右侧操作栏目中的创建生产者创建 Producer ID, 或点击创建消费者创建 Consumer ID。
    注意:RAM 子账号创建的 Producer ID、Consumer ID 相互隔离,不可与其它 RAM 子账号混用,亦不可与主账号混用。
  4. 使用创建好的 Producer ID 和 Consumer ID ,通过 SDK 进行消息的收发。

注意:通过 SDK 进行消息收发前,需要先使用 RAM 子账号的 AccessKey 和 SecrectKey 进行身份认证。具体 AccessKey 信息请参见创建 RAM 用户中的《为用户创建 AK》部分。