Amazon OpenSearch 无服务器的数据访问控制 - 亚马逊 OpenSearch 服务

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Amazon OpenSearch 无服务器的数据访问控制

借助 Amazon OpenSearch Serverless 中的数据访问控制,您可以允许用户访问集合和索引,无论其访问机制或网络来源如何。您可以提供对 IAM 角色和 SAML 身份的访问权限。

您可以通过适用于集合和索引资源的数据访问策略管理访问权限。数据访问策略通过自动为匹配某个具体模式的集合和索引分配访问权限,帮助您大规模管理集合。多个数据访问策略可应用于一个资源。请注意,您必须为馆藏制定数据访问策略才能访问 OpenSearch 控制面板 URL。

数据访问策略与 IAM policy 对比

数据访问策略在逻辑上与 AWS Identity and Access Management (IAM) 策略是分开的。IAM 权限控制针对无服务器 API 操作的访问权限,如 CreateCollectionListAccessPolicies。数据访问策略控制对 OpenSearch Serverless 支持的OpenSearch 操作(例如PUT <index>GET _cat/indices)的访问权限。

控制数据访问策略 API 操作访问权限的 IAM 权限,如 aoss:CreateAccessPolicy 和(aoss:GetAccessPolicy将在下一节中介绍),不会影响数据访问策略中指定的权限。

例如,假设 IAM policy 拒绝用户为 collection-a 创建数据访问策略,但允许他们为所有集合 (*) 创建数据访问策略:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": [ "aoss:CreateAccessPolicy" ], "Resource": "*", "Condition": { "StringLike": { "aoss:collection": "collection-a" } } }, { "Effect": "Allow", "Action": [ "aoss:CreateAccessPolicy" ], "Resource": "*" } ] }

如果用户创建了一个数据访问策略,该策略允许针对所有集合(collection/*index/*/*)的某些权限,则该策略将适用于所有集合,包括集合 A。

重要

在数据访问策略中获得权限不足以访问您的 OpenSearch Serverless 集合中的数据。必须授予关联主体访问 IAM 权限 aoss:APIAccessAllaoss:DashboardsAccessAll 的权限。这两个权限都授予对集合资源的完全访问权限,而仪表板权限还提供对 OpenSearch 仪表板的访问权限。如果主体没有这两种 IAM 权限,则其在尝试向集合发送请求时将收到 403 错误。有关更多信息,请参阅 使用 OpenSearch API 操作

配置数据访问策略所需的 IAM 权限

OpenSearch Serverless 的数据访问控制使用以下 IAM 权限。您可以指定 IAM 条件,以将用户限制到特定访问策略名称。

  • aoss:CreateAccessPolicy:创建访问策略。

  • aoss:ListAccessPolicies:列出所有访问策略。

  • aoss:GetAccessPolicy:查看有关某个具体访问策略的详细信息。

  • aoss:UpdateAccessPolicy:修改访问策略。

  • aoss:DeleteAccessPolicy:删除访问策略。

以下基于身份的访问策略允许用户查看所有访问策略,并更新包含资源模式 collection/logs 的策略。

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "aoss:ListAccessPolicies", "aoss:GetAccessPolicy" ], "Effect": "Allow", "Resource": "*" }, { "Action": [ "aoss:UpdateAccessPolicy" ], "Effect": "Allow", "Resource": "*", "Condition": { "StringEquals": { "aoss:collection": [ "logs" ] } } } ] }
注意

此外, OpenSearch Serverless 需要aoss:APIAccessAllaoss:DashboardsAccessAll权限才能使用集合资源。有关更多信息,请参阅 使用 OpenSearch API 操作

策略语法

数据访问策略包括一组规则,每条规则均包含以下元素:

元素 描述
ResourceType 权限适用于的资源类型(集合或索引)。别名和模板权限位于集合级别,而创建、修改和搜索数据的权限位于索引级别。有关更多信息,请参阅受支持的策略权限
Resource 资源名称和/或模式的列表。模式是前缀后跟通配符 (*),它们允许将关联权限应用于多个资源。
  • 集合采用 collection/<name|pattern> 格式。

  • 索引采用 index/<collection-name|pattern>/<index-name|pattern/> 格式。

Permission 要为指定资源授予的权限的列表。有关权限以及它们允许执行的 API 操作的完整列表,请参阅支持 OpenSearch 的 API 操作和权限
Principal 要向其授予访问权限的一个或多个主体的列表。主体可以是 IAM 角色 ARN,也可以是 SAML 身份。这些主体必须位于当前 AWS 账户内。数据访问策略不直接支持跨账户访问,但您可以在策略中加入一个角色,由其他 AWS 账户 用户在拥有馆藏的账户中担任该角色。有关更多信息,请参阅 跨账户数据访问

以下示例策略授予针对名为 autopartsinventory 的集合以及任何以前缀 sales* 开头的集合的别名和模板权限。它还授予针对 autopartsinventory 集合内所有索引以及以前缀 orders* 开头的 salesorders 集合内任何索引的读写权限。

[ { "Description": "Rule 1", "Rules":[ { "ResourceType":"collection", "Resource":[ "collection/autopartsinventory", "collection/sales*" ], "Permission":[ "aoss:CreateCollectionItems", "aoss:UpdateCollectionItems", "aoss:DescribeCollectionItems" ] }, { "ResourceType":"index", "Resource":[ "index/autopartsinventory/*", "index/salesorders/orders*" ], "Permission":[ "aoss:*" ] } ], "Principal":[ "arn:aws:iam::123456789012:user/Dale", "arn:aws:iam::123456789012:role/RegulatoryCompliance", "saml/123456789012/myprovider/user/Annie", "saml/123456789012/anotherprovider/group/Accounting" ] } ]

您不能在策略中显式拒绝访问权限。因此,所有策略权限都具有累加性。例如,如果一个策略授予用户 aoss:ReadDocument,而另一个策略授予 aoss:WriteDocument,则该用户将同时拥有这两种权限。如果第三个策略授予同一用户 aoss:*,则该用户可以针对关联索引执行所有操作;限制性较大的权限不会覆盖限制性较小的权限。

受支持的策略权限

数据访问策略中支持以下权限。有关每种权限允许的 OpenSearch API 操作,请参阅支持 OpenSearch 的 API 操作和权限

集合权限

  • aoss:CreateCollectionItems

  • aoss:DeleteCollectionItems

  • aoss:UpdateCollectionItems

  • aoss:DescribeCollectionItems

  • aoss:*

索引权限

  • aoss:ReadDocument

  • aoss:WriteDocument

  • aoss:CreateIndex

  • aoss:DeleteIndex

  • aoss:UpdateIndex

  • aoss:DescribeIndex

  • aoss:*

OpenSearch 仪表板上的示例数据集

OpenSearch 仪表板提供了带有可视化效果、仪表板和其他工具的示例数据集,可帮助您在添加自己的数据之前浏览仪表板。要根据此示例数据创建索引,您需要一个数据访问策略,该策略提供对要使用的数据集的权限。以下策略使用通配符 (*) 来提供对所有三个示例数据集的权限。

[ { "Rules": [ { "Resource": [ "index/<collection-name>/opensearch_dashboards_sample_data_*" ], "Permission": [ "aoss:CreateIndex", "aoss:DescribeIndex", "aoss:ReadDocument" ], "ResourceType": "index" } ], "Principal": [ "arn:aws:iam::<account-id>:user/<user>" ] } ]

创建数据访问策略(控制台)

您可以使用可视化编辑器或以 JSON 格式创建数据访问策略。在创建集合时,将为与该策略中定义的模式之一相匹配的任何新集合分配相应的权限。

创建 OpenSearch 无服务器数据访问策略
  1. 打开亚马逊 OpenSearch 服务控制台,网址为 https://console.aws.amazon.com/aos/home

  2. 在左侧导航窗格中,展开 Serverless(无服务器),然后选择 Data access control(数据访问控制)。

  3. 选择 Create access policy(创建访问策略)。

  4. 为策略提供名称和描述。

  5. 为策略中的第一条规则提供名称。例如,Logs collection access(日志集合访问权限)。

  6. 选择 Add principals(添加主体),然后选择一个或多个 IAM 角色或 SAML 用户和组,授予其数据访问权限。

    注意

    要从下拉菜单中选择主体,您必须拥有 iam:ListUsersiam:ListRoles 权限(对于 IAM 主体)和 aoss:ListSecurityConfigs 权限(对于 SAML 身份)。

  7. 选择 Grant(授予),然后选择要授予关联主体的别名、模板和索引权限。有关权限及其允许的访问权限的完整列表,请参阅 支持 OpenSearch 的 API 操作和权限

  8. (可选)为策略配置其他规则。

  9. 选择创建。在创建策略与强制执行权限之间,可能会有大约一分钟的延迟。如果该延迟超过 5 分钟,请联系 AWS Support

重要

如果策略仅包含索引权限(不包含集合权限),您可能仍会看到一条有关匹配集合的消息,内容为 Collection cannot be accessed yet. Configure data access policies so that users can access the data within this collection。您可以忽略此警告。允许的主体仍然可以在集合上执行其分配的索引相关操作。

创建数据访问策略(AWS CLI)

要使用 OpenSearch 无服务器 API 创建数据访问策略,请使用CreateAccessPolicy命令。该命令同时接受内联策略和 .json 文件。必须以 JSON 转义字符串的形式编码内联策略。

以下请求将创建数据访问策略:

aws opensearchserverless create-access-policy \ --name marketing \ --type data \ --policy "[{\"Rules\":[{\"ResourceType\":\"collection\",\"Resource\":[\"collection/autopartsinventory\",\"collection/sales*\"],\"Permission\":[\"aoss:UpdateCollectionItems\"]},{\"ResourceType\":\"index\",\"Resource\":[\"index/autopartsinventory/*\",\"index/salesorders/orders*\"],\"Permission\":[\"aoss:ReadDocument\",\"aoss:DescribeIndex\"]}],\"Principal\":[\"arn:aws:iam::123456789012:user/Shaheen\"]}]"

要在 .json 文件中提供策略,请使用 --policy file://my-policy.json 格式。

策略中包含的委托人现在可以使用他们被授予访问权限的OpenSearch 操作

查看数据访问策略

在创建集合之前,您可能想预览账户中的现有数据访问策略,以查看哪个数据访问策略的资源模式与您的集合名称相匹配。以下ListAccessPolicies请求列出了您账户中的所有数据访问政策:

aws opensearchserverless list-access-policies --type data

该请求将返回有关所有已配置的数据访问策略的信息。要查看某一具体策略中定义的模式规则,请在响应的 accessPolicySummaries 元素内容中查找策略信息。请注意本政策typename和,并在GetAccessPolicy请求中使用这些属性来接收包含以下策略详细信息的响应:

{ "accessPolicyDetails": [ { "type": "data", "name": "my-policy", "policyVersion": "MTY2NDA1NDE4MDg1OF8x", "description": "My policy", "policy": "[{\"Rules\":[{\"ResourceType\":\"collection\",\"Resource\":[\"collection/autopartsinventory\",\"collection/sales*\"],\"Permission\":[\"aoss:UpdateCollectionItems\"]},{\"ResourceType\":\"index\",\"Resource\":[\"index/autopartsinventory/*\",\"index/salesorders/orders*\"],\"Permission\":[\"aoss:ReadDocument\",\"aoss:DescribeIndex\"]}],\"Principal\":[\"arn:aws:iam::123456789012:user/Shaheen\"]}]", "createdDate": 1664054180858, "lastModifiedDate": 1664054180858 } ] }

您可以包括资源筛选器,将结果限制为包含特定集合或索引的策略:

aws opensearchserverless list-access-policies --type data --resource "index/autopartsinventory/*"

要查看有关特定策略的详细信息,请使用GetAccessPolicy命令。

更新数据访问策略

在更新数据访问策略时,所有关联集合都将受到影响。要在 OpenSearch Serverless 控制台中更新数据访问策略,请选择数据访问控制,选择要修改的策略,然后选择编辑。进行更改,然后选择保存

要使用 OpenSearch 无服务器 API 更新数据访问策略,UpdateAccessPolicy请发送请求。必须包括策略版本,您可以使用 ListAccessPoliciesGetAccessPolicy 命令检索策略版本。包括最新策略版本可以确保您不会无意中覆盖其他人所做的更改。

以下UpdateAccessPolicy请求使用新的策略 JSON 文档更新数据访问策略:

aws opensearchserverless update-access-policy \ --name sales-inventory \ --type data \ --policy-version MTY2NDA1NDE4MDg1OF8x \ --policy file://my-new-policy.json

在更新策略与强制执行新权限之间,可能会有几分钟的延迟。

删除数据访问策略

在删除数据访问策略时,所有关联集合都将失去该策略中定义的访问权限。在删除策略之前,请确保您的 IAM 和 SAML 用户拥有针对集合的适当访问权限。要在 OpenSearch Serverless 控制台中删除策略,请选择该策略并选择删除

你也可以使用以下DeleteAccessPolicy命令:

aws opensearchserverless delete-access-policy --name my-policy --type data

跨账户数据访问

虽然您无法使用跨账户身份或跨账户集合创建数据访问策略,但您仍然可以使用代入角色选项设置跨账户访问权限。例如,如果account-a拥有一个account-b需要访问的集合,则来自的用户account-b可以在中扮演角色account-a。该角色必须具有 IAM 权限aoss:APIAccessAllaoss:DashboardsAccessAll,并包含在上的数据访问策略中account-a