MSE支持阿里云账号给RAM用户授予MSE的操作权限,避免因暴露阿里云账号密钥造成的安全风险。本文介绍如何创建RAM用户并授予RAM用户权限,授权后您就可以通过RAM用户使用MSE。

使用场景

某企业开通了微服务引擎MSE服务,由于员工工作职责不同,对资源操作所需权限也不同,现有如下需求:

  • 鉴于安全或信任原因,不希望将云账号密钥直接透露给员工,期望可以为员工相应的账号授予权限。
  • 用户账号只能在授权的前提下操作资源,不需要进行独立的计量计费,所有开销均计入企业账号名下。
  • 随时可以撤销用户账号的权限,也可以随时删除其创建的用户账号。
  • MSE作为一个托管型产品有开发和运维两个角色,运维人员负责做集群的管理、命名空间和权限的管理,开发人员负责配置和服务管理。

使用说明

阿里云账号和RAM用户授权成功后,您就可以通过RAM用户使用MSE的控制台和OpenAPI。

说明 若您希望通过RAM用户使用MSE的客户端,请参见授权SDK访问

步骤一:创建RAM用户

使用阿里云账号登录RAM控制台并创建RAM用户。

  1. 使用阿里云账号登录RAM控制台
  2. 在左侧导航栏,选择身份管理 > 用户
  3. 用户页面,单击创建用户
  4. 创建用户页面的用户账号信息区域,设置用户基本信息。
    • 登录名称:可包含英文字母、数字、半角句号(.)、短划线(-)和下划线(_),最多64个字符。
    • 显示名称:最多包含128个字符。
    • 可选:标签:您可以单击edit,然后输入标签键和标签值。为RAM用户绑定标签,便于后续基于标签的用户管理。
    说明 单击添加用户,可以批量创建多个RAM用户。
  5. 访问方式区域,选中控制台访问OpenAPI调用访问
    • 控制台访问:完成对登录安全的基本设置,包括自动生成或自定义登录密码、是否要求下次登录时重置密码以及是否要求开启多因素认证。
      说明 自定义登录密码时,密码必须满足您在人员管理 > 设置中设置的密码复杂度规则。关于如何设置密码复杂度规则,请参见设置RAM用户密码强度
    • OpenAPI调用访问:自动为RAM用户生成访问密钥(AccessKey),支持通过API或其他开发工具访问阿里云。
    说明 为了保障账号安全,建议仅为RAM用户选择第一种登录方式,避免RAM用户离开组织后仍可以通过访问密钥访问阿里云资源。
  6. 单击确定

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

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

  1. 使用阿里云账号登录RAM控制台
  2. 在左侧导航栏,选择身份管理 > 用户
  3. 用户页面,单击目标RAM用户操作列的添加权限
  4. 添加权限面板的选择权限区域选择权限策略,在文本框中输入要添加的权限策略,单击搜索到的权限策略,然后单击确定
    • 系统权限策略(粗粒度授权)

      微服务引擎MSE目前支持两种粗粒度的系统权限策略。

      权限策略名称说明
      AliyunMSEFullAccess管理微服务引擎MSE的权限,等同于阿里云账号的权限,被授予该权限的RAM用户拥有控制台所有功能的操作权限。
      AliyunMSEReadOnlyAccess微服务引擎MSE的只读权限,被授予该权限的RAM用户具有阿里云账号所有资源的只读权限。
      说明 建议给运维人员授予AliyunMSEFullAccess权限策略,由运维人员去创建和删除资源。给开发人员授予AliyunMSEReadOnlyAccess权限策略,可以查看这些资源,但是不能删除和创建。如果想更细粒度地控制开发人员的权限,您可使用以下自定义权限策略。
    • 自定义权限策略(细粒度授权)

      如果您需要更细粒度地授权,您可以通过创建自定义策略来进行访问控制。创建自定义策略的具体步骤,请参见创建自定义权限策略

      关于Nacos注册中心相关鉴权粒度和配置说明,请参见注册中心细粒度鉴权;关于Nacos配置中心相关鉴权粒度和配置说明,请参见配置中心细粒度鉴权

      为了方便您自定义RAM权限策略,本文提供了微服务引擎MSE版的授权映射表。

      Action权限说明是否为只读类权限
      CreateCluster创建集群
      DeleteCluster删除集群
      ListClusters查看集群列表
      QueryClusterDetail更新集群详情
      RestartCluster重启集群
      RetryCluster重试集群
      UpdateCluster更新集群
      CreateNacosConfig创建Nacos配置
      DeleteNacosConfig删除Nacos配置
      DeleteNacosConfigs批量删除Nacos配置
      GetNacosConfig查看Nacos配置
      GetNacosHistoryConfig查看Nacos配置历史
      ListNacosConfigs查看Nacos配置列表
      ListNacosHistoryConfigs查看Nacos配置历史列表
      UpdateNacosConfig更新Nacos配置
      ListAnsServices查看所有服务
      ListAnsServiceClusters查看某服务的集群
      ListAnsInstances查看某服务的实例
      UpdateNacosInstance更新实例
      DeleteNacosService删除服务
      CreateNacosService创建服务
      UpdateNacosService更新服务
      CreateNacosInstance创建实例
      UpdateNacosCluster更新服务集群
    示例一:授予RAM用户对实例mse-cn-0pp1j8om80a的读写权限。
    说明 本文的mse-cn-0pp1j8om80a指的是InstanceId而非ClusterId。
    {
      "Statement": [
        {
          "Action": "mse:ListClusters",
          "Resource": "acs:mse:*:*:*",
          "Effect": "Allow"
        },
        {
          "Action": "mse:*",
          "Resource": "acs:mse:*:*:instance/mse-cn-0pp1j8om80a",
          "Effect": "Allow"
        }
      ],
      "Version": "1"
    }
    示例二:授予RAM用户对所有实例的读权限。
     {
      "Statement": [
        {
            "Action": [
            "mse:List*",
            "mse:Query*",
            "mse:Get*"
          ],
          "Resource": "acs:mse:*:*:*",
          "Effect": "Allow"
        }
      ],
      "Version": "1"
    }
    示例三:授予RAM用户对实例mse-cn-0pp1j8om80a中命名空间3fd98c48-a709-4061-bba1-e341d79d681b的配置读写权限。

    该场景是一个复杂的场景,要拥有这个细粒度权限需要以下三个层次的权限:

    1. 拥有查看实例列表的权限,这样才能从集群列表中看到对应集群。
    2. 拥有这个集群的所有读权限,这样可以进入这个实例看到所有的资源。
    3. 拥有这个命名空间下面的配置创建和修改的权限。
    {
        "Version": "1",
        "Statement": [{
                "Action": [
                    "mse:ListClusters"
                ],
                "Resource": [
                    "acs:mse:*:*:*"
                ],
                "Effect": "Allow"
            },
            {
                "Action": [
                    "mse:List*",
                    "mse:Query*",
                    "mse:Get*"
                ],
                "Resource": [
                    "acs:mse:*:*:instance/mse-cn-0pp1j8om8"
                ],
                "Effect": "Allow"
            },
            {
                "Action": [
                    "mse:CreateNacosConfig",
                    "mse:UpdateNacosConfig"
                ],
                "Resource": [
                    "acs:mse:*:*:instance/mse-cn-0pp1j8om8/3fd98c48-a709-4061-bba1-e341d79d681b"
                ],
                "Effect": "Allow"
            }
        ]
    }
    示例四:授予RAM用户对实例mse-cn-0pp1j8om80a中指定DataId的配置读写权限。

    该场景是一个复杂的场景,要拥有这个细粒度权限需要以下几个层次的权限:

    1. 拥有查看实例列表的权限,这样才能从集群列表中看到对应集群。
    2. 拥有这个集群的所有读权限,这样进入这个实例可以看到所有的资源。
    3. 拥有这个命名空间下面的配置创建和修改的权限。
    4. 拥有这个Group下面的配置创建和修改的权限。
    5. 资源取值来源:acs:mse:*:*:instance/${instanceId}/${namespaceId}/${groupId}/${dataId}
    {
        "Version": "1",
        "Statement": [{
                "Action": [
                    "mse:ListClusters"
                ],
                "Resource": [
                    "acs:mse:*:*:*"
                ],
                "Effect": "Allow"
            },
            {
                "Action": [
                    "mse:List*",
                    "mse:Query*",
                    "mse:Get*"
                ],
                "Resource": [
                    "acs:mse:*:*:instance/mse-cn-0pp1j8om8"
                ],
                "Effect": "Allow"
            },
            {
                "Action": [
                    "mse:CreateNacosConfig",
                    "mse:UpdateNacosConfig"
                ],
                "Resource": [
    
                    "acs:mse:*:*:instance/mse-cn-0pp1j8om8/3fd98c48-a709-4061-bba1-e341d79d681b/DEFAULT_GROUP/prod.yaml"
                ],
                "Effect": "Allow"
            }
        ]
    }
  5. 添加权限的授权结果页面上,查看授权信息摘要,并单击完成

后续操作

使用阿里云账号创建好RAM用户后,即可将RAM用户的登录名称及密码或者AccessKey信息分发给其他用户。其他用户可以按照以下步骤使用RAM用户登录控制台或调用API。
  • 登录控制台
    1. 打开RAM用户登录页面。
    2. RAM用户登录页面,输入RAM用户登录名称,单击下一步,并输入RAM用户密码,然后单击登录
      说明 RAM用户登录名称的格式为<$username>@<$AccountAlias><$username>@<$AccountAlias>.onaliyun.com<$AccountAlias>为账号别名,如果没有设置账号别名,则默认值为阿里云账号的ID。
    3. 子用户用户中心页面上单击有权限的产品,即可访问控制台。
  • 调用API

    使用RAM用户的AccessKey调用API。在代码中使用RAM用户的AccessKey ID和AccessKey Secret即可。