您可以按需为RAM用户和RAM角色赋予不同的权限,仅具有权限的RAM用户和RAM角色才可以在ASM控制台上进行创建网格实例、更新服务网格功能配置等操作,避免因暴露阿里云账号密钥而造成安全风险。本文以RAM用户为例,介绍如何为RAM用户和RAM角色进行RAM授权。

前提条件

背景信息

RAM用户和RAM角色的使用场景不同,授予的权限也不同,具体区别如下:

授予RAM用户和RAM角色系统策略

ASM默认已创建AliyunASMReadOnlyAccess和AliyunASMFullAccess策略,您直接授权使用即可。以下为系统策略的详细介绍:
  • AliyunASMReadOnlyAccess

    只读管理阿里云服务网格(ASM)的权限,仅看服务网格状态等只读接口权限,无法对服务网格进行变更操作。

  • AliyunASMFullAccess

    管理阿里云服务网格(ASM)的权限,RAM用户拥有该授权后,对于镜像资源的权限等同于阿里云账号,可以做任意操作。

以下以授予AliyunASMReadOnlyAccess权限策略为例,介绍如何授予RAM用户系统策略:

  1. 使用阿里云账号登录RAM控制台
  2. 在左侧导航栏,选择身份管理 > 用户
    说明 如果您是授予RAM角色权限,此步骤您需要在左侧导航栏选择身份管理 > 角色
  3. 用户页面,单击目标RAM用户操作列的添加权限
    说明 如果您是授予RAM角色权限,此步骤您需要在角色页面单击目标角色右侧操作列下的添加权限
  4. 添加权限面板,为RAM用户和RAM角色添加权限。
    1. 选择授权应用范围。
      • 整个云账号:权限在当前阿里云账号内生效。
      • 指定资源组:权限在指定的资源组内生效。
        说明 指定资源组授权生效的前提是该云服务已支持资源组。更多信息,请参见支持资源组的云服务
    2. 输入被授权主体。
      被授权主体即需要授权的RAM用户,系统会自动填入当前的RAM用户,您也可以添加其他RAM用户。
    3. 选择权限下单击系统策略,在文本框中输入AliyunASMReadOnlyAccess,然后单击AliyunASMReadOnlyAccess。
    4. 单击确定
  5. 单击完成

授予RAM用户和RAM角色自定义策略

如果您想对权限进行细粒度控制,您可以自定义策略,然后授予RAM用户和RAM角色自定义策略权限。

  1. 使用具有RAM权限的账号登录RAM控制台
  2. 创建授予访问ASM实例的权限策略。
    1. 在左侧导航栏,选择权限管理 > 权限策略
    2. 权限策略页面,单击创建权限策略
    3. 创建权限策略页面单击脚本编辑,在策略内容中编写您的授权策略内容,然后单击下一步
      通过改变Statement中的Action字段,可以实现API的细粒度鉴权。本文以授予受限访问权限策略为例,受限访问权限策略包括除RBAC授权之外的服务网格的所有RAM权限,拥有该权限的RAM用户不可以对其他用户进行RBAC授权,但拥有除此之外的其他所有权限。
      {
          "Statement": [
              {
                  "Effect": "Allow",
                  "Action": [
                      "servicemesh:Add*",
                      "servicemesh:CRBatchDeletion",
                      "servicemesh:Create*",
                      "servicemesh:Delete*",
                      "servicemesh:Describe*",
                      "servicemesh:Enable*",
                      "servicemesh:Disable*",
                      "servicemesh:Get*",
                      "servicemesh:InvokeApiServer",
                      "servicemesh:List*",
                      "servicemesh:Modify*",
                      "servicemesh:Re*",
                      "servicemesh:Run*",
                      "servicemesh:Set*",
                      "servicemesh:Sync*",
                      "servicemesh:Update*",
                      "servicemesh:Upgrade*"
                  ],
                  "Resource": "*"
              },
              {
                  "Effect": "Allow",
                  "Action": [
                      "log:ListLogStores",
                      "log:ListDashboard",
                      "log:GetDashboard",
                      "log:ListSavedSearch",  
                      "log:ListProject"
                  ],
                  "Resource": "*"
              },
              {
                  "Effect": "Allow",
                  "Action": "log:GetLogStoreLogs",
                  "Resource": "acs:log:*:*:project/*/logstore/audit-*"
              },
              {
                  "Effect": "Allow",
                  "Action": "log:GetLogStoreLogs",
                  "Resource": "acs:log:*:*:project/*/logstore/istio-*"
              },
              {
                  "Action": "ram:CreateServiceLinkedRole",
                  "Resource": "*",
                  "Effect": "Allow",
                  "Condition": {
                      "StringEquals": {
                          "ram:ServiceName": "servicemesh.aliyuncs.com"
                      }
                  }
              }
          ],
          "Version": "1"
      }
    4. 基本信息区域输入策略名称,本文设置为ASMPolicy1,然后单击确定
  3. 授予RAM用户和RAM角色权限策略。
    1. 在左侧导航栏选择身份管理 > 用户
      说明 如果您是授予RAM角色权限,此步骤您需要在左侧导航栏选择身份管理 > 角色
    2. 用户页面单击目标RAM用户右侧操作列下的添加权限
      说明 如果您是授予RAM角色权限,此步骤您需要在角色页面单击目标角色右侧操作列下的添加权限
    3. 添加权限对话框设置授权范围整个云账号,系统会自动填入当前的RAM用户为授权主体,在选择权限下单击自定义策略,然后输入创建的权限策略名称ASMPolicy1,单击ASMPolicy1,然后单击确定

自定义策略场景示例

场景一:授予单个网格实例的管理权限

您可以使用以下脚本创建拥有单个网格实例管理权限的策略,授予RAM用户或RAM角色该权限策略后,RAM用户或RAM角色只能管理指定ID的网格实例。
说明 创建权限策略时,请将以下脚本中的<ServicemeshId>替换成实际需要授权的网格实例ID。
{
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "servicemesh:*",
      "Resource": "acs:servicemesh:*:*:servicemesh/<ServicemeshId>"
    },
    {
      "Effect": "Allow",
      "Action": "servicemesh:DescribeServiceMeshes",
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": "log:GetLogStoreLogs",
      "Resource": "acs:log:*:*:project/*/logstore/audit-<ServicemeshId>"
    },
    {
      "Effect": "Allow",
      "Action": "log:GetLogStoreLogs",
      "Resource": "acs:log:*:*:project/*/logstore/istio-<ServicemeshId>"
    }
  ],
  "Version": "1"
}

场景二:授予使用ASM控制台管理Istio资源的读写权限

ASM默认提供的AliyunASMReadOnlyAccess系统策略可以授予RAM用户或RAM角色只读管理阿里云服务网格ASM的权限,但被授予此权限的RAM用户或RAM角色无法管理网格中的Istio资源。

您可以使用以下脚本创建拥有Istio资源读写权限的策略,授予RAM用户或RAM角色该权限策略后,RAM用户或RAM角色可以正常使用ASM控制台管理网格中的Istio资源,同时无法对网格的其它部分(例如功能设置等)进行任何变更。

{
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "servicemesh:List*",
                "servicemesh:Describe*",
                "servicemesh:Get*",
                "servicemesh:InvokeApiServer"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "log:ListLogStores",
                "log:ListDashboard",
                "log:GetDashboard",
                "log:ListSavedSearch"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": "log:GetLogStoreLogs",
            "Resource": "acs:log:*:*:project/*/logstore/audit-*"
        }
    ],
    "Version": "1"
}

场景三:授予对其它用户或角色进行RBAC授权的权限

您可以使用以下脚本创建拥有对其它用户或角色进行RBAC授权权限的策略,授予RAM用户或RAM角色该权限策略后,RAM用户或RAM角色可以使用ASM控制台管理其它RAM角色或RAM用户的RBAC权限,同时无法操作或查看任何网格实例。
{
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "servicemesh:DescribeUserPermissions",
                "servicemesh:GrantUserPermissions",
                "servicemesh:DescribeServiceMeshes",
                "servicemesh:DescribeUsersWithPermissions"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": "ims:ListUserBasicInfos",
            "Resource": "*"
        }
    ],
    "Version": "1"
}