Amazon 服务中的精细访问控制 OpenSearch - 亚马逊 OpenSearch 服务

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

Amazon 服务中的精细访问控制 OpenSearch

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

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

  • 基于角色的访问控制

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

  • OpenSearch 仪表板多租户

  • OpenSearch 和 OpenSearch 仪表板的 HTTP 基本身份验证

大局:精细的访问控制和服务安全 OpenSearch

Amazon OpenSearch 服务安全有三个主要层:

Network

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

域访问策略

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

精细访问控制

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

注意

如果基于资源的访问策略包含 IAM 角色或用户,则客户端必须使用签 AWS 名版本 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 访问密钥或用户名和密码)。

关于主用户

Ser OpenSearch vice 中的主用户可以是用户名和密码组合,也可以是对底层 OpenSearch集群拥有完全权限的 IAM 委托人。如果用户拥有 OpenSearch 集群的所有访问权限,并且能够在 OpenSearch 仪表板中创建内部用户、角色和角色映射,则该用户被视为主用户。

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

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

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

使用这两个角色,用户可以访问 OpenSearch 仪表板中的 “安全” 选项卡,在那里他们可以管理用户和权限。如果您创建另一个内部用户并且仅将其映射到该all_access角色,则该用户无权访问 “安全” 选项卡。您可以通过将主用户显式映射到all_accesssecurity_manager角色来创建其他主用户。有关说明,请参阅其他主用户

在为域创建主用户时,您可以指定现有的 IAM 委托人,也可以在内部用户数据库中创建主用户。在决定使用哪个时,请考虑以下几点:

  • IAM 委托人 — 如果您为主用户选择 IAM 委托人,则必须使用签 AWS 名版本 4 对集群的所有请求进行签名。

    OpenSearch 服务不考虑任何 IAM 委托人的权限。IAM 用户或角色纯粹用于身份验证。针对该用户或角色的策略与主用户的授权无关。授权是通过 OpenSearch 安全插件中的各种权限进行的。

    例如,您可以向 IAM 委托人分配零 IAM 权限,只要计算机或个人可以向该用户或角色进行身份验证,他们就拥有 OpenSearch 服务中主用户的权力。

    如果您想在多个集群上使用相同的用户,如果您想使用 Amazon Cognito 访问控制面板,或者您的 OpenSearch 客户端支持签名版本 4 签名,我们建议您使用 IAM。

  • 内部用户数据库 — 如果您在内部用户数据库中创建主数据库(使用用户名和密码组合),则可以使用 HTTP 基本身份验证(以及 IAM 证书)向集群发出请求。大多数客户端都支持基本身份验证,包括 curl,它还支持带有 --aw s-s AWS igv4 选项的签名版本 4。内部用户数据库存储在 OpenSearch 索引中,因此您无法与其他集群共享。

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

启用精细访问控制

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

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

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

您可以对正在运行 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 名版本 4 对请求进行签名。如果您使用精细访问控制配置 HTTP 基本身份验证,则必须更新客户端才能在请求中提供相应的基本身份验证凭证。

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

    重要

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

  5. 选择 ‬保存更改

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

在现有域 (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

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

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

迁移场景

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

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

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

您无需启用迁移期。

OpenSearch 服务会自动将所有满足 IAM 策略的用户映射到 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 Dashboards 登录页面和基础身份验证方法会有所不同,具体取决于您管理用户和配置域名的方式。

管理权限

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


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

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

创建角色

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

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

亚马逊 OpenSearch 服务不提供以下 OpenSearch 角色:

  • observability_full_access

  • observability_read_access

  • reports_read_access

  • reports_full_access

Amazon Ser OpenSearch vice 提供了多个不可用的角色 OpenSearch:

  • ultrawarm_manager

  • ml_full_access

  • cold_manager

  • notifications_full_access

  • notifications_read_access

集群级安全性

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

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

索引级安全性

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

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

文档级安全性

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

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

字段级安全性

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

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

字段掩码

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

提示

如果您对字段应用标准掩码,S OpenSearch ervice 会使用安全的随机哈希,这可能会导致聚合结果不准确。要对掩码字段执行聚合,请改用基于模式的掩码。

创建用户

如果您启用了内部用户数据库,则可以使用 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 的亚马逊 OpenSearch 服务数据源集成。

修改主用户

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

修改主用户(控制台)
  1. 导航到亚马逊 OpenSearch 服务控制台,网址为 https://console.aws.amazon.com/aos/home/

  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. 选择 ‬保存更改

其他主用户

在创建域时指定主用户,但如果需要,可以使用此主用户创建其他主用户。你有两个选择: OpenSearch 仪表板或 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 OpenSearch 服务,则必须为这些服务提供具有适当权限的 IAM 角色。例如,Firehose 交付流通常使用名为的 IAM 角色。firehose_delivery_role在控制面板中,创建一个用于精细访问控制的角色,并将 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"] }

在 E OpenSearch lasticsearch 7.x 上,请求如下所示(_opendistro如果使用 Elasticsearch,则改_plugins为):

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 的对象(_opendistro如果使用 Elasticsearch,则改_plugins为):

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'