如果阿里云Elasticsearch的系统策略无法满足您的需求,可以通过创建自定义策略实现精细化权限管理。本文介绍如何创建自定义权限策略,并提供实例和标签权限策略配置示例供您参考。
背景信息
阿里云Elasticsearch支持以下系统策略:
| 系统策略名称 | 说明 | 
| AliyunElasticsearchReadOnlyAccess | 只读访问阿里云Elasticsearch或Logstash的权限,用于只读用户。 | 
| AliyunElasticsearchFullAccess | 管理阿里云Elasticsearch、Logstash或Beats的权限,用于管理员。 | 
以上权限不包括Serverless、云监控和Tags权限,使用时需自定义对应权限,具体配置请参见特定实例的权限策略和Elasticsearch Serverless的权限策略。
前提条件
了解权限策略语言的基本结构和语法。详细信息,请参见权限策略语法和结构。
注意事项
自定义策略仅在账号级别生效,不会在资源组级别生效。如果您想对特定RAM用户仅显示控制台的特定资源,可以采用通过资源组授权特定实例的方式实现。
操作步骤
创建自定义权限策略,请参见通过脚本编辑模式创建自定义权限策略。根据业务需求输入具体的权限脚本,您也可以根据页面提示导入已存在的系统权限策略,并在此基础上修改为自定义的权限策略。
权限脚本示例:
- 访问阿里云账号的专有网络VPC(Virtual Private Cloud)权限。 - "elasticsearch:DescribeVpcs","elasticsearch:DescribeVSwitches" { "Version": "1", "Statement": [ { "Action": [ "elasticsearch:DescribeVpcs", "elasticsearch:DescribeVSwitches" ], "Resource": "*", "Effect": "Allow" } ] }
- RAM用户订单权限。 - { "Version": "1", "Statement": [ { "Action": [ "bss:PayOrder" ], "Resource": "*", "Effect": "Allow" } ] }
更多权限策略示例,请参见权限策略示例。
权限策略示例
在使用以下代码示例前,请将代码中的以下信息替换成您自己对应的信息:
- <yourAccountId>:需要替换为您自己的阿里云账号ID,不支持通配符 - *。阿里云账号ID的获取方法:鼠标移至控制台右上角的用户头像上,即可查看到账号ID。
- <yourInstanceId>:需要替换为待授权的目标实例ID,不支持通配符 - *。获取方式,请参见查看实例的基本信息。
管理员权限策略
以下示例用于为账号ID为<yourAccountId>的阿里云账号下的某个RAM用户授权,使该用户拥有所有Elasticsearch实例的所有操作权限。
{
    "Statement": [
        {
            "Action": [
                "elasticsearch:*"
            ],
            "Effect": "Allow",
            "Resource": "*"
        },
        {
            "Action": [
                "cms:*"
            ],
            "Effect": "Allow",
            "Resource": "*"
        },
        {
            "Action": "bss:PayOrder",
            "Effect": "Allow",
            "Resource": "*"
        },
       {
       "Action": "ims:*",
       "Effect": "Allow",
       "Resource": "acs:ims::<yourAccountId>:application/*"
        },
        {
            "Action": "ram:CreateServiceLinkedRole",
            "Resource": "*",
            "Effect": "Allow",
            "Condition": {
                "StringEquals": {
                    "ram:ServiceName": [
                        "collector.elasticsearch.aliyuncs.com",
                        "ops.elasticsearch.aliyuncs.com"
                    ]
                }
            }
        }
    ],
    "Version": "1"
}特定实例的权限策略
以下示例用于为账号ID为<yourAccountId>的阿里云账号下的某个RAM用户授权,使该用户拥有以下权限:
- 给指定实例授予所有Elasticsearch相关操作的权限。 
- 查看实例列表的权限。 
- 查看所有实例标签的权限。 
- 查看采集器列表的权限。 
因为阿里云Elasticsearch控制台的实例管理页面,集成调用了Beats采集器、阿里云高级监控和标签Tags等外部依赖接口,所以在对特定实例授权时,需要参见以下配置示例,授予依赖权限。
{
    "Statement": [
        {
            "Action": [
                "elasticsearch:*"
            ],
            "Effect": "Allow",
            "Resource": "acs:elasticsearch:*:<yourAccountId>:instances/<yourInstanceId>"
        },
        {
            "Action": [
                "cms:DescribeActiveMetricRuleList",
                "cms:ListAlarm",
                "cms:QueryMetricList"
            ],
            "Effect": "Allow",
            "Resource": "*"
        },
        {
            "Action": [
                "elasticsearch:ListTags"
            ],
            "Effect": "Allow",
            "Resource": "acs:elasticsearch:*:<yourAccountId>:tags/*"
        },
        {
            "Action": [
                "elasticsearch:ListInstance",
                "elasticsearch:ListSnapshotReposByInstanceId"
            ],
            "Effect": "Allow",
            "Resource": "acs:elasticsearch:*:<yourAccountId>:instances/*"
        },
        {
            "Action": [
                "elasticsearch:ListLogstash"
            ],
            "Effect": "Allow",
            "Resource": "acs:elasticsearch:*:<yourAccountId>:logstashes/*"
        }, 
        {
            "Action": [
                "elasticsearch:ListCollectors"
            ],
            "Effect": "Allow",
            "Resource": "acs:elasticsearch:*:<yourAccountId>:collectors/*"
        },
        {
            "Action": [
                "elasticsearch:GetEmonProjectList"
            ],
            "Effect": "Allow",
            "Resource": "acs:elasticsearch:*:*:emonProjects/*"
        },
        {
            "Action": [
                "elasticsearch:getEmonUserConfig"
            ],
            "Effect": "Allow",
            "Resource": "acs:elasticsearch:*:*:emonUserConfig/*"
        }
    ],
    "Version": "1"
}| Action | 说明 | 
|  | 云监控权限,具体说明如下: 
 | 
|  | 支付订单的权限。授权后,RAM用户可在购买实例时,支付订单。 | 
|  | RAM用户使用高级监控报警时,需要授予ims权限。您也可以通过阿里云账号登录高级监控报警控制台,手动对RAM用户授权,具体操作请参见步骤一:查看和配置可视化监控。 说明  IMS(Identity Management Service)为身份管理服务。主要管理的对象为阿里云RAM用户相关的身份Meta及认证相关的配置。同时,IMS提供了标准协议,能够应用于外部IDP控制台认证打通和用户数据同步的场景。 | 
|  | 访问阿里云账号的专有网络和虚拟交换机列表权限。授权后,在购买实例时,RAM用户可选择阿里云账号创建的专有网络和虚拟交换机。 重要  设置RAM用户购买实例的权限时,需要同时配置 | 
|  | 操作Elasticsearch实例的所有权限。授权后,RAM用户可对所有或指定实例执行任意操作。 重要  
 | 
|  | 查看Elasticsearch实例标签的权限。授权后,RAM用户可查看Elasticsearch实例的标签。 | 
|  | 
 | 
|  | 查看Beats采集器列表的权限。授权后,RAM用户可查看控制台中Beats采集器列表。 | 
|  | 查看Logstash实例列表的权限。授权后,RAM用户可在实例列表页面中,查看对应地域下包含的所有Logstash实例。 | 
|  | 获取集群监控项目列表的权限。 重要  此Action需要与 | 
|  | 获取集群监控用户配置的权限。 | 
| Effect | 说明 | 
| Allow | 允许RAM用户执行Action中设置的操作。 | 
| Deny | 拒绝RAM用户执行Action中设置的操作。 | 
| 参数 | 说明 | 
| * | 所有实例资源。 | 
| <yourInstanceId> | 指定的实例资源,需要替换为待授权的目标实例ID。获取方式,请参见查看实例的基本信息。 | 
Elasticsearch Serverless的权限策略
- AliyunElasticsearchServerlessReadOnlyAccess(只读访问阿里云Elasticsearch Serverless服务的权限,用于只读用户)的授权策略内容: - { "Version": "1", "Statement": [ { "Action": [ "es-serverless:List*", "es-serverless:Describe*", "es-serverless:Get*" ], "Resource": "*", "Effect": "Allow" }, { "Action": "es-serverless:ListAccessTokens", "Resource": "*", "Effect": "Deny" } ] }
- AliyunElasticsearchServerlessFullAccess(管理阿里云Elasticsearch Serverless服务的权限,用于管理员)的授权策略内容: - { "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "es-serverless:*", "Resource": "*" } ] }
API的权限
Elasticsearch API权限的Resource和Action如下表所示。
| 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 | 
后续步骤
自定义策略创建完成后,使用阿里云账号在RAM控制台中或通过RAM SDK对RAM用户授权。具体操作,请参见为RAM用户授权。