借助访问控制 RAM 的 RAM 用户(子账号),您可以实现权限分割的目的,按需为 RAM 用户赋予不同权限,并避免因暴露阿里云账号(主账号)密钥造成的安全风险。

使用场景

某企业开通了消息队列 Kafka 服务,该企业需要员工操作消息队列 Kafka 服务所涉及的资源由于每个员工的工作职责不一样,需要的权限也不一样。该企业的需求:

  • 出于安全或信任的考虑,不希望将云账号密钥直接透露给员工,而希望能给员工创建相应的用户账号。

  • 用户账号只能在授权的前提下操作资源,不需要对用户账号进行独立的计量计费,所有开销都计入企业账号名下。

  • 随时可以撤销用户账号的权限,也可以随时删除其创建的用户账号。

使用说明

在使用 RAM 授权时,需要注意以下几点:

  • RAM 主子账号授权只针对控制台和 Open API 的操作,利用 SDK 收发消息跟 RAM 是否授权无关。

    SDK 收发消息与开源客户端行为一致,VPC 内访问无需鉴权,公网访问利用 SASL 进行身份验证。如果想控制 SDK 收发的范围,可以在消息队列 Kafka 控制台的实例详情页设置 IP 白名单。

  • 本文中提及的资源是指实例、Topic 和 Consumer Group;涉及的操作主要是指创建、删除和其它操作,其它操作包括查看 Topic 状态、重置位点等除创建和删除以外的操作。

步骤一:创建 RAM 用户

首先需要使用阿里云账号(主账号)登录 RAM 控制台并创建 RAM 用户。

  1. 登录 RAM 控制台,在左侧导航栏中选择人员管理 > 用户  ,并在用户页面上单击新建用户
  2. 新建用户页面的用户账号信息区域中,输入登录名称显示名称
    说明 登录名称中允许使用小写英文字母、数字、“.”、“_”和“-”,长度不超过 128 个字符。显示名称不可超过 24 个字符或汉字。
  3. (可选)如需一次创建多个用户,则单击添加用户,并重复上一步。
  4. 访问方式区域中,勾选控制台密码登录编程访问,并单击确定
    说明 为提高安全性,请仅勾选一种访问方式。
    • 如果勾选控制台密码登录,则完成进一步设置,包括自动生成默认密码或自定义登录密码、登录时是否要求重置密码,以及是否开启 MFA 多因素认证。
    • 如果勾选编程访问,则 RAM 会自动为 RAM 用户创建 AccessKey(API 访问密钥)。
    注意 出于安全考虑,RAM 控制台只提供一次查看或下载 AccessKeySecret 的机会,即创建 AccessKey 时,因此请务必将 AccessKeySecret 记录到安全的地方。
  5. 手机验证对话框中单击获取验证码,并输入收到的手机验证码,然后单击确定。创建的 RAM 用户显示在用户页面上。

步骤二:为 RAM 用户添加权限

在使用 RAM 用户之前,需要为其添加相应权限。

  1. RAM 控制台左侧导航栏中选择人员管理 > 用户

  2. 用户页面上找到需要授权的用户,单击操作列中的添加权限

  3. 添加权限面板的选择权限区域中,通过关键字搜索需要添加的权限策略 ,并单击权限策略将其添加至右侧的已选择列表中,然后单击确定

    • 系统权限

      消息队列 Kafka 目前仅支持三种系统权限策略:

      权限策略名称 说明
      AliyunKafkaFullAccess 管理消息队列 Kafka 的权限,等同于主账号的权限,被授予该权限的 RAM 用户具有所有消息收发权限且有控制台所有功能操作权限。
      AliyunKafkaPubOnlyAccess 消息队列 Kafka 的发布权限,被授予该权限的 RAM 用户具有使用主账号所有资源通过 SDK 发送消息的权限。
      AliyunKafkaSubOnlyAccess 消息队列 Kafka 的订阅权限,被授予该权限的 RAM 用户具有使用主账号所有资源通过 SDK 订阅消息的权限。
      说明 建议给运维人员授予 AliyunKafkaFullAccess 权限策略,由运维人员去创建和删除资源。给开发人员授予 AliyunKafkaPubOnlyAccessAliyunKafkaSubOnlyAccess 权限策略,可以查看这些资源,但是不能删除和创建。 如果想控制开发人员只能查看某个具体的实例下的资源,可使用以下自定义策略。
    • 自定义策略

      假设 RAM 用户只能查看实例 ID 为 XXX 下的 Topic 和 Consumer Group,可做如下设置:

       ```
       {
           "Version": "1",
           "Statement": [
               {
                   "Action": [
                       "alikafka:PUB",
                       "alikafka:SUB"
                   ],
                   "Resource": [
                       "acs:alikafka:*:*:Kafka_XXX_*",
                       "acs:alikafka:*:*:Local_Kafka_XXX_*",
                       "acs:alikafka:*:*:%RETRY%Kafka_XXX_*"
                   ],
                   "Effect": "Allow"
               }
           ]
       }
      自定义权限策略中所涉及的参数说明如下:
      • Action:把 alikafka:PUBalikafka:PUB 都配上,两者的区分已无实际意义。
      • Resource 的配置说明如下:

        • 配置 acs:alikafka:*:*:Kafka_XXX_* 代表可以访问 XXX 实例的所有云存储 Topic;
        • 配置 acs:alikafka:*:*:Local_Kafka_XXX_* 代表可以访问 XXX 实例的所有 Local 存储 Topic;
        • 配置 acs:alikafka:*:*:%RETRY%Kafka_XXX_* 代表可以访问 XXX实例的所有 Consumer Group。存储类型的说明请参见 Topic 存储最佳实践
  4. 添加权限授权结果页面上,查看授权信息摘要,并单击完成

后续步骤

使用阿里云账号(主账号)创建好 RAM 用户后,即可将 RAM 用户的登录名称及密码或者 AccessKey 信息分发给其他用户。其他用户可以按照以下步骤使用 RAM 用户登录控制台或调用 API。

  • 登录控制台

    1. 打开 RAM 用户登录页面。

    2. RAM 用户登录页面上,输入 RAM 用户登录名称,单击下一步,并输入 RAM 用户密码,然后单击登录

      说明 RAM 用户登录名称的格式为 <$username>@<$AccountAlias><$username>@<$AccountAlias>.onaliyun.com<$AccountAlias> 为账号别名,