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

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

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

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

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

数据访问策略与 IAM policy 对比

数据访问策略在逻辑上与(AWS Identity and Access ManagementIAM)策略是相互独立的。IAM 权限控制针对无服务器 API 操作的访问权限,如 CreateCollectionListAccessPolicies。数据访问策略控制针对 OpenSearch 无服务器支持的 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 无服务器集合中的数据。必须授予关联主体访问 IAM 权限 aoss:APIAccessAllaoss:DashboardsAccessAll 的权限。这两种权限都授予对集合资源的完全访问权限,而控制面板权限还提供了 OpenSearch 控制面板的访问权限。如果主体没有这两种 IAM 权限,则其在尝试向集合发送请求时将收到 403 错误。有关更多信息,请参阅 使用 OpenSearchAPI操作

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

OpenSearch 无服务器的数据访问控制使用以下 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 无服务器需要集合资源的 aoss:APIAccessAllaoss:DashboardsAccessAll 权限。有关更多信息,请参阅 使用 OpenSearchAPI操作

策略语法

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

元素 描述
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. https://console.aws.amazon.com/aos/home 打开 Amazon OpenSearch Service 控制台。

  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 无服务器控制台中更新数据访问策略,请选择 Data access control(数据访问控制),选择要修改的策略,然后选择 Edit(编辑)。进行更改,然后选择 Save(保存)。

要使用 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 无服务器控制台中删除策略,请选择该策略,然后选择 Delete(删除)。

您也可以使用 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 上的数据访问策略中。