

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 在 Amazon OpenSearch 擷取中設定角色和使用者
<a name="pipeline-security-overview"></a>

Amazon OpenSearch Ingestion 使用各種許可模型和 IAM 角色，以允許來源應用程式寫入管道，並允許管道寫入接收器。您必須先根據您的使用案例建立具有特定許可的一或多個 IAM 角色，才能開始擷取資料。

至少需要下列角色才能設定成功的管道。


| 名稱 | 描述 | 
| --- | --- | 
| [**管道角色**](#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_tw/opensearch-service/latest/developerguide/images/pipeline-security.png)


如需簡單的設定指南，請參閱 [教學課程：使用 Amazon OpenSearch Ingestion 將資料擷取至網域](osis-get-started.md)。

**主題**
+ [管道角色](#pipeline-security-sink)
+ [擷取角色](#pipeline-security-same-account)
+ [跨帳戶擷取](#pipeline-security-different-account)

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

管道需要特定許可，才能從其來源讀取和寫入其接收器。這些許可取決於用戶端應用程式或寫入管道 AWS 服務 的 ，以及目的地是 OpenSearch Service 網域、OpenSearch Serverless 集合或 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_tw/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 為您建立管道角色。它會根據設定的來源和目的地，自動識別角色所需的許可。它使用您輸入的字首 和 `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 和 OpenTelemetry Collector，請參閱 [將 Amazon OpenSearch Ingestion 管道與其他 服務和應用程式整合](configure-client.md)。

#### 寫入網域目的地的許可
<a name="pipeline-security-domain-sink"></a>

OpenSearch Ingestion 管道需要許可，才能寫入設定為其目的地的 OpenSearch Service 網域。這些許可包括描述網域並向其傳送 HTTP 請求的能力。公有和 VPC 網域的這些許可相同。如需建立管道角色並在網域存取政策中指定該角色的說明，請參閱[允許管道存取網域](pipeline-domain-access.md)。

#### 寫入集合目的地的許可
<a name="pipeline-security--collection-sink"></a>

OpenSearch Ingestion 管道需要許可，才能寫入設定為其接收器的 OpenSearch Serverless 集合。這些許可包括描述集合並向其傳送 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 Ingestion 管道互動和傳送資料。對於推送型來源，例如 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 政策，請參閱 [提供跨帳戶擷取存取權](configure-client.md#configure-client-cross-account)。

# 授予 Amazon OpenSearch Ingestion 管道對網域的存取權
<a name="pipeline-domain-access"></a>

Amazon OpenSearch Ingestion 管道需要許可，才能寫入設定為其目的地的 OpenSearch Service 網域。若要提供存取權，您可以使用限制性許可政策來設定 AWS Identity and Access Management (IAM) 角色，以限制對管道傳送資料的網域的存取。例如，您可能想要將擷取管道限制為僅支援其使用案例所需的網域和索引。

**重要**  
您可以選擇手動建立管道角色，也可以讓 OpenSearch Ingestion 在管道建立期間為您建立。如果您選擇自動建立角色，OpenSearch Ingestion 會根據您選擇的來源和目的地，將所有必要的許可新增至管道角色存取政策。它會在 IAM 中以您輸入的字首`OpenSearchIngestion-`和尾碼建立管道角色。如需詳細資訊，請參閱[管道角色](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 Resource Name (ARN) 做為主使用者，且它與管道角色*不同*，則需要將管道角色映射至 OpenSearch `all_access` 後端角色。這會將管道角色新增為額外的主要使用者。如需詳細資訊，請參閱[其他主要使用者](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/fgac.html#fgac-more-masters)。
+ **案例 2：內部使用者資料庫中的主要使用者** – 如果您的網域使用內部使用者資料庫中的主要使用者，以及 OpenSearch Dashboards 的 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_tw/opensearch-service/latest/developerguide/images/ingestion-fgac.png)


# 授予 Amazon OpenSearch Ingestion 管道對集合的存取權
<a name="pipeline-collection-access"></a>

Amazon OpenSearch Ingestion 管道可以寫入 OpenSearch Serverless 公有集合或 VPC 集合。若要提供集合的存取權，您可以使用授予集合存取權的許可政策來設定 AWS Identity and Access Management (IAM) 管道角色。管道會擔任此角色，以簽署 OpenSearch Serverless 集合目的地的請求。

**重要**  
您可以選擇手動建立管道角色，也可以讓 OpenSearch Ingestion 在管道建立期間為您建立。如果您選擇自動建立角色，OpenSearch Ingestion 會根據您選擇的來源和目的地，將所有必要的許可新增至管道角色存取政策。它會在 IAM 中以您輸入的字首`OpenSearchIngestion-`和尾碼建立管道角色。如需詳細資訊，請參閱[管道角色](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_tw/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 集合。如需建立集合的指示，請參閱 [建立集合](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 Resource Name (ARN)。

### 網路存取政策
<a name="pipeline-network-access"></a>

您在 OpenSearch Serverless 中建立的每個集合至少有一個與其相關聯的網路存取政策。網路存取政策會判斷是否可透過網際網路從公有網路存取集合，或是否必須私下存取集合。如需網路政策的詳細資訊，請參閱 [Amazon OpenSearch Serverless 的網路存取](serverless-network.md)。

在網路存取政策中，您只能指定 OpenSearch Serverless 受管 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 新增至網路政策的任何規則都名為 **Created by Data Prepper**：

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


**注意**  
一般而言，指定集合公有存取權的規則會覆寫指定私有存取權的規則。因此，如果政策已設定*公開*存取，則 OpenSearch Ingestion 新增的這個新規則實際上不會變更政策的行為。如需詳細資訊，請參閱[政策優先順序](serverless-network.md#serverless-network-precedence)。

如果您停止或刪除管道，OpenSearch Ingestion 會刪除管道與集合之間的 VPC 端點。它也會修改網路政策，從允許的端點清單中移除 VPC 端點。如果您重新啟動管道，它會重新建立 VPC 端點，並使用端點 ID 重新更新網路政策。