

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

# 限制 OpenSearch 用户界面应用程序的网络访问权限
<a name="application-network-access"></a>

默认情况下， OpenSearch UI 应用程序会公开一个公共端点，该端点接受来自任何网络位置的请求。您的用户仍需要接受身份验证（IAM 或 AWS IAM Identity Center）和授权，但公共互联网上的任何人都可以*访问*该应用程序及其 API。

如果您要求 OpenSearch 用户界面访问权限仅来自经批准的网络，则可以使用已经使用的 AWS Identity and Access Management (IAM) 策略工具强制执行此操作。例如，您可以要求访问权限仅通过接口 VPC 终端节点 (AWS PrivateLink) 或仅来自一定范围的企业 IP 地址到达。由于 OpenSearch UI 使用标准 IAM 请求条件密钥评估访问权限，因此您使用的策略语言和条件密钥与您在其他地方已经使用的策略语言和条件密钥（`aws:SourceVpce``aws:SourceVpc`、和`aws:SourceIp`）相同。 AWS您无需学习特定服务的策略格式。

您可以将访问权限限制在三个级别，从最有针对性的到最广泛的级别：
+ **基于身份的策略**限制特定的委托人（用户或角色）。
+ **VPC 终端节点策略**限制用户可以通过特定终端节点访问哪些应用程序。
+ **资源控制策略 (RCP) ** 强制组织中的每个账户统一访问权限，并且可以在网外用户进行身份验证之前将其屏蔽。* *

本主题介绍用户 OpenSearch 界面如何评估网络访问权限并完成最常见的任务，即屏蔽经批准的网络之外的用户的登录页面。有关三种控制类型的策略示例和 AWS CLI 命令，请参阅[OpenSearch UI 应用程序的网络访问控制配置参考](application-network-access-reference.md)。有关创建私有连接本身的信息，请参阅[管理从 VPC 终端节点对 OpenSearch 用户界面的访问](application-access-ui-from-vpc-endpoint.md)。

**Topics**
+ [OpenSearch UI 如何评估网络访问权限](#application-network-access-how)
+ [先决条件](#application-network-access-prereqs)
+ [阻止从经批准的网络外部访问登录页面](#application-network-access-block-login-page)
+ [注意事项](#application-network-access-considerations)
+ [OpenSearch UI 应用程序的网络访问控制配置参考](application-network-access-reference.md)

## OpenSearch UI 如何评估网络访问权限
<a name="application-network-access-how"></a>

OpenSearch UI 分两个阶段评估访问权限，每个阶段都授权针对应用程序资源执行不同的 IAM 操作。
+ **`opensearch:ViewLoginPage`**。*在用户登录*之前，即浏览器首次请求应用程序登录页面时授权。用户还没有 AWS 证书，因此此请求是匿名的。由于 OpenSearch UI 会在身份验证之前评估此操作，因此拒绝离网请求的资源控制策略会阻止网外用户访问登录页面。这种拒绝同样适用于 IAM 和用户。 AWS IAM Identity Center 
+ **`opensearch:ApplicationAccessAll`**。用户登录*后*获得授权，以访问应用程序及其 API。您可以使用基于身份的策略、VPC 终端节点策略或 RCP 来限制此操作。

OpenSearch UI 授权对应用程序资源 ARN 执行这两项操作：

```
arn:aws:opensearch:{{region}}:{{account-id}}:application/{{application-id}}
```

当请求到达时， OpenSearch UI 会从连接的可信网络元数据中填充以下 IAM 请求条件密钥，以便您可以在策略条件中引用它们：
+ `aws:SourceVpce`。请求到达的接口 VPC 终端节点的 ID（如果有）。
+ `aws:SourceVpc`。请求到达的 VPC 的 ID（如果有）。
+ `aws:SourceIp`。请求的公共来源 IP 地址，用于未通过 VPC 终端节点到达的请求。

## 先决条件
<a name="application-network-access-prereqs"></a>
+ 要限制特定的委托人，您必须有权管理访问该应用程序的用户或角色的 IAM 策略。要限制终端节点，您必须有权管理用于访问该终端节点的 VPC 终端节点的策略。
+ 要使用资源控制策略在组织内强制访问权限，您的账户必须是启用了所有功能 AWS 的组织的成员，并且您必须具有管理资源控制策略的权限。有关更多信息，请参阅《*AWS 组织用户指南》[中的](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_rcps.html)资源控制策略 (RCP)。*
**注意**  
资源控制策略对组织管理账户中的资源没有影响。要使用 RCP 限制 OpenSearch 用户界面应用程序的网络访问权限，该应用程序必须使用成员帐户。
+ 要限制对 VPC 终端节点的访问，请先为 OpenSearch UI 创建一个接口 VPC 终端节点。有关更多信息，请参阅 [管理从 VPC 终端节点对 OpenSearch 用户界面的访问](application-access-ui-from-vpc-endpoint.md)。
+ 要运行本主题中的 AWS Command Line Interface (AWS CLI) 示例，请安装和配置 AWS CLI。有关更多信息，请参阅《AWS Command Line Interface 用户指南》**中的 [AWS Command Line Interface入门](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html)。

## 阻止从经批准的网络外部访问登录页面
<a name="application-network-access-block-login-page"></a>

以下过程会阻止您批准的网络之外的用户的登录页面。它适用于使用 IAM 或 AWS IAM Identity Center 身份验证的应用程序，因为当请求仍然是匿名时，用户 OpenSearch 界面会在用户登录`opensearch:ViewLoginPage`之前进行授权。

**阻止来自经批准的网络外部的登录页面访问**

1. 确认您的应用程序所在的 AWS 账户是您的组织成员，并且您的组织已启用资源控制策略。有关更多信息，请参阅《*AWS 组织用户指南》[中的](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_enable-disable.html)启用策略类型*。

1. 确定用户连接的经批准的网络路径，然后选择匹配的条件密钥。`aws:SourceVpce`用于接口 VPC 终端节点、`aws:SourceVpc` VPC 或`aws:SourceIp`一系列公有 IP 地址，例如公司网络的出口范围。

1. 保存拒绝的资源控制策略，`opensearch:ApplicationAccessAll`除非请求将您批准的网络`opensearch:ViewLoginPage`与名为的本地文件相匹配`policy.json`。以下示例批准了单一接口 VPC 终端节点。有关其他条件键，请参见[OpenSearch UI 应用程序的网络访问控制配置参考](application-network-access-reference.md)。{{placeholder value}}用您自己的 VPC 终端节点 ID 替换。

   ```
   {
       "Version": "2012-10-17",
       "Statement": [
           {
               "Sid": "DenyOpenSearchUIAccessOutsideVpce",
               "Effect": "Deny",
               "Principal": "*",
               "Action": [
                   "opensearch:ViewLoginPage",
                   "opensearch:ApplicationAccessAll"
               ],
               "Resource": "arn:aws:opensearch:*:*:application/*",
               "Condition": {
                   "StringNotEqualsIfExists": {
                       "aws:SourceVpce": "{{vpc-endpoint-id}}"
                   }
               }
           }
       ]
   }
   ```

1. 创建资源控制策略。从您组织的管理账户或委派管理员账户运行以下命令。

   ```
   aws organizations create-policy \
     --name {{DenyOpenSearchUIOffNetwork}} \
     --description "{{Denies OpenSearch UI access from outside the approved network}}" \
     --type RESOURCE_CONTROL_POLICY \
     --content file://policy.json
   ```

   响应包括以开头的策略 ID `p-`。请记下此值以供下一步使用。

1. 将策略附加到组织根目录、组织单位或包含应用程序的账户。要限制第一次更改的范围，请将其附加到单个账户，并在验证行为后扩大范围。

   ```
   aws organizations attach-policy \
     --policy-id {{p-example12345}} \
     --target-id {{111122223333}}
   ```

1. 等待最多一分钟，让策略生效。

1. 在批准的网络外部，请求应用程序登录页面，网址为`https://{{application-endpoint}}/_login/`。您收到的不是登录页面，而是`403 forbidden`响应。
**注意**  
请求`/_login/`路径以确认策略拒绝登录页面。如果您打开没有路径的应用程序 URL，您的浏览器可能会在请求登录页面之前被重定向到登录。在这种情况下，请在您登录后`opensearch:ApplicationAccessAll`拒绝访问。

1. 在经批准的网络内部，请求相同的 URL。登录页面呈现，您可以正常登录。

**注意**  
对于使用 AWS IAM Identity Center 身份验证的应用程序，限制用户登录的网络路径。 OpenSearch 用户界面会在对每个应用程序进行身份验证`opensearch:ViewLoginPage`之前进行评估，因此拒绝该应用程序会阻止网外用户登录。为了限制已经举行有效会话的 IAM 身份中心用户的请求，请让这些用户通过 VPC 终端节点访问应用程序。

## 注意事项
<a name="application-network-access-considerations"></a>

配置网络访问控制时，请记住以下几点：
+ **选择控件**。使用基于身份的策略来限制特定的委托人，使用 VPC 终端节点策略来控制用户可以通过终端节点访问哪些应用程序，使用资源控制策略来强制整个组织进行访问。你可以将它们组合起来进行深度防御。
+ **Pre-authentication 与经过身份验证的访问相比**。只有`opensearch:ViewLoginPage`在 RCP 强制执行的情况下，才能在网外用户登录之前对其进行屏蔽，并统一适用于 IAM 和用户。 AWS IAM Identity Center 条件仅适用于`opensearch:ApplicationAccessAll`限制经过身份验证的主体可以从何处访问应用程序。
+ **政策评估**。显式`Deny`总是覆盖. `Allow` 资源控制策略设置组织中资源的最大可用权限，基于身份的策略不能覆盖 RCP `Deny` 中的显式权限。在广泛应用之前，先针对非生产应用程序测试您的策略。
+ **监控**。使用 AWS CloudTrail 和 IAM 访问分析器来查看您的网络条件对访问的影响。