全部产品

访问鉴权规则

更新时间:2020-09-30 17:44:26

您通过云账号创建的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实现文档召回功能的搜索测试。

  1. {
  2. "Statement": [
  3. {
  4. "Effect": "Allow",
  5. "Action": "opensearch:SearchApp",
  6. "Resource": "acs:opensearch:*:*:apps/app_schema_demo"
  7. }
  8. ],
  9. "Version": "1"
  10. }

应用列表权限

子账号登录后,需要查看控制台应用列表权限。

  1. {
  2. "Statement": [
  3. {
  4. "Action": [
  5. "opensearch:ListAppGroup",
  6. "opensearch:DescribeAppStatistics",
  7. "opensearch:ListAppGroupErrors"
  8. ],
  9. "Effect": "Allow",
  10. "Resource": "acs:opensearch:*:*:app-groups/*"
  11. }
  12. ],
  13. "Version": "1"
  14. }

应用详情权限

监控与报警功能是集成在应用详情界面中,因此需要查看应用详情权限,以下示例是查看应用名为app_schema_demo的应用详情。

  1. {
  2. "Statement": [
  3. {
  4. "Effect": "Allow",
  5. "Action": [
  6. "opensearch:DescribeAppGroup",
  7. "opensearch:ListApp",
  8. "opensearch:DescribeApp"
  9. ],
  10. "Resource": "acs:opensearch:*:*:app-groups/app_schema_demo"
  11. },
  12. {
  13. "Action": "opensearch:ListUserAnalyzers",
  14. "Effect": "Allow",
  15. "Resource": "acs:opensearch:*:*:user-analyzers/*"
  16. }
  17. ],
  18. "Version": "1"
  19. }

监控与报警权限

监控与报警功能是基于阿里云监控系统,可以通过在RAM策略模板中搜索AliyunCloudMonitorReadOnlyAccess来查看云监控只读策略。

  1. {
  2. "Version": "1",
  3. "Statement": [
  4. {
  5. "Action": [
  6. "cms:Get*",
  7. "cms:List*",
  8. "cms:Query*",
  9. "cms:BatchQuery*"
  10. ],
  11. "Resource": "*",
  12. "Effect": "Allow"
  13. },
  14. {
  15. "Action": "opensearch:DescribeApp",
  16. "Resource": "acs:opensearch:*:*:app-groups/*",
  17. "Effect": "Allow"
  18. }
  19. ]
  20. }

RDS访问授权

访问RDS有两个接口,tables和fields。由于访问RDS需要添加白名单,因此还需要再为RAM子账号设置白名单权限(如果没有该权限,连接RDS时会报错提示设置RDS的IP白名单失败)。
RDS 的授权直接在 RAM控制台 配置,可以在概览页配置自定义授权策略或者角色,然后在用户管理页面对子账号进行授权(RDS授权参考文档)。
OpenSearch 使用 RDS 授权最小集合:

  • Resource 中的变量含义(例如: $regionid,$accountid,$dbinstanceid 等)。
  • Resource 中相关参数值也可以使用通配符 * 来表示。
    1. {
    2. "Version": "1",
    3. "Statement": [
    4. {
    5. "Action": "rds:DescribeDBInstanceAttribute",
    6. "Resource": "acs:rds:$regionid:$accountid:dbinstance/$dbinstanceid",
    7. "Effect": "Allow"
    8. },
    9. {
    10. "Action": "rds:ModifySecurityIps",
    11. "Resource": "acs:rds:$regionid:$accountid:dbinstance/$dbinstanceid",
    12. "Effect": "Allow"
    13. },
    14. {
    15. "Action": "rds:DescribeDBInstanceIPArrayList",
    16. "Resource": "acs:rds:$regionid:$accountid:dbinstance/$dbinstanceid",
    17. "Effect": "Allow"
    18. },
    19. {
    20. "Action": "rds:DescribeDBInstanceNetInfoForChannel",
    21. "Resource": "acs:rds:$regionid:$accountid:dbinstance/$dbinstanceid",
    22. "Effect": "Allow"
    23. }
    24. ]
    25. }

授权参考

在确定要为子用户赋予某些需要操作的应用后,子用户正常登录控制台通常需要依赖多种 action 权限组合,可以考虑赋予子用户 Describe*List* 权限,当然也可以根据您的实际场景需求为子用户赋予特定的权限组合。

参考(1)

给accountId为1234的主账号下的某个子账号赋予所有区域、所有应用的所有操作权限,该策略在主账号控制台中创建后,需再通过主账号在 RAM 控制台中对子账号授权,或通过 RAM SDK对子账号授权。
1、创建一个策略。

  1. {
  2. "Statement": [
  3. {
  4. "Action": "opensearch:*",
  5. "Effect": "Allow",
  6. "Resource": "acs:opensearch:*:1234:apps/*"
  7. }
  8. ],
  9. "Version": "1"
  10. }

2、把当前策略授权给您指定的子账号。

参考(2)

给accountId为1234的主账号下的某个子账号赋予华东1区域(cn-hangzhou)、所有应用的所有操作权限,该策略在主账号控制台中创建后,需再通过主账号在 RAM 控制台中对子账号授权,或通过 RAM SDK对子账号授权。
1、创建一个策略。

  1. {
  2. "Statement": [
  3. {
  4. "Action": "opensearch:*",
  5. "Effect": "Allow",
  6. "Resource": "acs:opensearch:cn-hangzhou:1234:apps/*"
  7. }
  8. ],
  9. "Version": "1"
  10. }

2、把当前策略授权给您指定的子账号。

注意:

  • resource格式中,如果是通过指定*通配符匹配,将包含所有资源类型。
  • 如果在resource格式中,是通过指定应用名匹配, 即使在该策略的Action中指定opensearch:*,也只会包含资源类别为应用名的所有Action,不包含 opensearch:ListAppopensearch:CreateApp
  • 每一行Action都必须对应所在行的resource格式,例如 opensearch:ListAppopensearch:CreateApp作用范围是所有应用,必须用 *表示。注意这2个Action对应resource格式和其它Action对应 resource格式有区别。
  • 如果您的授权策略中只包含指定应用名资源格式,并且您也依赖 opensearch:ListAppopensearch:CreateApp权限。您需要再创建1个包含这2个资源格式为*的Action策略,并累加授权给指定RAM子账号。

控制台鉴权问题解决流程

当使用子账号访问控制台时,可能会遇到提示“RAM 子账户鉴权失败”的情况,如图:
1
此时:

  • 按图中所示,找到请求的POP Action,例:ListAppGroups;
  • 再到 应用授权规则列表 中找到 ListAppGroups 对应的 RAM ActionResource Pattern
  • 最后,按照对子账号的授权需要编写授权策略。