在 Amazon OpenSearch Service 中进行精细访问控制 - 亚马逊 OpenSearch 服务

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

在 Amazon OpenSearch Service 中进行精细访问控制

精细访问控制提供了用于控制对 Amazon OpenSearch Service 上的数据的访问的其他方法。例如,根据请求发出者,您可能希望搜索仅返回一个索引中的结果。您可能想隐藏文档中的某些字段或完全排除某些文档。

精细访问控制提供了以下功能:

  • 基于角色的访问控制

  • 索引、文档和字段级别的安全性

  • OpenSearch 控制面板多租户

  • 用于 Open Search 和 Open search 控制面板的 HTTP 基本身份验证

图片更大:精细访问控制和 OpenSearch Service 安全性

Amazon OpenSearch Service 安全性有三个主要层:

Network

第一个安全层是网络,决定请求是否会到达 OpenSearch Service 域。如果您在创建域时选择 Public access (公共访问),则来自任何连接到 Internet 的客户端的请求都能到达域终端节点。如果您选择 VPC access (VPC 访问),则客户端必须连接到 VPC(并且关联的安全组必须允许它)才能使请求到达终端节点。有关更多信息,请参阅 在 a 中启动您的亚马逊 OpenSearch 服务域名 VPC

域访问策略

第二个安全层是域访问策略。在请求到达域终端节点后,基于资源的访问策略允许或拒绝请求访问给定 URI。访问策略在请求本身到达 OpenSearch 前在域“边缘”接受或拒绝请求。

精细访问控制

第三个也是最后一个安全层是精细访问控制。在基于资源的访问策略允许请求到达域终端节点后,精细访问控制对用户凭证进行评估,并对用户进行身份验证或拒绝请求。如果精细访问控制对用户进行身份验证,它将获取映射到该用户的所有角色,并使用完整的权限集来确定如何处理请求。

注意

如果基于资源的访问策略包含 IAM 角色或用户,则客户端必须发送使用 AWS Signature 版本 4 进行签名的请求。因此,访问策略可能会与精细访问控制发生冲突,特别是在您使用内部用户数据库和 HTTP 基本身份验证时。您无法使用用户名和密码以及 IAM 凭证对请求进行签名。通常,如果您启用精细访问控制,我们建议您使用不需要已签名请求的域访问策略。

下列示意图说明了一个常见配置:启用了精细访问控制的 VPC 访问域、基于 IAM 的访问策略和 IAM 主用户。

针对 VPC 域的精细访问控制授权流程

下列示意图说明了另一个常见配置:启用了精细访问控制的公共访问域、不使用 IAM 委托人的访问策略以及内部用户数据库中的主用户。

针对公共访问域的精细访问控制授权流程

示例

考虑向 movies/_search?q=thor 发出 GET 请求。用户是否有权搜索 movies 索引? 如果是这样,用户是否有权查看该索引中的所有文档? 响应是否应忽略或匿名化任何字段? 对于主用户,响应可能如下所示:

{ "hits": { "total": 7, "max_score": 8.772789, "hits": [{ "_index": "movies", "_type": "_doc", "_id": "tt0800369", "_score": 8.772789, "_source": { "directors": [ "Kenneth Branagh", "Joss Whedon" ], "release_date": "2011-04-21T00:00:00Z", "genres": [ "Action", "Adventure", "Fantasy" ], "plot": "The powerful but arrogant god Thor is cast out of Asgard to live amongst humans in Midgard (Earth), where he soon becomes one of their finest defenders.", "title": "Thor", "actors": [ "Chris Hemsworth", "Anthony Hopkins", "Natalie Portman" ], "year": 2011 } }, ... ] } }

如果具有更有限的权限的用户发出完全相同的请求,则响应可能如下所示:

{ "hits": { "total": 2, "max_score": 8.772789, "hits": [{ "_index": "movies", "_type": "_doc", "_id": "tt0800369", "_score": 8.772789, "_source": { "year": 2011, "release_date": "3812a72c6dd23eef3c750c2d99e205cbd260389461e19d610406847397ecb357", "plot": "The powerful but arrogant god Thor is cast out of Asgard to live amongst humans in Midgard (Earth), where he soon becomes one of their finest defenders.", "title": "Thor" } }, ... ] } }

响应的命中次数较少,并且每次命中的字段较少。此外,release_date 字段是匿名的。如果不具有权限的用户发出相同的请求,集群将返回错误:

{ "error": { "root_cause": [{ "type": "security_exception", "reason": "no permissions for [indices:data/read/search] and User [name=limited-user, roles=[], requestedTenant=null]" }], "type": "security_exception", "reason": "no permissions for [indices:data/read/search] and User [name=limited-user, roles=[], requestedTenant=null]" }, "status": 403 }

如果用户提供的凭证无效,则集群将返回 Unauthorized 异常。

重要概念

在开始使用精细访问控制时,请注意以下概念:

  • 角色 – 使用精细访问控制的核心方式。在此情况下,角色与 IAM 角色不同。角色包含任意权限组合:集群范围的、特定于索引的、文档级别的和字段级别的。

  • 映射 – 配置角色后,您可以将该角色映射到一个或多个用户。例如,您可以将三个角色映射到单个用户:一个角色提供对控制面板的访问权限,一个角色提供对 index1 的只读访问权限,还有一个角色提供对 index2 的写入访问权限。您也可以将所有这些权限包含在单个角色中。

  • 用户 – 向 OpenSearch 集群发出请求的人员或应用程序。用户具有他们在发出请求时指定的凭据(IAM 访问密钥或用户名和密码)。

关于主用户

OpenSearch Service 中的主用户可以是某个用户名和密码组合,也可以是对底层 OpenSearch 集群拥有完全权限的 IAM 主体。如果用户拥有对 OpenSearch 集群的全部访问权限,并且能够在 OpenSearch 控制面板中创建内部用户、角色和角色映射,则该用户属于主用户。

在 OpenSearch Service 控制台或通过 CLI 创建的主用户会自动映射到两个预定义的角色:

  • all_access – 提供对所有集群范围操作的完全访问权限、写入所有集群索引的权限以及向所有租户写入的权限。

  • security_manager – 提供对安全插件的访问权限以及对用户和权限进行管理的访问权限。

使用这两个角色,用户就获得了 OpenSearch 控制面板中安全选项卡的访问权限,可在其中管理用户和权限。如果您创建了其他内部用户并且仅将其映射到 all_access 角色,则该用户无权访问安全选项卡。您可以通过将用户显式映射到 all_accesssecurity_manager 角色来创建其他的主用户。有关说明,请参阅 其他主用户

在为域创建主用户时,您可以指定现有的 IAM 主体,也可以在内部用户数据库中创建主用户。在决定要使用哪种方式时,请注意以下因素:

  • IAM 主体 – 如果您选择使用 IAM 主体来创建主用户,则对集群的所有请求都必须使用 AWS 签名版本 4 进行签名。

    OpenSearch Service 不会考虑 IAM 主体的任何权限。IAM 用户或角色仅用于身份验证的目的。该用户或角色拥有的策略与主用户获得的授权无关。授权通过 OpenSearch 安全插件中的各种权限进行处理。

    例如,您可以向 IAM 主体分配零 IAM 权限,并且只要相关计算机或人员通过了该用户或角色的身份验证,就将拥有 OpenSearch Service 中的主用户权限。

    在以下情况下,我们建议您使用 IAM:如果您想要在多个集群上使用相同的用户,如果您想要使用 Amazon Cognito 访问控制面板,如果您拥有支持签名版本 4 签名的 OpenAmazon Cognito earch 客户端。

  • 内部用户数据库 – 如果您在内部用户数据库中创建主用户(使用用户名和密码组合),则可以使用 HTTP 基本身份验证(以及 IAM 凭证)向集群发出请求。大多数客户端支持基本身份验证,包括 curl,其也支持帶 --aws-sigv4 選項的 AWS Signature 版本 4。内部用户数据库存储在 OpenSearch 索引中,因此您无法与其他集群共享该数据库。

    在以下情况下,我们建议您使用内部用户数据库:如果不需要跨多个集群重用用户,如果您想要使用 HTTP 基本身份验证访问控制面板(而不是 Amazon Cognito)或您的客户端仅支持基本身份验证。内部用户数据库是开始使用 OpenSearch Service 的最简单方法。

启用精细访问控制

使用控制台、AWS CLI 或配置 API 启用精细访问控制。要查看步骤,请参阅 创建和管理亚马逊 OpenSearch 服务域名

精细访问控制需要 OpenSearch 或 Elasticsearch 6.7 或更高版本。此外,它还需要 HTTPS 才能使所有流量到达域、实现静态加密节点到节点加密。对请求进行额外处理可能需要占用各数据节点的计算和内存资源,具体取决于配置精细访问控制高级功能的方式。一旦启用精细访问控制,便无法将其禁用。

在现有域上启用精细访问控制

您可以在运行 OpenSearch 或 Elasticsearch 6.7 或更高版本的现有域上启用精细访问控制。

在现有域上(控制台)上启用精细访问控制
  1. 选择域、Actions(操作)和 Edit security configuration(编辑安全配置)。

  2. 选择 Enable fine-grained access control(启用精细访问控制)。

  3. 选择如何创建主用户:

    • 如果要使用 IAM 进行用户管理,请选择 Set IAM ARN as master user (将 IAM ARN 设置为主用户),然后为 IAM 角色指定 ARN。

    • 如果要使用内部用户数据库,请选择创建主用户,并指定用户名和密码。

  4. (可选)选择 Enable migration period for open/IP-based access policy(为开放/基于 IP 的访问策略启用迁移期)。此设置启用了 30 天过渡期,在此期间,现有用户可以继续访问域而不发生中断,并且现有开放和基于 IP 的访问策略将继续适用于您的域。在此迁移期间,我们建议管理员为该域创建必要的角色并将其映射到用户。如果您使用基于身份的策略,而不是开放或基于 IP 的访问策略,则可以禁用此设置。

    此外,您还需要更新客户端,以便在迁移期间处理精细访问控制。例如,如果您使用细粒度访问控制映射 IAM 角色,则必须更新客户端才能开始使用 AWS Signature 版本 4 签署请求。如果您使用精细访问控制配置 HTTP 基本身份验证,则必须更新客户端才能在请求中提供相应的基本身份验证凭证。

    在迁移期间,访问该域的 OpenSearch 控制面板端点的用户将直接在发现页面而不是登录页面登陆。管理员和主用户可以选择 Login(登录),以使用管理员凭据登录并配置角色映射。

    重要

    OpenSearch Service 在 30 天后将会自动禁用迁移期。我们建议您在创建必要的角色并将其映射到用户之后立即终止它。迁移期结束后,您无法重新启用它。

  5. 选择 Save changes(保存更改)

更改将会触发蓝/绿部署,在此期间,集群运行状况变为红色,但所有集群操作不会受到影响。

在现有域 (CLI) 上启用精细访问控制

AnonymousAuthEnabled 设置为 true 以通过精细访问控制启用迁移期:

aws opensearch update-domain-config --domain-name test-domain --region us-east-1 \ --advanced-security-options '{ "Enabled": true, "InternalUserDatabaseEnabled":true, "MasterUserOptions": {"MasterUserName":"master-username","MasterUserPassword":"master-password"},"AnonymousAuthEnabled": true}'

关于 default_role

精细访问控制需要角色映射。如果域使用基于身份的访问策略,OpenSearch Service 会将用户自动映射到称为 default_role 的新角色,以帮助您正确地迁移现有用户。此临时映射可确保在您创建自己的角色映射之前,您的用户仍然可以成功发送 IAM 签名的 GET 和 PUT 请求。

该角色不会向您的 OpenSearch Service 域添加任何安全漏洞或缺陷。我们建议您在设置自己的角色并相应地映射它们之后删除默认角色。

迁移场景

下表介绍了在现有域上启用精细访问控制之前和之后每种身份验证方法的行为,以及管理员为将用户正确映射到角色所必须采取的步骤:

身份验证方法 启用精细访问控制之前 启用精细访问控制之后 管理员任务
基于身份的策略

满足 IAM policy 的所有用户都可以访问该域。

您无需启用迁移期。

OpenSearch Service 会将满足 IAM policy 的所有用户自动映射到 default_role,让这些用户可以继续访问该域。

  1. 在域上创建自定义角色映射。

  2. 删除 default_role

基于 IP 的策略

来自允许的 IP 地址或 CIDR 块的所有用户均可访问该域。

在 30 天的迁移期间,来自允许的 IP 地址或 CIDR 块的所有用户均可继续访问该域。

  1. 在域上创建自定义角色映射。

  2. 根据角色映射配置,更新客户端,以提供基本身份验证凭证或 IAM 凭证。

  3. 禁用迁移期。来自允许的 IP 地址或 CIDR 块的发送请求且无基本身份验证或 IAM 凭证的用户将失去对该域的访问权限。

开放访问策略

互联网上的所有用户均可访问该域。

在 30 天的迁移期间,互联网上的所有用户均可继续访问该域。

  1. 在域上创建角色映射

  2. 根据角色映射配置,更新客户端,以提供基本身份验证凭证或 IAM 凭证。

  3. 禁用迁移期。发送请求且无基本身份验证或 IAM 凭证的用户将失去对域的访问权限。

以主用户身份访问 OpenSearch 控制面板

精细访问控制具有一个可简化管理任务的 OpenSearch 控制面板插件。可以使用控制面板管理用户、角色、映射、操作组和租户。不过,根据您管理用户和配置域的方式,OpenSearch 控制面板登录页面和底层身份验证方法是不同的。

管理权限

重要概念中所述,您可以使用角色、用户和映射管理精细访问控制权限。此部分介绍如何创建和应用这些资源。我们建议您以主用户身份登录控制面板来执行这些操作。

控制面板中的安全性主页
注意

您选择授予用户的权限因使用案例而有很大差异。我们无法在本文档中涵盖所有场景。在确定授予用户哪些权限时,请务必参考以下部分中提到的 OpenSearch 集群和索引权限,并始终遵循最低权限原则

创建角色

可以使用 OpenSearch 控制面板或 REST API 中的 _plugins/_security 操作创建新角色以实施精细访问控制。有关更多信息,请参阅创建角色

精细访问控制还包含大量预定义角色。OpenSearch 仪表板和 Logstash 等客户端向 OpenSearch 发出各种各样的请求,这使得难以使用最小权限集手动创建角色。例如,opensearch_dashboards_user 角色包括用户处理索引模式、可视化内容、控制面板和租户所需的权限。我们建议将它映射到任何访问仪表板的用户或后端角色,以及其他允许访问其他索引的角色。

Amazon OpenSearch Service 不提供以下 OpenSearch 角色:

  • observability_full_access

  • observability_read_access

  • reports_read_access

  • reports_full_access

Amazon OpenSearch Service 提供了若干在 OpenSearch 中不可用的角色:

  • ultrawarm_manager

  • ml_full_access

  • cold_manager

  • notifications_full_access

  • notifications_read_access

集群级安全性

集群级权限包括用于发出广泛请求(例如 _mget_msearch_bulk)、监控运行状况、拍摄快照等操作的功能。在创建角色时,使用 Cluster Permissions (集群权限)部分管理这些权限。有关集群级权限的完整列表,请参阅集群权限

您通常可以使用默认操作组的组合来实现所需的安全状况,而不是个人权限。有关集群级操作组的列表,请参阅集群级

索引级安全性

索引级权限包括用于执行创建新索引、搜索索引、读取和写入文档、删除文档、管理别名等操作的功能。在创建角色时,使用 Index Permissions (索引权限)部分管理这些权限。有关索引级权限的完整列表,请参阅索引权限

您通常可以使用默认操作组的组合来实现所需的安全状况,而不是个人权限。有关索引级操作组的列表,请参阅索引级

文档级安全性

文档级安全性允许您限制用户可在索引中查看的文档。在创建角色时,请指定索引模式和 OpenSearch 查询。映射到该角色的任何用户只能查看与查询匹配的文档。文档级安全性将影响搜索时收到的命中数

有关更多信息,请参阅文档级安全性

字段级安全性

字段级安全性允许您控制用户可查看的文档字段。创建角色时,添加要包含或排除的字段的列表。如果包含字段,则映射到该角色的任何用户都只能查看这些字段。如果排除字段,则他们可以查看 排除的字段之外的所有字段。字段级安全性将影响搜索时包含在命中内的字段数

有关更多信息,请参阅字段级安全性

字段掩码

字段遮罩是字段级安全性的替代方法,它允许您匿名化字段中的数据,而不是将其完全删除。创建角色时,添加要遮罩的字段的列表。字段遮罩将影响搜索时是否能查看字段内容

提示

如果将标准掩码应用于字段,OpenSearch Service 将使用可能导致不准确的聚合结果的安全随机散列。要对掩码字段执行聚合,请改用基于模式的掩码。

创建用户

如果启用了内部用户数据库,则可以使用 OpenSearch 控制面板或 REST API 中的 _plugins/_security 操作创建用户。有关更多信息,请参阅创建用户

如果您为主用户选择了 IAM,请忽略控制面板的此部分。改为创建 IAM 角色。有关更多信息,请参阅 IAM 用户指南

将角色映射到用户

角色映射是精细访问控制的最重要的方面。精细访问控制具有一些预定义的角色来帮助您入门,但除非您将角色映射到用户,否则,向集群发出的每个请求都会以权限错误结束。

后端角色有助于简化角色映射过程。您可以将角色映射到全部 100 个用户共享的单个后端角色,而不是将同一角色映射到 100 个单独的用户。后端角色可以为 IAM 角色或任意字符串。

  • 请在 Users(用户)部分指定用户、用户 ARN 和 Amazon Cognito 用户字符串。Cognito 用户字符串采用的形式为 Cognito/user-pool-id/username

  • Backend roles (后端角色) 部分中指定后端角色和 IAM 角色 ARN。

角色映射屏幕

可以使用 OpenSearch 控制面板 或 REST API 中的 _plugins/_security 操作将角色映射到用户。有关更多信息,请参阅将角色映射到用户

创建操作组

操作组是可以在不同的资源中重用的权限集。可以使用 OpenSearch 控制面板或 REST API 中的 _plugins/_security 操作创建新的操作组,尽管原定设置操作组对于大多数使用案例来说已够用了。有关原定设置操作组的更多信息,请参阅原定设置操作组

OpenSearch 控制面板多租户

租户是用于保存索引模式、可视化内容、控制面板和其他控制面板对象的空间。控制面板多租户可让您安全地与其他控制面板用户共享您的工作(或保持您工作的私密性)并动态配置租户。您可以控制哪些角色有权访问租户,以及这些角色是否具有读取或写入访问权限。全局租户是默认租户。要了解更多信息,请参阅OpenSearch 控制面板多租户

查看当前租户或更改租户
  1. 导航到 OpenSearch 控制面板并进行登录。

  2. 选择右上角的用户图标,然后选择切换租户

  3. 在创建可视化内容或控制面板之前验证租户。如果想与所有其他控制面板用户共享您的工作,请选择 Global (全球)。要与一部分控制面板用户共享您的工作,请选择其他共享租户。否则,请选择 Private (私有)

注意

OpenSearch 控制面板为每个租户维护一个单独的索引,并创建一个名为 tenant_template 的索引模板。请勿删除或修改 tenant_template 索引,因为如果租户索引映射配置错误,它可能会导致 OpenSearch 控制面板出现故障。

推荐配置

由于精细访问控制与其他安全功能的交互方式,我们建议您使用适用于大多数使用案例的多种精细访问控制配置。

描述 主用户 域访问策略

将 IAM 凭证用于对 OpenSearch API 的调用,并使用 SAML 身份验证访问控制面板。使用控制面板 REST API 管理精细访问控制角色。

IAM 角色或用户
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": "es:ESHttp*", "Resource": "domain-arn/*" } ] }

将 IAM 凭证或基本身份验证用于对 OpenSearch API 的调用。使用控制面板 REST API 管理精细访问控制角色。

此配置提供了很多灵活性,尤其是当您的 OpenSearch 客户端只支持基本身份验证时。

如果您有现有身份提供商,则使用 SAML 身份验证访问控制面板。否则,请管理内部用户数据库中的控制面板用户。

用户名和密码
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": "es:ESHttp*", "Resource": "domain-arn/*" } ] }

将 IAM 凭证调用 OpenSearch API,并使用 Amazon Cognito 访问控制面板。使用控制面板或 REST API 管理精细访问控制角色。

IAM 角色或用户
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": "es:ESHttp*", "Resource": "domain-arn/*" } ] }

将 IAM 凭证用于对 OpenSearch API 的调用,并阻止对仪表板的大多数访问。使用 REST API 管理精细访问控制角色。

IAM 角色或用户
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": "es:ESHttp*", "Resource": "domain-arn/*" }, { "Effect": "Deny", "Principal": { "AWS": "*" }, "Action": "es:ESHttp*", "Resource": "domain-arn/_dashboards*" } ] }

限制

精细访问控制具有几个重要限制:

  • 如果域位于 VPC 中,则角色映射的 hosts 部分(将角色映射映射到主机名或 IP 地址)会不起作用。您仍可以将角色映射到用户和后端角色。

  • 如果您为主用户选择 IAM,但不启用 Amazon Cognito 或 SAML 身份验证,控制面板将显示一个不起作用的登录页面。

  • 如果您为主用户选择 IAM,则仍可以在内部用户数据库中创建用户。但是,由于此配置下未启用 HTTP 基本身份验证,因此,使用这些用户凭证签名的任何请求都将被拒绝。

  • 如果您使用 SQL 查询您无权访问的索引,则您会收到“no permissions (无权限)”错误。如果索引不存在,则会收到“no such index (无此类索引)”错误。错误消息中的此类差异意味着,如果您碰巧猜到其名称,则可以确认索引的存在。

    要最大程度地减小问题,请不要在索引名称中包含敏感信息。要拒绝所有对 SQL 的访问,请将以下元素添加到您的域访问策略:

    { "Effect": "Deny", "Principal": { "AWS": [ "*" ] }, "Action": [ "es:*" ], "Resource": "arn:aws:es:us-east-1:123456789012:domain/my-domain/_plugins/_sql" }
  • 如果您的域版本为 2.3 或更高版本且启用了精细访问控制,则将 max_clause_count 设置为 1 会导致域出现问题。我们建议将此账户设置为更高的数值。

  • 如果您在未设置精细访问控制的域中启用精细访问控制,则对于为直接查询而创建的数据来源,需要自行设置精细访问控制角色。有关如何设置精细访问控制角色的更多信息,请参阅创建与 Amazon S3 的 Amazon OpenSearch Service 数据来源集成

修改主用户

如果您忘记了主用户的详细信息,则可以使用控制台、AWS CLI 或配置 API 重新配置它。

修改主用户(控制台)
  1. 导航到位于 https://console.aws.amazon.com/aos/home/ 的 Amazon OpenSearch Service 控制台。

  2. 选择域,然后选择 Actions(操作)、Edit security configuration(编辑安全配置)。

  3. 选择 Set IAM ARN as master user (将 IAM ARN 设置为主用户)Create new master user (创建新的主用户)

    • 如果您之前使用了 IAM 主用户,则精细访问控制会将 all_access 角色重新映射到您指定的新 IAM ARN。

    • 如果您之前使用了内部用户数据库,则精细访问控制会创建一个新的主用户。您可以使用新的主用户删除旧的主用户。

    • 从内部用户数据库切换到 IAM 主用户从内部用户数据库中删除任何用户。相反,它只是禁用 HTTP 基本身份验证。手动从内部用户数据库中删除用户,或保留这些用户,以防您需要重新启用 HTTP 基本身份验证。

  4. 选择 Save changes(保存更改)

其他主用户

在创建域时指定主用户,但如果需要,可以使用此主用户创建其他主用户。您有两种选择:Open search 控制面板或 REST API。

  • 在控制面板中,选择 Security (安全性)Roles (角色),然后将新主用户映射到 all_accesssecurity_manager 角色。

    角色映射页面
  • 要使用 REST API,请发送以下请求:

    PUT _plugins/_security/api/rolesmapping/all_access { "backend_roles": [ "arn:aws:iam::123456789012:role/fourth-master-user" ], "hosts": [], "users": [ "master-user", "second-master-user", "arn:aws:iam::123456789012:user/third-master-user" ] }
    PUT _plugins/_security/api/rolesmapping/security_manager { "backend_roles": [ "arn:aws:iam::123456789012:role/fourth-master-user" ], "hosts": [], "users": [ "master-user", "second-master-user", "arn:aws:iam::123456789012:user/third-master-user" ] }

    这些请求将替换 当前角色映射,因此,首先执行 GET 请求,以便您可以在 PUT 请求中包含所有当前角色。如果您无法访问控制面板,并且希望将 IAM 角色从 Amazon Cognito 映射到 all_access 角色,则 REST API 会特别有用。

手动快照

精细访问控制会给拍摄手动快照带来一些额外的复杂性。要注册快照存储库——即使您使用 HTTP 基本身份验证以实现所有其他目的——您必须将 manage_snapshots 角色映射到具有 iam:PassRole 权限的 IAM 角色来代入 TheSnapshotRole,如 先决条件 中所定义。

然后,使用该 IAM 角色向域发送已签名请求,如注册手动快照存储库中所述。

集成

如果您将其他 AWS 服务与 结合使用,则必须为这些服务提供具有适当权限的 IAM 角色。例如,Data Firehose 传输流通常使用名为 firehose_delivery_role 的 IAM 角色。在控制面板中,创建一个用于精细访问控制的角色,并将 IAM 角色映射到该角色。在此情况下,新角色需要以下权限:

{ "cluster_permissions": [ "cluster_composite_ops", "cluster_monitor" ], "index_permissions": [{ "index_patterns": [ "firehose-index*" ], "allowed_actions": [ "create_index", "manage", "crud" ] }] }

权限将因每个服务执行的操作而异。为数据建立索引的 AWS IoT 规则或 AWS Lambda 函数可能需要对 Firehose 的类似权限,而仅执行搜索的 Lambda 函数可使用更有限的权限集。

REST API 差异

精细访问控制 REST API 会因您的 OpenSearch/Elasticsearch 版本而略为不同。在发出 PUT 请求之前,请发出 GET 请求以验证预期请求正文。例如,对 _plugins/_security/api/userGET 请求将返回所有用户,然后您可以修改并使用这些用户来发出有效的 PUT 请求。

在 Elasticsearch 6. x,用于创建用户的请求与以下内容类似:

PUT _opendistro/_security/api/user/new-user { "password": "some-password", "roles": ["new-backend-role"] }

在 OpenSearch 或 Elasticsearch 7.x 上,请求与以下内容类似(如果使用 Elasticsearch,则将 _plugins 更改为 _opendistro):

PUT _plugins/_security/api/user/new-user { "password": "some-password", "backend_roles": ["new-backend-role"] }

此外,在 Elasticsearch 6. x 中,租户是角色的属性:

GET _opendistro/_security/api/roles/all_access { "all_access": { "cluster": ["UNLIMITED"], "tenants": { "admin_tenant": "RW" }, "indices": { "*": { "*": ["UNLIMITED"] } }, "readonly": "true" } }

在 OpenSearch 和 Elasticsearch 7.x 中,它们是具有自己 URI 的对象(如果使用 Elasticsearch,则将 _plugins 更改为 _opendistro):

GET _plugins/_security/api/tenants { "global_tenant": { "reserved": true, "hidden": false, "description": "Global tenant", "static": false } }

有关 OpenSearch REST API 的文档,请参阅安全插件 API 参考

提示

如果您使用内部用户数据库,则可以使用 curl 发出请求并测试您的域。尝试以下示例命令:

curl -XGET -u 'master-user:master-user-password' 'domain-endpoint/_search' curl -XGET -u 'master-user:master-user-password' 'domain-endpoint/_plugins/_security/api/user'