您通过云账号创建的OpenSearch应用,都是该账号自己拥有的资源。默认情况下,账号对自己的资源拥有完整的操作权限。使用阿里云的RAM(Resource Access Management)服务,可以将您云账号下OpenSearch资源的访问及管理权限授予RAM中子用户。
注意:
新版控制台对RAM权限进行了细化,与旧版控制台有一定的区别;若在新版控制台上使用子账号功能,需要重新编写RAM授权策略。
RAM 子账号功能只支持V3 及以上API(SDK)版本,V2 版API(SDK)不支持 RAM子账号功能。
第三方数据源产品要严格遵守 RAM 权限体系,需要在第三方产品赋予子账号对应权限。其中RAM子账号不支持授权odps服务权限。原因是:当主账号授权project给子账号后,子账号因云有云限制无权限列出主账号全部项目。因此子账号无法引用project作为数据源接入开放搜索。建议先使用主账号连ODPS,然后再通过子账号操作开放搜索应用。
使用RAM子账号在控制台中配置 RDS 数据源,必须要再对该RAM子账号进行数据源相关权限授权,否则会报错提示连接RDS服务失败,请稍后再试,参考下面的RDS访问授权。
以Search开头的 ACTION 暂不支持 IP条件鉴权,在配置后会有问题,需注意(主要是SearchApp和SearchSuggest)。
生效时间
对子用户设置或更新权限配置后,延迟5分钟后生效。
最小常见组合权限
使用RAM子账号登录访问开放搜索控制台,最小常见组合权限包括搜索一个应用的最小权限集合、应用列表权限、应用详情权限、监控与报警权限、RDS访问授权等,仅供参考。
搜索一个应用的最小权限集合
通过SDK对应用发起搜索请求,实现文档召回功能的测试,所以需要搜索一个应用的权限,以下示例是应用名为app_schema_demo实现文档召回功能的搜索测试。
{
"Statement": [
{
"Effect": "Allow",
"Action": "opensearch:SearchApp",
"Resource": "acs:opensearch:*:*:apps/app_schema_demo"
}
],
"Version": "1"
}
应用列表权限
子账号登录后,需要查看控制台应用列表权限。
{
"Statement": [
{
"Action": [
"opensearch:ListAppGroup",
"opensearch:DescribeAppStatistics",
"opensearch:ListAppGroupErrors"
],
"Effect": "Allow",
"Resource": "acs:opensearch:*:*:app-groups/*"
}
],
"Version": "1"
}
应用详情权限
监控与报警功能是集成在应用详情界面中,因此需要查看应用详情权限,以下示例是查看应用名为app_schema_demo的应用详情。
{
"Statement": [
{
"Effect": "Allow",
"Action": [
"opensearch:DescribeAppGroup",
"opensearch:ListApp",
"opensearch:DescribeApp"
],
"Resource": "acs:opensearch:*:*:app-groups/app_schema_demo"
},
{
"Action": "opensearch:ListUserAnalyzers",
"Effect": "Allow",
"Resource": "acs:opensearch:*:*:user-analyzers/*"
}
],
"Version": "1"
}
监控与报警权限
监控与报警功能是基于阿里云监控系统,可以通过在RAM策略模板中搜索AliyunCloudMonitorReadOnlyAccess来查看云监控只读策略。
{
"Version": "1",
"Statement": [
{
"Action": [
"cms:Get*",
"cms:List*",
"cms:Query*",
"cms:BatchQuery*"
],
"Resource": "*",
"Effect": "Allow"
},
{
"Action": "opensearch:DescribeApp",
"Resource": "acs:opensearch:*:*:app-groups/*",
"Effect": "Allow"
}
]
}
RDS访问授权
访问RDS有两个接口,tables和fields。由于访问RDS需要添加白名单,因此还需要再为RAM子账号设置白名单权限(如果没有该权限,连接RDS时会报错提示设置RDS的IP白名单失败)。RDS 的授权直接在 RAM控制台配置,可以在概览页配置自定义授权策略或者角色,然后在用户管理页面对子账号进行授权(RDS授权参考文档)。OpenSearch 使用 RDS 授权最小集合:
Resource 中的变量含义(例如: $regionid,$accountid,$dbinstanceid 等)。
Resource 中相关参数值也可以使用通配符
*
来表示。{ "Version": "1", "Statement": [ { "Action": "rds:DescribeDBInstanceAttribute", "Resource": "acs:rds:$regionid:$accountid:dbinstance/$dbinstanceid", "Effect": "Allow" }, { "Action": "rds:ModifySecurityIps", "Resource": "acs:rds:$regionid:$accountid:dbinstance/$dbinstanceid", "Effect": "Allow" }, { "Action": "rds:DescribeDBInstanceIPArrayList", "Resource": "acs:rds:$regionid:$accountid:dbinstance/$dbinstanceid", "Effect": "Allow" }, { "Action": "rds:DescribeDBInstanceNetInfoForChannel", "Resource": "acs:rds:$regionid:$accountid:dbinstance/$dbinstanceid", "Effect": "Allow" } ] }
流量API调用权限
通过API搜索、数据推送、访问下拉提示模型时需要添加如下权限。
{
"Statement": [
{
"Effect": "Allow",
"Action": [
"opensearch:PushDoc",
"opensearch:SearchApp"
],
"Resource": [
"acs:opensearch:$regionId:*:apps/$appGroupName",
"acs:opensearch:$regionId:*:app-groups/$appGroupName"
]
},
{
"Action": "opensearch:SearchSuggest",
"Effect": "Allow",
"Resource": "acs:opensearch:$regionId:*:suggestions/$suggestionIdentity"
}
],
"Version": "1"
}
授权参考
在确定要为子用户赋予某些需要操作的应用后,子用户正常登录控制台通常需要依赖多种 action 权限组合,可以考虑赋予子用户 Describe*
、List*
权限,当然也可以根据您的实际场景需求为子用户赋予特定的权限组合。
参考(1)
给accountId为1234的主账号下的某个子账号赋予所有区域、所有应用的所有操作权限,该策略在主账号控制台中创建后,需再通过主账号在 RAM 控制台中对子账号授权,或通过 RAM SDK对子账号授权。1、创建一个策略。
{
"Statement": [
{
"Action": "opensearch:*",
"Effect": "Allow",
"Resource": "acs:opensearch:*:1234:apps/*"
}
],
"Version": "1"
}
2、把当前策略授权给您指定的子账号。
参考(2)
给accountId为1234的主账号下的某个子账号赋予华东1区域(cn-hangzhou)、所有应用的所有操作权限,该策略在主账号控制台中创建后,需再通过主账号在 RAM 控制台中对子账号授权,或通过 RAM SDK对子账号授权。
1、创建一个策略。
{
"Statement": [
{
"Action": "opensearch:*",
"Effect": "Allow",
"Resource": "acs:opensearch:cn-hangzhou:1234:apps/*"
}
],
"Version": "1"
}
2、把当前策略授权给您指定的子账号。
注意:
在resource格式中,如果是通过指定*通配符匹配,将包含所有资源类型。
如果在resource格式中,是通过指定应用名匹配, 即使在该策略的Action中指定opensearch:*,也只会包含资源类别为应用名的所有Action,不包含 opensearch:ListApp和opensearch:CreateApp。
每一行Action都必须对应所在行的resource格式,例如 opensearch:ListApp和opensearch:CreateApp作用范围是所有应用,必须用 *表示。注意这2个Action对应resource格式和其它Action对应 resource格式有区别。
如果您的授权策略中只包含指定应用名资源格式,并且您也依赖 opensearch:ListApp和opensearch:CreateApp权限。您需要再创建1个包含这2个资源格式为*的Action策略,并累加授权给指定RAM子账号。
控制台鉴权问题解决流程
当使用子账号访问控制台时,可能会遇到提示“RAM 子账户鉴权失败”的情况,如图:此时:
按图中所示,找到请求的POP Action,例:ListAppGroups;如果 action 出现 DryRun后缀,实际对应的是没有后缀的action,例:CreateAppDryRun 对应的action是 CreateApp;
再到 应用授权规则列表中找到 ListAppGroups 对应的 RAM Action 和 Resource Pattern;(注:
RAM Action 很有可能不等于 POP Action)
最后,按照对子账号的授权需要编写授权策略。