注册配置中心授权

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

使用场景

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

  • 鉴于安全或信任原因,不希望将云账号密钥直接透露给员工,期望可以为员工相应的账号授予权限。

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

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

  • MSE作为一个托管型产品,有开发和运维两个角色,其中运维人员负责集群的管理、命名空间和权限的管理,而开发人员负责配置和服务管理。

使用说明

本文档内容涉及图中引擎管控链路的访问权限的配置和使用,即阿里云账号授予RAM用户权限后,被授予该权限的RAM用户拥有对控制台(OpenAPI)的相关操作权限。

幻灯片1.JPG

说明

关于引擎直连链路的访问鉴权配置和使用,即Nacos Client可以通过RAM用户访问MSE的Nacos的具体操作,请参见授权SDK访问

步骤一:创建RAM用户

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

  1. 使用阿里云账号(主账号)或RAM管理员登录RAM控制台

  2. 在左侧导航栏,选择身份管理 > 用户

  3. 用户页面,单击创建用户

    image

  4. 创建用户页面的用户账号信息区域,设置用户基本信息。

    • 登录名称:可包含英文字母、数字、半角句号(.)、短划线(-)和下划线(_),最多64个字符。

    • 显示名称:最多包含128个字符或汉字。

    • 标签:单击edit,然后输入标签键和标签值。为RAM用户绑定标签,便于后续基于标签的用户管理。

    说明

    单击添加用户,可以批量创建多个RAM用户。

  5. 访问方式区域,选中控制台访问使用永久 AccessKey 访问

    • 控制台访问:完成对登录安全的基本设置,包括自动生成或自定义登录密码、是否要求下次登录时重置密码以及是否要求开启多因素认证。

      说明

      自定义登录密码时,密码必须满足您在身份管理 > 设置中设置的密码复杂度规则。关于如何设置密码复杂度规则,请参见设置RAM用户密码强度

    • 使用永久 AccessKey 访问:自动为RAM用户生成访问密钥(AccessKey),支持通过API或其他开发工具访问阿里云。

    说明

    为了保障账号安全,建议仅为RAM用户选择第一种登录方式,避免RAM用户离开组织后仍可以通过访问密钥访问阿里云资源。

  6. 单击确定

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

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

  1. 使用RAM管理员登录RAM控制台

  2. 在左侧导航栏,选择身份管理 > 用户

  3. 用户页面,单击目标RAM用户操作列的添加权限

    image

    您也可以选中多个RAM用户,单击用户列表下方的添加权限,为RAM用户批量授权。

  4. 新增授权面板,选择权限策略。在文本框中输入要添加的权限策略,单击搜索到的权限策略,然后单击确认新增授权

    • 系统权限策略(粗粒度授权

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

      权限策略名称

      说明

      AliyunMSEFullAccess

      管理微服务引擎MSE的权限,等同于阿里云账号的权限,被授予该权限的RAM用户拥有控制台所有功能的操作权限。

      AliyunMSEReadOnlyAccess

      微服务引擎MSE的只读权限,被授予该权限的RAM用户具有阿里云账号所有资源的只读权限。

      说明

      建议给运维人员授予AliyunMSEFullAccess权限策略,由运维人员去创建和删除资源。给开发人员授予AliyunMSEReadOnlyAccess权限策略,可以查看这些资源,但是不能删除和创建。如果想更细粒度地控制开发人员的权限,您可使用以下自定义权限策略。

    • 自定义权限策略(细粒度授权

      说明

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

      Action

      权限说明

      是否为只读类权限

      CreateCluster

      创建集群

      DeleteCluster

      删除集群

      QueryClusterDetail

      查询集群详情

      RestartCluster

      重启集群

      RetryCluster

      重试集群

      UpdateCluster

      更新集群

      CreateNacosConfig

      创建Nacos配置

      DeleteNacosConfig

      删除Nacos配置

      DeleteNacosConfigs

      批量删除Nacos配置

      GetNacosConfig

      查看Nacos配置

      GetNacosHistoryConfig

      查看Nacos配置历史

      UpdateNacosConfig

      更新Nacos配置

      UpdateNacosInstance

      更新实例

      DeleteNacosService

      删除服务

      CreateNacosService

      创建服务

      UpdateNacosService

      更新服务

      CreateNacosInstance

      创建实例

      UpdateNacosCluster

      更新服务集群

      以下接口仅支持授权到账号级别,无法支持按实例权限筛选展示。

      Action

      权限说明

      是否为只读类权限

      ListClusters

      查看集群列表

      以下接口仅支持授权到实例级别,无法支持细粒度的权限筛选展示。

      Action

      权限说明

      是否为只读类权限

      ListNacosConfigs

      查看Nacos配置列表

      ListNacosHistoryConfigs

      查看Nacos配置历史列表

      ListAnsServices

      查看所有服务

      ListAnsServiceClusters

      查看某服务的集群

      ListAnsInstances

      查看某服务的实例

    示例一:授予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"
            }
        ]
    }

    示例五:授予RAM用户对实例mse-cn-0pp1j8om80a中指定服务的配置读写权限。

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

    1. 拥有查看实例列表的权限,这样才能从集群列表中看到对应集群。

    2. 拥有这个集群的所有读权限,这样进入这个实例可以看到所有的资源。

    3. 拥有这个命名空间下的配置创建和修改权限。

    4. 拥有这个Group下面的配置创建和修改的权限。

    5. 资源取值来源:acs:mse:*:*:instance/${instanceId}/${namespaceId}/${groupId}/${serviceName}

      {
          "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/test-service"
                  ],
                  "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即可。