

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

# 在 Amazon OpenSearch Ingestion 中设置角色和用户
<a name="pipeline-security-overview"></a>

Amazon OpenSearch Ingestion 使用各种权限模型和 IAM 角色来允许源应用程序写入管道，并允许管道写入接收器。在开始提取数据之前，您需要根据自己的用例创建一个或多个具有具体权限的 IAM 角色。

至少需要以下角色才能成功设置管道。


| Name | 说明 | 
| --- | --- | 
| [**管道角色**](#pipeline-security-sink) |  管道角色为管道提供从源读取数据并写入域或集合接收器的必要权限。您可以手动创建管道角色，也可以让 OpenSearch Ingestion 为您创建该角色。  | 
| [**提取角色**](#pipeline-security-same-account) |  提取角色包含对管道资源的 `osis:Ingest` 权限。此权限允许基于推送的源将数据摄取到管道中。  | 

下图演示了典型的管道设置，其中诸如 Amazon S3 或 Fluent Bit 之类的数据来源使用不同的账户写入管道。在这种情况下，客户端需要担任提取角色才能访问管道。有关更多信息，请参阅 [跨账户提取](#pipeline-security-different-account)。

![\[Cross-account data ingestion pipeline showing client application, roles, and OpenSearch sink.\]](http://docs.aws.amazon.com/zh_cn/opensearch-service/latest/developerguide/images/pipeline-security.png)


欲了解简易设置指南，请参阅[教程：使用 Amazon Ingestion 将数据提取到域中 OpenSearch](osis-get-started.md)。

**主题**
+ [管道角色](#pipeline-security-sink)
+ [提取角色](#pipeline-security-same-account)
+ [跨账户提取](#pipeline-security-different-account)

## 管道角色
<a name="pipeline-security-sink"></a>

管道需要特定权限才能从源读取数据并向目标写入数据。这些权限取决于客户端应用程序或 AWS 服务 正在写入管道的应用程序，以及接收器是 OpenSearch 服务域、 OpenSearch 无服务器集合还是 Amazon S3。此外，管道可能需要权限才能从源应用程序（如果源应用程序是基于拉取的插件）物理*拉取*数据，以及写入 S3 死信队列（如果已启用）。

创建管道时，您可以选择指定手动创建的现有 IAM 角色，也可以让 OpenSearch Ingestion 根据您选择的源和接收器自动创建管道角色。下图显示如何在 AWS 管理控制台中指定管道角色。

![\[Pipeline role selection interface with options to create new or use existing IAM role.\]](http://docs.aws.amazon.com/zh_cn/opensearch-service/latest/developerguide/images/pipeline-role.png)


**Topics**
+ [

### 自动创建管道角色
](#pipeline-role-auto-create)
+ [

### 手动创建管道角色
](#pipeline-role-manual-create)

### 自动创建管道角色
<a name="pipeline-role-auto-create"></a>

你可以选择让 OpenSearch Ingestion 为你创建管道角色。OpenSearch Ingestion 会根据配置的源和接收器自动识别角色所需的权限。OpenSearch Ingestion 会利用您输入的前缀 `OpenSearchIngestion-` 和后缀创建 IAM 角色。例如，如果您输入`PipelineRole`作为后缀， OpenSearch Ingestion 会创建一个名为的角色。`OpenSearchIngestion-PipelineRole`

自动创建管道角色可简化设置流程，并降低配置错误的发生概率。通过自动化角色创建，可避免手动分配权限，确保正确策略得以应用，同时规避安全配置错误的风险。这还通过实施最佳实践节省时间并增强安全合规性，同时确保多个管道部署的一致性。

您只能让 OpenSearch Ingestion 在中自动创建管道角色。 AWS 管理控制台如果您使用的是 AWS CLI、 OpenSearch Ingestion API 或其中一个 SDKs，则必须指定手动创建的管道角色。

要让 OpenSearch Ingestion 为您创建角色，请选择**创建并使用新的服务**角色。

**重要**  
您仍需手动修改域或集合访问策略，以授予对管道角色的访问权限。对于使用精细访问控制的域，您还必须将管道角色映射至后端角色。您可以在创建管道之前或之后执行这些步骤。  
有关说明，请参阅以下主题：  
[为域配置数据访问权限](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/pipeline-domain-access.html#pipeline-access-domain)
[为集合配置数据和网络访问权限](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/pipeline-domain-access.html#pipeline-collection-acces)

### 手动创建管道角色
<a name="pipeline-role-manual-create"></a>

如果需更精细地控制权限以满足特定的安全性或合规性要求，您可能需要手动创建管道角色。手动创建可让您根据现有基础设施或访问管理策略定制角色。您也可以选择手动设置来将该角色与其他角色集成， AWS 服务 或者确保其符合您的独特运营需求。

要选择手动创建的管道角色，请选择**使用现有 IAM 角色**，然后选择现有角色。该角色必须具有从选定源接收数据并写入所选接收器所需的所有权限。以下各节概述如何手动创建管道角色。

**Topics**
+ [

#### 从源读取的权限
](#pipeline-security--source)
+ [

#### 写入域接收器的权限
](#pipeline-security-domain-sink)
+ [

#### 写入集合接收器的权限
](#pipeline-security--collection-sink)
+ [

#### 写入 Amazon S3 或死信队列的权限
](#pipeline-security-dlq)

#### 从源读取的权限
<a name="pipeline-security--source"></a>

 OpenSearch 摄取管道需要权限才能读取和接收来自指定来源的数据。例如，Amazon DynamoDB 源需要诸如 `dynamodb:DescribeTable` 和 `dynamodb:DescribeStream` 之类的权限。有关常见来源（例如 Amazon S3、Fluent Bit 和 Collecto OpenTelemetry r）的管道角色访问策略示例，请参阅[将 Amazon OpenSearch Ingestion 管道与其他服务和应用程序集成](configure-client.md)。

#### 写入域接收器的权限
<a name="pipeline-security-domain-sink"></a>

 OpenSearch 摄取管道需要权限才能写入配置为接收器的 OpenSearch 服务域。这些权限包括能够描述域以及向其发送 HTTP 请求。公有域和 VPC 域需要相同的权限。有关创建管道角色并在域访问策略中指定该管道角色的说明，请参阅[允许管道访问域](pipeline-domain-access.md)。

#### 写入集合接收器的权限
<a name="pipeline-security--collection-sink"></a>

 OpenSearch 摄取管道需要权限才能写入配置为其 OpenSearch 接收器的无服务器集合。这些权限包括能够描述集合以及向其发送 HTTP 请求。

首先，确保您的管道角色访问策略授予所需的权限。然后，将此角色包含在数据访问策略中，并为其提供在集合中创建索引、更新索引、描述索引和写入文档的权限。有关完成其中每个步骤的说明，请参阅[允许管道访问集合](pipeline-collection-access.md)。

#### 写入 Amazon S3 或死信队列的权限
<a name="pipeline-security-dlq"></a>

如果将 Amazon S3 指定为管道的接收器目标，或者如果启用[死信队列](https://opensearch.org/docs/latest/data-prepper/pipelines/dlq/)（DLQ），则管道角色必须允许其访问您指定为目标的 S3 存储桶。

为提供 DLQ 访问权限的管道角色附加单独的权限策略。至少必须授予该角色对存储桶资源执行 `S3:PutObject` 操作的权限：

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "WriteToS3DLQ",
      "Effect": "Allow",
      "Action": "s3:PutObject",
      "Resource": "arn:aws:s3:::my-dlq-bucket/*"
    }
  ]
}
```

------

## 提取角色
<a name="pipeline-security-same-account"></a>

摄取角色是一个 IAM 角色，允许外部服务安全地与 OpenSearch 摄取管道交互并向其发送数据。对于基于推送的源（例如 Amazon Security Lake），此角色必须授予将数据推送至管道的权限，包括 `osis:Ingest`。对于基于拉取的源，例如 Amazon S3，角色必须允许 OpenSearch Ingestion 代入并使用必要的权限访问数据。

**Topics**
+ [

### 基于推送的源的提取角色
](#ingestion-role-push-based)
+ [

### 基于拉取的源的提取角色
](#ingestion-role-pull-based)
+ [

### 跨账户提取
](#pipeline-security-different-account)

### 基于推送的源的提取角色
<a name="ingestion-role-push-based"></a>

对于基于推送的源，数据会从其他服务（例如 Amazon Security Lake 或 Amazon DynamoDB）发送或推送到摄取管道。在此情况下，提取角色至少需要与 `osis:Ingest` 管道进行交互的权限。

以下 IAM 访问策略演示如何向提取角色授予此权限：

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "osis:Ingest"
      ],
      "Resource": "arn:aws:osis:us-east-1:111122223333:pipeline/pipeline-name/*"
    }
  ]
}
```

------

### 基于拉取的源的提取角色
<a name="ingestion-role-pull-based"></a>

对于基于拉取的源， OpenSearch Ingestion 管道会主动从外部来源（例如 Amazon S3）提取或获取数据。在此情况下，管道必须代入授予访问数据来源所需权限的 IAM 管道角色。在这些场景中，*提取角色*与*管道角色*具有同等含义。

该角色必须包括允许 OpenSearch Ingestion 担任该角色的信任关系以及特定于数据源的权限。有关更多信息，请参阅 [从源读取的权限](#pipeline-security--source)。

### 跨账户提取
<a name="pipeline-security-different-account"></a>

您可能需要从其他 AWS 账户渠道（例如应用程序帐户）将数据提取到管道中。要配置跨账户提取，请在与管道相同的账户中定义一个提取角色，并在提取角色和应用程序账户之间建立信任关系：

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [{
     "Effect": "Allow",
     "Principal": {
       "AWS": "arn:aws:iam::444455556666:root"
      },
     "Action": "sts:AssumeRole"
  }]
}
```

------

然后，将您的应用程序配置为担任提取角色。应用程序账户必须向应用程序角色授予管道账户中摄取角色的[AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html)权限。

有关详细步骤和 IAM policy 示例，请参阅[提供跨账户摄取访问权限](configure-client.md#configure-client-cross-account)。

# 向 Amazon OpenSearch Ingestion 管道授予对域名的访问权限
<a name="pipeline-domain-access"></a>

Amazon OpenSearch Ingestion 管道需要权限才能写入配置为其接收器的 OpenSearch 服务域。要提供访问权限，您需要为一个 AWS Identity and Access Management (IAM) 角色配置一个限制性权限策略，该策略限制了对管道向其发送数据的域的访问权限。例如，您可能希望将摄取管道限制为仅含支持其用例所需的域和索引。

**重要**  
您可以选择手动创建管道角色，也可以让 OpenSearch Ingestion 在创建管道期间为您创建该角色。如果您选择自动创建角色， OpenSearch Ingestion 会根据您选择的来源和接收器将所有必需的权限添加到管道角色访问策略中。OpenSearch Ingestion 会使用您输入的前缀 `OpenSearchIngestion-` 和后缀，在 IAM 中创建管道角色。有关更多信息，请参阅 [管道角色](pipeline-security-overview.md#pipeline-security-sink)。  
如果您让 OpenSearch Ingestion 为您创建管道角色，则在创建管道之前或之后，您仍然需要将该角色包含在域访问策略中，并将其映射到后端角色（如果该域使用精细访问控制）。有关说明，请参阅步骤 2。

**Topics**
+ [

## 步骤 1：创建管道角色
](#pipeline-access-configure)
+ [

## 步骤 2：为域配置数据访问权限
](#pipeline-access-domain)

## 步骤 1：创建管道角色
<a name="pipeline-access-configure"></a>

管道角色必须具有允许其向域接收器发送数据的附加权限策略。它还必须具有允许 OpenSearch Ingestion担任该角色的信任关系。有关如何附加角色策略的说明，请参阅 *IAM 用户指南*中的[添加 IAM 身份权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html#add-policies-console)。

以下示例策略演示您可以在管道角色中授予的[最低权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege)，使其能够向单个域写入数据：

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "es:DescribeDomain",
            "Resource": "arn:aws:es:*:111122223333:domain/*"
        },
        {
            "Effect": "Allow",
            "Action": "es:ESHttp*",
            "Resource": "arn:aws:es:*:111122223333:domain/domain-name/*"
        }
    ]
}
```

------

如果计划重用角色写入多个域，则可以将域名替换为通配符（`*`）来扩大策略范围。

该角色必须具有以下[信任关系](https://docs.aws.amazon.com/IAM/latest/UserGuide/roles-managingrole-editing-console.html#roles-managingrole_edit-trust-policy)，这允许 OpenSearch Ingestion 担任管道角色：

------
#### [ JSON ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Effect":"Allow",
         "Principal":{
            "Service":"osis-pipelines.amazonaws.com"
         },
         "Action":"sts:AssumeRole"
      }
   ]
}
```

------

## 步骤 2：为域配置数据访问权限
<a name="pipeline-access-domain"></a>

为使管道能够将数据写入域，域必须具有[域级访问策略](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/ac.html#ac-types-resource)，以允许管道角色访问域。

以下示例域访问策略允许名为 `pipeline-role` 的管道角色向名为 `ingestion-domain` 的域写入数据：

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:role/pipeline-role"
            },
            "Action": [
                "es:DescribeDomain",
                "es:ESHttp*"
            ],
            "Resource": "arn:aws:es:us-east-1:111122223333:domain/domain-name/*"
        }
    ]
}
```

------

### 映射管道角色（仅适用于使用精细访问控制的域）
<a name="pipeline-access-domain-fgac"></a>

如果您的域使用[精细访问控制](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/fgac.html)进行身份验证，则需要采取额外步骤，为管道提供域访问权限。步骤因域配置而异：
+ **场景 1：不同的主角色和管道角色** — 如果您使用 IAM Amazon 资源名称 (ARN) 作为主用户，并且该名称与管道角色*不同*，则需要将管道角色映射到 OpenSearch`all_access`后端角色。这会将管道角色添加为其他主用户。有关更多信息，请参阅[其他主用户](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/fgac.html#fgac-more-masters)。
+ **场景 2：内部用户数据库中的主用户**-如果您的域使用内部用户数据库中的主用户和 OpenSearch 仪表板的 HTTP 基本身份验证，则无法将主用户名和密码直接传递到工作流配置中。而是将管道角色映射到后 OpenSearch`all_access`端角色。这会将管道角色添加为其他主用户。有关更多信息，请参阅[其他主用户](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/fgac.html#fgac-more-masters)。
+ **场景 3：主角色与管道角色相同（不常见）**：如果您使用 IAM ARN 作为主用户，且主用户与作为管道角色的 ARN 相同，则无需采取任何进一步的操作。管道具有写入域所需的权限。此场景并不常见，因为绝大多数环境使用管理员角色或其他角色作为主角色。

下图显示了如何将管道角色映射到后端角色：

![\[Backend roles section showing an AWSIAM role ARN for a pipeline role with a Remove option.\]](http://docs.aws.amazon.com/zh_cn/opensearch-service/latest/developerguide/images/ingestion-fgac.png)


# 授予 Amazon OpenSearch Ingestion 管道访问集合的权限
<a name="pipeline-collection-access"></a>

Amazon OpenSearch Ingestion 管道可以写入 OpenSearch 无服务器公共集合或 VPC 集合。要提供对集合的访问权限，您需要为一个 AWS Identity and Access Management (IAM) 管道角色配置权限策略，以授予对集合的访问权限。管道扮演此角色是为了签署对 OpenSearch Serverless 集合接收器的请求。

**重要**  
您可以选择手动创建管道角色，也可以让 OpenSearch Ingestion 在创建管道期间为您创建该角色。如果您选择自动创建角色， OpenSearch Ingestion 会根据您选择的来源和接收器将所有必需的权限添加到管道角色访问策略中。OpenSearch Ingestion 会使用您输入的前缀 `OpenSearchIngestion-` 和后缀，在 IAM 中创建管道角色。有关更多信息，请参阅 [管道角色](pipeline-security-overview.md#pipeline-security-sink)。  
如果您让 OpenSearch Ingestion 为您创建管道角色，则在创建管道之前或之后，您仍然需要将该角色包含在集合的数据访问策略中。有关说明，请参阅步骤 2。

在创建管道期间， OpenSearch Ingestion 会在管道和 OpenSearch Serverless 集合之间创建 AWS PrivateLink 连接。来自管道的所有流量都将通过此 VPC 端点并路由到集合。要连接到集合，必须通过网络访问策略向端点授予访问该集合的权限。

![\[OpenSearch Ingestion pipeline connecting to OpenSearch Serverless collection via PrivateLink VPC endpoint.\]](http://docs.aws.amazon.com/zh_cn/opensearch-service/latest/developerguide/images/osis-aoss-permissions.png)


**Topics**
+ [

## 步骤 1：创建管道角色
](#pipeline-collection-access-configure)
+ [

## 步骤 2：为集合配置数据和网络访问权限
](#pipeline-access-collection)

## 步骤 1：创建管道角色
<a name="pipeline-collection-access-configure"></a>

管道角色必须具有允许其向集合接收器发送数据的附加权限策略。它还必须具有允许 OpenSearch Ingestion担任该角色的信任关系。有关如何附加角色策略的说明，请参阅 *IAM 用户指南*中的[添加 IAM 身份权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html#add-policies-console)。

以下示例策略演示您可以在管道角色访问策略中设置的[最低权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege)，使其能够向集合写入数据：

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "Statement1",
            "Effect": "Allow",
            "Action": [
                "aoss:APIAccessAll",
                "aoss:BatchGetCollection",
                "aoss:CreateSecurityPolicy",
                "aoss:GetSecurityPolicy",
                "aoss:UpdateSecurityPolicy"
            ],
            "Resource": "*"
        }
    ]
}
```

------

该角色必须具有以下[信任关系](https://docs.aws.amazon.com/IAM/latest/UserGuide/roles-managingrole-editing-console.html#roles-managingrole_edit-trust-policy)，这允许 OpenSearch Ingestion 担任该角色：

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "osis-pipelines.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}
```

------

## 步骤 2：为集合配置数据和网络访问权限
<a name="pipeline-access-collection"></a>

使用以下设置创建 OpenSearch 无服务器集合。有关创建集合的说明，请参阅[创建集合](serverless-create.md)。

### 数据访问策略
<a name="pipeline-data-access"></a>

为集合创建一个向管道角色授予所需权限的[数据访问策略](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-data-access.html)。例如：

```
[
  {
    "Rules": [
      {
        "Resource": [
          "index/collection-name/*"
        ],
        "Permission": [
          "aoss:CreateIndex",
          "aoss:UpdateIndex",
          "aoss:DescribeIndex",
          "aoss:WriteDocument"
        ],
        "ResourceType": "index"
      }
    ],
    "Principal": [
      "arn:aws:iam::account-id:role/pipeline-role"
    ],
    "Description": "Pipeline role access"
  }
]
```

**注意**  
在 `Principal` 元素中，指定管道角色的 Amazon 资源名称（ARN）。

### 网络访问策略
<a name="pipeline-network-access"></a>

您在 OpenSearch Serverless 中创建的每个集合都至少有一个与之关联的网络访问策略。网络访问策略决定了是否可以通过互联网从公共网络访问该集合，还是必须以私有方式访问该集合。更多有关网络策略的信息，请参阅[Amazon OpenSearch Serverless 的网络访问](serverless-network.md)。

在网络访问策略中，您只能指定 OpenSearch 无服务器托管的 VPC 终端节点。有关更多信息，请参阅 [通过以下方式访问数据平面 AWS PrivateLink](serverless-vpc.md)。但是，为了使管道能够写入集合，该策略还必须授予对 OpenSearch Ingestion 在管道和集合之间自动创建的 VPC 终端节点的访问权限。因此，如果您选择 OpenSearch Serverless 集合作为管道的目标接收器，则必须在 “网络策略名称” 字段中输入关联的**网络策略的名称**。

在创建管道期间， OpenSearch Ingestion 会检查指定的网络策略是否存在。如果它不存在，则 OpenSearch Ingestion 会创建它。如果确实存在， OpenSearch Ingestion 会通过向其添加新规则来对其进行更新。添加的规则会授予对连接管道和集合的 VPC 端点的访问权限。

例如：

```
{
   "Rules":[
      {
         "Resource":[
            "collection/my-collection"
         ],
         "ResourceType":"collection"
      }
   ],
   "SourceVPCEs":[
      "vpce-0c510712627e27269" # The ID of the VPC endpoint that OpenSearch Ingestion creates between the pipeline and collection
   ],
   "Description":"Created by Data Prepper"
}
```

在控制台中， OpenSearch Ingestion 添加到您的网络策略中的所有规则都命名为 Create b **y Data Prepper**：

![\[Configuration details for OpenSearch endpoint access, including VPC endpoint and resources.\]](http://docs.aws.amazon.com/zh_cn/opensearch-service/latest/developerguide/images/osis-aoss-network.png)


**注意**  
通常，为集合指定公有访问权限的规则将会覆盖指定私有访问权限的规则。因此，如果策略已经配置了*公共*访问权限，那么 OpenSearch Ingestion 添加的这条新规则实际上并不会改变策略的行为。有关更多信息，请参阅 [策略优先顺序](serverless-network.md#serverless-network-precedence)。

如果您停止或删除管道， OpenSearch Ingestion 会删除管道和集合之间的 VPC 终端节点。此外还会修改网络策略，将 VPC 端点从允许的端点列表中移除。如果您重启管道，则会重新创建 VPC 端点，并使用端点 ID 重新更新网络策略。