如果阿里云Elasticsearch的系统策略无法满足您的需求,可以通过创建自定义策略实现精细化权限管理。本文介绍如何创建自定义权限策略,并提供实例和标签权限策略配置示例供您参考。

前提条件

了解权限策略语言的基本结构和语法。详细信息,请参见权限策略语法和结构

背景信息

阿里云Elasticsearch支持以下两种系统策略:
  • AliyunElasticsearchReadOnlyAccess:只读访问阿里云Elasticsearch或Logstash的权限,可用于只读用户。
  • AliyunElasticsearchFullAccess:管理阿里云Elasticsearch或Logstash的权限,可用于管理员。
说明
  • 以上两种权限仅为RAM用户授予阿里云Elasticsearch或Logstash的权限,不包括云监控和Tags权限,使用时需自定义对应权限。您也可参见管理员权限配置。
  • 授权范围仅支持云账号全部资源,不支持指定资源组。
  • 本文中的云账号是指阿里云主账号。

操作步骤

  1. 云账号登录RAM控制台
  2. 在左侧导航栏的权限管理菜单下,单击权限策略管理
  3. 单击创建权限策略
  4. 填写策略名称备注
  5. 配置模式选择脚本配置
  6. 策略内容区域,选择并导入已有系统策略后适当修改。
    策略内容区域
    说明 在搜索框输入关键字可以进行模糊搜索。
    根据需求输入具体的权限脚本,例如:
    • 访问主账号的专有网络VPC(Virtual Private Cloud)权限。
      "elasticsearch:DescribeVpcs","elasticsearch:DescribeVswitches"
      说明 策略内容可参见系统模板AliyunVPCReadOnlyAccess
    • RAM用户订单权限。
      ["bss:PayOrder"] 
      说明 策略内容可参见系统模板AliyunBSSOrderAccess
    • API对应权限。
      Method URI Resource Action
      GET /instances instances/* ListInstance
      POST /instances instances/* CreateInstance
      GET /instances/$instanceId instances/$instanceId DescribeInstance
      DELETE /instances/$instanceId instances/$instanceId DeleteInstance
      POST /instances/$instanceId/actions/restart instances/$instanceId RestartInstance
      PUT /instances/$instanceId instances/$instanceId UpdateInstance

    具体示例,请参见权限策略示例

  7. 单击确定

权限策略示例

  • 管理员权限策略
    以下示例设置为账号ID为<UID>的主账号下的某个RAM用户授权,使该用户拥有所有Elasticsearch实例的所有操作权限。
    {
        "Statement": [
            {
                "Action": [
                    "elasticsearch:*"
                ],
                "Effect": "Allow",
                "Resource": "*"
            },
            {
                "Action": [
                    "elasticsearch:ListInstance",
                    "elasticsearch:ListSnapshotReposByInstanceId"
                ],
                "Effect": "Allow",
                "Resource": "acs:elasticsearch:cn-hangzhou:<UID>:instances/*"
            },
            {
                "Action": [
                    "elasticsearch:ListCollectors"
                ],
                "Effect": "Allow",
                "Resource": [
                    "acs:elasticsearch:*:*:collectors/*"
                ]
            },
            {
                "Action": [
                    "cms:ListProductOfActiveAlert",
                    "cms:ListAlarm",
                    "cms:QueryMetricList"
                ],
                "Effect": "Allow",
                "Resource": "*"
            },
            {
                "Action": [
                    "elasticsearch:ListTags"
                ],
                "Effect": "Allow",
                "Resource": "acs:elasticsearch:*:*:tags/*"
            },
            {
                "Action": [
                    "elasticsearch:ListLogstash"
                ],
                "Effect": "Allow",
                "Resource": "acs:elasticsearch:*:<UID>:logstashes/*"
            },
            {
                "Effect": "Allow",
                "Action": [
                    "elasticsearch:DescribeVpcs",
                    "elasticsearch:DescribeVswitches"
                ],
                "Resource": [
                    "acs:elasticsearch:*:<UID>:vswitch/*",
                    "acs:elasticsearch:*:<UID>:vpc/*"
                ]
            },
            {
                "Action": "bss:PayOrder",
                "Effect": "Allow",
                "Resource": "*"
            }
        ],
        "Version": "1"
    }
  • 操作特定实例权限策略
    以下示例设置为账号ID为<UID>的主账号下的某个RAM用户授权,使该用户拥有以下权限:
    • 底层云监控权限
    • 指定实例,除安全配置(删除实例、配置公网和私网访问白名单等)外的所有Elasticsearch相关操作的权限
    • 查看实例列表的权限
    • 查看所有实例标签的权限
    • 查看采集器列表的权限
    {
        "Statement": [
            {
                "Action": [
                    "elasticsearch:*"
                ],
                "Effect": "Allow",
                "Resource": "acs:elasticsearch:*:<UID>:instances/<instanceId>"
            },
            {
                "Action": [
                    "cms:ListProductOfActiveAlert",
                    "cms:ListAlarm",
                    "cms:QueryMetricList"
                ],
                "Effect": "Allow",
                "Resource": "*"
            },
            {
                "Action": [
                    "elasticsearch:DeleteInstance",
                    "elasticsearch:UpdatePublicNetwork",
                    "elasticsearch:UpdateWhiteIps",
                    "elasticsearch:ModifyWhiteIps",
                    "elasticsearch:TriggerNetwork"
                ],
                "Effect": "Deny",
                "Resource": "acs:elasticsearch:*:<UID>:instances/*"
            },
            {
                "Action": [
                    "elasticsearch:ListTags"
                ],
                "Effect": "Allow",
                "Resource": "acs:elasticsearch:*:<UID>:tags/*"
            },
            {
                "Action": [
                    "elasticsearch:ListInstance",
                    "elasticsearch:ListSnapshotReposByInstanceId"
                ],
                "Effect": "Allow",
                "Resource": "acs:elasticsearch:*:<UID>:instances/*"
            },
            {
                "Action": [
                    "elasticsearch:ListCollectors"
                ],
                "Effect": "Allow",
                "Resource": "acs:elasticsearch:*:<UID>:collectors/*"
            },
            {
                "Action": [
                    "elasticsearch:ListLogstash"
                ],
                "Effect": "Allow",
                "Resource": "acs:elasticsearch:*:<UID>:logstashes/*"
            },
            {
                "Action": [
                    "elasticsearch:GetEmonProjectList"
                ],
                "Effect": "Allow",
                "Resource": "acs:elasticsearch:*:*:emonProjects/*"
            },
            {
                "Action": [
                    "elasticsearch:getEmonUserConfig"
                ],
                "Effect": "Allow",
                "Resource": "acs:elasticsearch:*:*:emonUserConfig/*"
            }
        ],
        "Version": "1"
    }
表 1. Action说明
Action 说明
[
  "cms:ListProductOfActiveAlert",
  "cms:ListAlarm",
  "cms:QueryMetricList"
]
云监控权限,具体说明如下:
  • cms:ListProductOfActiveAlert:获取主账号已开通云监控服务的产品。
  • cms:ListAlarm:查询指定或全部报警规则设置。
  • cms:QueryMetricList:查询一段时间内指定产品实例的监控数据。
[
  "bss:PayOrder"
]
支付订单的权限。授权后,RAM用户可在购买实例时,支付订单。
[
  "elasticsearch:DescribeVpcs",
  "elasticsearch:DescribeVswitches"
]
访问主账号的专有网络和虚拟交换机列表权限。授权后,在购买实例时,RAM用户可选择主账号创建的专有网络和虚拟交换机。
注意 设置RAM用户购买实例的权限时,需要同时配置["bss:PayOrder"] Action,否则购买时,会出现无权限的错误。
[
  "elasticsearch:*"
]
操作Elasticsearch实例的所有权限。授权后,RAM用户可对所有或指定实例执行任意操作。
注意 elasticsearch:*不包括高级监控告警、云监控、Tags权限,这些权限需要单独设置。如果没有设置,进入包含这些功能的页面后,会出现无权限的错误。但确认后,可以在该页面中使用其他已授权的功能。
[
  "elasticsearch:ListTags"
]
查看Elasticsearch实例标签的权限。授权后,RAM用户可查看Elasticsearch实例的标签。
[
  "elasticsearch:ListInstance",
  "elasticsearch:ListSnapshotReposByInstanceId" 
]
  • elasticsearch:ListInstance:查看Elasticsearch实例列表的权限。
  • elasticsearch:ListSnapshotReposByInstanceId:查看跨集群OSS仓库设置列表权限。
[
  "elasticsearch:ListCollectors"
]
查看Beats采集器列表的权限。授权后,RAM用户可查看控制台中包含的所有Beats采集器。
[
  "elasticsearch:ListLogstash"
]
查看Logstash实例列表的权限。授权后,RAM用户可在实例列表页面中,查看对应区域下包含的所有Logstash实例。
[
  "elasticsearch:DeleteInstance",
  "elasticsearch:UpdatePublicNetwork",
  "elasticsearch:TriggerNetwork"
]
  • elasticsearch:DeleteInstance:删除实例的权限。
  • elasticsearch:UpdatePublicNetwork:修改实例公网访问白名单的权限。
  • elasticsearch:TriggerNetwork:开启或关闭Elasticsearch、Kibana的公网或私网访问。
说明 此部分的Effect设置为Deny,表示不允许RAM用户执行以上操作。
[
  "elasticsearch:GetEmonProjectList"
]
获取集群监控项目列表的权限。
注意 此Action需要与["elasticsearch:getEmonUserConfig"] Action一起使用,否则在进入集群监控页面时,会提示无权限。
[
  "elasticsearch:getEmonUserConfig"
]
获取集群监控用户配置的权限。
表 2. Effect说明
Effect 说明
Allow 允许RAM用户执行Action中设置的操作。
Deny 拒绝RAM用户执行Action中设置的操作。
说明
  • <UID>:替换为您主账号的ID。将鼠标移至控制台右上角的用户头像上,单击安全设置安全设置页面中的账号ID即为<UID>
  • <instanceId>:替换待授权的目标实例ID。获取方式,请参见查看实例的基本信息
  • Resource中,*表示所有实例资源,<instanceId>表示指定实例资源。详细说明,请参见授权资源类型

后续步骤

自定义策略创建完成后,使用主账号在RAM控制台中或通过RAM SDK对子账号授权。具体操作,请参见为RAM用户授权