

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

# Amazon OpenSearch Service 中的安全性
<a name="security"></a>

的雲端安全性 AWS 是最高優先順序。身為 AWS 客戶，您可以受益於資料中心和網路架構，這些架構專為滿足最安全敏感組織的需求而建置。

安全性是 AWS 與您之間的共同責任。[‬共同責任模型‭](https://aws.amazon.com/compliance/shared-responsibility-model/)‬ 將此描述為雲端*‬的‭*‬安全和雲端*‬內*‬的安全：
+ **雲端的安全性** – AWS 負責保護在 Cloud AWS 中執行 AWS 服務的基礎設施。 AWS 也為您提供可安全使用的服務。在 [AWS 合規計畫](https://aws.amazon.com/compliance/programs/)中，第三方稽核員會定期測試並驗證我們的安全功效。若要了解適用於 Amazon OpenSearch Service 的合規計劃，請參閱[合規計劃範圍內的AWS 服務](https://aws.amazon.com/compliance/services-in-scope/)。
+ **雲端的安全性** – 您的責任取決於您使用 AWS 的服務。您也必須對其他因素負責，包括資料的機密性、您公司的要求和適用法律和法規。

本文件有助於您了解如何在使用 OpenSearch Service 時套用共同責任模型。下列主題將顯示如何設定 OpenSearch Service，以符合您的安全與合規目標。您也會了解如何使用其他 AWS 服務來協助您監控和保護 OpenSearch Service 資源。

**Topics**
+ [Amazon OpenSearch Service 中的資料保護](data-protection.md)
+ [Amazon OpenSearch Service 中的 Identity and Access Management](ac.md)
+ [預防跨服務混淆代理人](cross-service-confused-deputy-prevention.md)
+ [Amazon OpenSearch Service 中的精細存取控制](fgac.md)
+ [Amazon OpenSearch Service 的合規驗證](compliance-validation.md)
+ [Amazon CopenSearFront Service 的復原功能](disaster-recovery-resiliency.md)
+ [Amazon OpenSearch Service 的 JWT 身分驗證和授權](JSON-Web-tokens.md)
+ [Amazon OpenSearch Service 中的基礎設施安全性](infrastructure-security.md)
+ [OpenSearch Dashboards 的 SAML 身分驗證](saml.md)
+ [OpenSearch 的 IAM Identity Center 受信任身分傳播支援](idc-aos.md)
+ [設定 OpenSearch Dashboards 的 Amazon Cognito 身分驗證](cognito-auth.md)
+ [使用 Amazon OpenSearch Service 的服務連結角色](slr.md)

# Amazon OpenSearch Service 中的資料保護
<a name="data-protection"></a>

 AWS [共同責任模型](https://aws.amazon.com/compliance/shared-responsibility-model/)適用於 Amazon OpenSearch Service 中的資料保護。如此模型所述， AWS 負責保護執行所有 的全域基礎設施 AWS 雲端。您負責維護在此基礎設施上託管內容的控制權。您也同時負責所使用 AWS 服務 的安全組態和管理任務。如需資料隱私權的詳細資訊，請參閱[資料隱私權常見問答集](https://aws.amazon.com/compliance/data-privacy-faq/)。如需有關歐洲資料保護的相關資訊，請參閱*AWS 安全性部落格*上的[AWS 共同責任模型和 GDPR](https://aws.amazon.com/blogs/security/the-aws-shared-responsibility-model-and-gdpr/) 部落格文章。

基於資料保護目的，我們建議您保護 AWS 帳戶 登入資料，並使用 AWS IAM Identity Center 或 AWS Identity and Access Management (IAM) 設定個別使用者。如此一來，每個使用者都只會獲得授與完成其任務所必須的許可。我們也建議您採用下列方式保護資料：
+ 每個帳戶均要使用多重要素驗證 (MFA)。
+ 使用 SSL/TLS 與 AWS 資源通訊。我們需要 TLS 1.2 並建議使用 TLS 1.3。
+ 使用 設定 API 和使用者活動記錄 AWS CloudTrail。如需有關使用 CloudTrail 追蹤擷取 AWS 活動的資訊，請參閱*AWS CloudTrail 《 使用者指南*》中的[使用 CloudTrail 追蹤](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-trails.html)。
+ 使用 AWS 加密解決方案，以及其中的所有預設安全控制 AWS 服務。
+ 使用進階的受管安全服務 (例如 Amazon Macie)，協助探索和保護儲存在 Amazon S3 的敏感資料。
+ 如果您在 AWS 透過命令列界面或 API 存取 時需要 FIPS 140-3 驗證的密碼編譯模組，請使用 FIPS 端點。如需有關 FIPS 和 FIPS 端點的更多相關資訊，請參閱[聯邦資訊處理標準 (FIPS) 140-3](https://aws.amazon.com/compliance/fips/)。

我們強烈建議您絕對不要將客戶的電子郵件地址等機密或敏感資訊，放在標籤或自由格式的文字欄位中，例如**名稱**欄位。這包括當您使用 OpenSearch Service 或使用主控台 AWS CLI、API 或 AWS SDKs的其他 AWS 服務 時。您在標籤或自由格式文字欄位中輸入的任何資料都可能用於計費或診斷日誌。如果您提供外部伺服器的 URL，我們強烈建議請勿在驗證您對該伺服器請求的 URL 中包含憑證資訊。

# Amazon OpenSearch Service 的靜態資料加密
<a name="encryption-at-rest"></a>

OpenSearch Service 網域提供靜態資料加密，這是一種安全功能，可協助防止未經授權存取您的資料。此功能使用 AWS Key Management Service (AWS KMS) 來存放和管理加密金鑰，並使用 256 位元金鑰 (AES-256) 的進階加密標準演算法來執行加密。如果啟用，此功能會加密網域的以下層面：
+ 所有索引 (包括 UltraWarm 儲存中的索引)
+ OpenSearch 日誌
+ 置換檔案
+ 應用程式目錄中的所有其他資料
+ 自動快照

當您啟用靜態資料加密時，以下項目*不會*加密，但您可以採取額外的步驟來保護它們：
+ 手動快照：您目前無法使用 AWS KMS 金鑰來加密手動快照。不過，您可以使用伺服器端加密搭配 S3 受管金鑰或 KMS 金鑰來加密您用作快照儲存庫的儲存貯體。如需說明，請參閱[註冊手動快照儲存庫](managedomains-snapshot-registerdirectory.md)。
+ 慢速日誌和錯誤日誌：如果您[發佈日誌](createdomain-configure-slow-logs.md)並想要加密它們，您可以使用與 OpenSearch Service 網域相同的 AWS KMS 金鑰來加密其 CloudWatch Logs 日誌群組。如需詳細資訊，請參閱《Amazon CloudWatch Logs 使用者指南》**中[使用 AWS Key Management Service加密 CloudWatch Logs 中的日誌資料](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/encrypt-log-data-kms.html)。

**注意**  
如果已在網域上啟用 UltraWarm 或冷儲存，則您無法在現有網域上啟用靜態加密。您必須先停用 UltraWarm 或冷儲存、啟用靜態加密，然後重新啟用 UltraWarm 或冷儲存。如果您想要在 UltraWarm 或冷儲存中保留索引，您必須先將索引移至熱儲存，再停用 UltraWarm 或冷儲存。

OpenSearch Service 僅支援對稱加密 KMS 金鑰，不支援非對稱加密 KMS 金鑰。若要了解如何建立對稱金鑰，請參閱《 *AWS Key Management Service 開發人員指南*》中的[建立 KMS 金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html)。

無論是否啟用靜態加密，所有網域都會使用 AES-256 和 OpenSearch Service 受管密鑰自動加密[自訂套件](custom-packages.md)。

## 許可
<a name="permissions-ear"></a>

若要使用 OpenSearch Service 主控台設定靜態資料的加密，您必須具有 的讀取許可 AWS KMS，例如下列身分型政策：

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "kms:List*",
        "kms:Describe*"
      ],
      "Resource": "*"
    }
  ]
}
```

------

如果您想要使用 AWS 擁有金鑰以外的金鑰，您還必須具有為金鑰建立[授予](https://docs.aws.amazon.com/kms/latest/developerguide/grants.html)的許可。這些許可通常採用以資源為基礎的政策形式，當您建立金鑰時會加以指定。

若您想要讓金鑰保持為 OpenSearch Service 獨有，您可以將 [kms:ViaService](https://docs.aws.amazon.com/kms/latest/developerguide/conditions-kms.html#conditions-kms-via-service) 條件新增到金鑰政策：

```
"Condition": {
  "StringEquals": {
    "kms:ViaService": "es.us-west-1.amazonaws.com"
  },
  "Bool": {
    "kms:GrantIsForAWSResource": "true"
  }
}
```

如需詳細資訊，請參閱*《AWS Key Management Service 開發人員指南》*中的[在 AWS KMS中使用金鑰政策](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html)。

## 啟用靜態資料加密
<a name="enabling-ear"></a>

在新網域中進行靜態資料加密需要 OpenSearch 或 Elasticsearch 5.1 版或更高版本。在現有網域上啟用它需要 OpenSearch 或 Elasticsearch 6.7 或更高版本。

**啟用靜態資料加密 (主控台)**

1. 在 AWS 主控台中開啟網域，然後選擇**動作**和**編輯安全組態**。

1. 在 **Encryption** (加密)，選擇 **Enable encryption of data at rest** (啟用靜態資料加密)。

1. 選擇要使用的 AWS KMS 金鑰，然後選擇**儲存變更**。

您也可以透過組態 API 啟用加密。下列請求會啟用現有網域上的靜態資料加密：

```
{
   "ClusterConfig":{
      "EncryptionAtRestOptions":{
         "Enabled": true,
         "KmsKeyId":"arn:aws:kms:us-east-1:123456789012:alias/my-key"
      }
   }
}
```

## 禁用或刪除的 KMS 金鑰
<a name="disabled-key"></a>

如果您停用或刪除用來加密網域的金鑰，網域將無法存取。OpenSearch Service 會傳送[通知](managedomains-notifications.md)，通知您其無法存取 KMS 金鑰。立即重新啟用金鑰以存取您的網域。

如果您的金鑰已刪除，OpenSearch Service 團隊無法協助您復原資料。 只會在等待至少七天後 AWS KMS 刪除金鑰。如果您的金鑰仍待刪除，請取消刪除或拍攝網域的[手動快照](managedomains-snapshots.md)，以避免資料損失。

## 停用靜態資料加密
<a name="disabling-ear"></a>

在您設定網域以加密靜態資料後，您無法停用設定。相反地，您可以拍攝現有網域的[手動快照](managedomains-snapshots.md)，[建立另一個網域](createupdatedomains.md#createdomains)，遷移您的資料和刪除舊的網域。

## 監控靜態加密資料的網域
<a name="monitoring-ear"></a>

加密靜態資料的網域有兩個額外的指標：`KMSKeyError` 和 `KMSKeyInaccessible`。如果網域遇到與您加密金鑰相關的問題，這些指標才會顯示。如需這些指標的完整說明，請參閱[叢集指標](managedomains-cloudwatchmetrics.md#managedomains-cloudwatchmetrics-cluster-metrics)。您可以使用 OpenSearch Service 主控台或 Amazon CloudWatch 主控台來檢視它們。

**提示**  
每個指標代表網域的重大問題，因此我們建議您為二者建立 CloudWatch 警示。如需詳細資訊，請參閱[Amazon OpenSearch Service 的建議 CloudWatch 警示](cloudwatch-alarms.md)。

## 其他考量
<a name="ear-considerations"></a>
+ 自動金鑰輪換會保留 AWS KMS 金鑰的屬性，因此輪換不會影響您存取 OpenSearch 資料的能力。已加密的 OpenSearch Service 網域不支援手動金鑰輪換，其中包含建立新金鑰和更新任何舊金鑰的參照。若要進一步了解，請參閱《 *AWS Key Management Service 開發人員指南*》中的[輪換 AWS KMS 金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/rotate-keys.html)。
+ 有些執行個體類型不支援靜態資料的加密。如需詳細資訊，請參閱[Amazon OpenSearch Service 中支援的執行個體類型](supported-instance-types.md)。
+ 加密靜態資料的網域對於其自動快照使用不同的儲存庫名稱。如需詳細資訊，請參閱[還原快照](managedomains-snapshot-restore.md)。
+ 雖然我們強烈建議啟用靜態加密，但這可能會增加額外的 CPU 負荷和幾毫秒的延遲。不過，大多數使用案例對這些差異並不敏感，且影響程度取決於叢集、用户端和使用設定檔的組態。

# Amazon OpenSearch Service 的節點對節點加密
<a name="ntn"></a>

節點對節點加密在 Amazon OpenSearch Service 的預設功能之上提供額外安全層級。

每個 ​OpenSearch Service 網域 (無論網域是否使用 VPC 存取) 都存在於其自有的專用 VPC 中。此架構可防止潛在的攻擊者攔截 ​OpenSearch 節點之間的流量，並保護叢集安全。但是根據預設，VPC 內的流量不會加密。節點對節點加密可使該 VPC 內的所有通訊啟用 TLS 1.2 加密。

若您透過 HTTPS 傳送資料到 OpenSearch Service，節點對節點加密會協助確保當 OpenSearch 將您的資料分配 (與重新分配) 到叢集內時能保持加密狀態。若資料透過 HTTP 收到時為未加密狀態，​OpenSearch Service 會在它抵達叢集後加密。您可以使用主控台或組態 API AWS CLI，要求透過 HTTPS 到達網域的所有流量。

如果您啟用[精細存取控制](fgac.md)，則*需要*節點對節點加密。

## 啟用節點對節點加密
<a name="enabling-ntn"></a>

新網域的節點對節點加密需要任何版本的 OpenSearch 或 Elasticsearch 6.0 或更高版本。在現有網域上啟用節點對節點加密需要任何版本的 OpenSearch 或 Elasticsearch 6.7 或更高版本。選擇 AWS 主控台中現有的網域、**Actions** (動作)，以及 **Edit security configuration** (編輯安全組態)。

或者，您可以使用 AWS CLI 或 組態 API。如需詳細資訊，請參閱 [AWS CLI 命令參考](https://docs.aws.amazon.com/cli/latest/reference/)和 [OpenSearch Service API 參考](https://docs.aws.amazon.com/opensearch-service/latest/APIReference/API_Welcome.html)。

## 停用節點對節點加密
<a name="disabling-ntn"></a>

在您設定網域以使用節點對節點加密後，您無法停用設定。相反地，您可以拍攝加密網域的[手動快照](managedomains-snapshots.md)，[建立另一個網域](createupdatedomains.md#createdomains)，遷移您的資料和刪除舊的網域。

# Amazon OpenSearch Service 中的 Identity and Access Management
<a name="ac"></a>

Amazon OpenSearch Service 提供數種控制網域存取的方法。本主題涵蓋各種政策類型、它們如何彼此互動，以及如何建立自己的自訂政策。

**重要**  
VPC 支援引入了對 OpenSearch Service 存取控制的一些其他考量。如需詳細資訊，請參閱[關於 VPC 網域上的存取政策](vpc.md#vpc-security)。

## 政策的類型
<a name="ac-types"></a>

OpenSearch Service 支援三種類型的存取政策：
+ [資源型政策](#ac-types-resource)
+ [身分型政策](#ac-types-identity)
+ [以 IP 為基礎的政策](#ac-types-ip)

### 資源型政策
<a name="ac-types-resource"></a>

建立網域時，您可以新增以資源為基礎的政策 (通常稱為網域存取政策)。這些政策指定主體可以對域的*子資源*執行哪些操作 ([跨叢集搜尋除外](cross-cluster-search.md#cross-cluster-search-walkthrough))。子資源包括 OpenSearch 索引和 API。IAM 中的[主體](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html) JSON 政策元素指定允許存取的帳戶、使用者或角色。[資源](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_resource.html) JSON 政策元素會指定這些委託人可存取的子資源。

例如，以下以資源為基礎的政策向 `test-domain` 上的子資源授予 `test-user` 完整存取權 (`es:*`)：

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": [
          "arn:aws:iam::123456789012:user/test-user"
        ]
      },
      "Action": [
        "es:*"
      ],
      "Resource": "arn:aws:es:us-west-1:987654321098:domain/test-domain/*"
    }
  ]
}
```

------

此政策適用兩個重要考量：
+ 這些權限只適用於此網域。除非您在其他網域上建立類似的政策，否則 `test-user` 只能存取 `test-domain`。
+ `Resource` 元素中的結尾 `/*` 很重要，並指出以資源為基礎的政策僅適用於網域的子資源，不適用於網域本身。在以資源為基礎的政策中，`es:*` 動作相當於 `es:ESHttp*`。

  例如，`test-user` 可以提出索引請求 (`GET https://search-test-domain.us-west-1.es.amazonaws.com/test-index`)，但不能更新網域的組態 (`POST https://es.us-west-1.amazonaws.com/2021-01-01/opensearch/domain/test-domain/config`)。請注意兩個端點之間的差異。存取組態 API 需要[身分型政策](#ac-types-identity)。

您可以新增萬用字元來指定部分索引名稱。此範例可識別任何以 `commerce` 開頭的索引︰

```
arn:aws:es:us-west-1:987654321098:domain/test-domain/commerce*
```

在此情況下，該萬用字元代表 `test-user` 可以向 `test-domain` 中名稱以 `commerce` 開頭的索引發出請求。

若要進一步限制 `test-user`，您可以套用以下政策：

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": [
          "arn:aws:iam::123456789012:user/test-user"
        ]
      },
      "Action": [
        "es:ESHttpGet"
      ],
      "Resource": "arn:aws:es:us-west-1:987654321098:domain/test-domain/commerce-data/_search"
    }
  ]
}
```

------

現在 `test-user` 可以執行一項操作：根據 `commerce-data` 搜尋。其他所有網域內的索引均無法存取，而且無使用 `es:ESHttpPut` 或 `es:ESHttpPost` 動作的許可，因此 `test-user` 無法新增或修改文件。

接著，您可能會決定設定進階使用者角色。這個政策可授予 `power-user-role` 權限，以利其操作索引中全部 URI 適用的 HTTP GET 和 PUT 方法：

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": [
          "arn:aws:iam::123456789012:role/power-user-role"
        ]
      },
      "Action": [
        "es:ESHttpGet",
        "es:ESHttpPut"
      ],
      "Resource": "arn:aws:es:us-west-1:987654321098:domain/test-domain/commerce-data/*"
    }
  ]
}
```

------

如果您的網域位於 VPC 或使用精細存取控制，您可以使用開放網域存取政策。否則，您的網域存取政策必須包含一些限制 (依委託人或 IP 地址)。

如需有關所有可行動作的詳細資訊，請參閱[政策元素參考](#ac-reference)。若要更精細地控制您的資料，請搭配使用開放網域存取政策與[精細存取控制](fgac.md)。

### 身分型政策
<a name="ac-types-identity"></a>

與屬於每個 OpenSearch Service 網域一部分的資源型政策不同，您可以使用 AWS Identity and Access Management (IAM) 服務將身分型政策連接到使用者或角色。就像[以資源為基礎的政策](#ac-types-resource)一樣，以身分為基礎的政策會指定誰可以存取服務、可以執行哪些動作，以及可以在哪些資源執行那些動作 (如果適用)。

雖然他們不需要這麼做，但以身分為基礎的政策往往更加通用。它們通常只管理使用者可執行的組態 API 動作。準備好這些政策之後，您可以在 OpenSearch Service 中使用以資源為基礎的政策 (或[精細存取控制](fgac.md))，向使用者提供對 OpenSearch 索引和 API 的存取權。

**注意**  
具有 AWS 受管`AmazonOpenSearchServiceReadOnlyAccess`政策的使用者在主控台上看不到叢集運作狀態。若要允許其查看叢集運作狀態 (以及其他 OpenSearch 資料)，請新增 `es:ESHttpGet` 動作至存取政策並連接至其帳戶或角色。

由於以身分為基礎的政策附加到使用者或角色 (委託人)，JSON 不指定委託人。下列政策授與動作存取權，該動作的開頭是 `Describe` 和 `List`。這組動作提供的唯讀存取權限用於網域組態，而非儲存在網域本身的資料：

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Action": [
        "es:Describe*",
        "es:List*"
      ],
      "Effect": "Allow",
      "Resource": "*"
    }
  ]
}
```

------

管理員可能擁有 OpenSearch Service 及所有網域中所存放之全部資料的完整存取權：

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Action": [
        "es:*"
      ],
      "Effect": "Allow",
      "Resource": "*"
    }
  ]
}
```

------

身分型政策讓您能使用標籤來控制對組態 API 的存取。例如，如果網域具有 `team:devops` 標籤，下列政策可讓所連接的委託人檢視並更新網域的組態：

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [{
    "Action": [
      "es:UpdateDomainConfig",
      "es:DescribeDomain",
      "es:DescribeDomainConfig"
    ],
    "Effect": "Allow",
    "Resource": "*",
    "Condition": {
      "ForAnyValue:StringEquals": {
        "aws:ResourceTag/team": [
          "devops"
        ]
      }
    }
  }]
}
```

------

您也可以使用標籤來控制對 OpenSearch API 的存取。OpenSearch API 的標籤型策略僅適用於 HTTP 方法。例如，如果網域有 `environment:production` 標籤，以下策略可讓連接的主體傳送 GET 和 PUT 請求給 OpenSearch API：

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [{
    "Action": [
      "es:ESHttpGet",
      "es:ESHttpPut"
    ],
    "Effect": "Allow",
    "Resource": "*",
    "Condition": {
      "ForAnyValue:StringEquals": {
        "aws:ResourceTag/environment": [
          "production"
        ]
      }
    }
  }]
}
```

------

若要更精密控制 OpenSearch API，請考慮使用[精細存取控制](fgac.md)。

**注意**  
將一或多個 OpenSearch API 新增至任何標籤型政策後，您必須執行單一[標籤操作](managedomains-awsresourcetagging.md) (例如新增、刪除或修改標籤)，以便變更在網域上生效。您必須使用服務軟體 R20211203 或更新版本，才能在標籤型政策中加入 OpenSearch API 操作。

OpenSearch Service 支援組態 API (而非 OpenSearch API) 的 `RequestTag` 和 `TagKeys` 全域條件索引鍵。這些條件僅適用於在請求中包含標籤的 API 呼叫，例如 `CreateDomain`、`AddTags` 以及 `RemoveTags`。下列政策可讓所連接的委託人建立網域，但前提是他們在請求中包含 `team:it` 標籤：

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": {
    "Effect": "Allow",
    "Action": [
      "es:CreateDomain",
      "es:AddTags"
    ],
    "Resource": "*",
    "Condition": {
      "StringEquals": {
        "aws:RequestTag/team": [
          "it"
        ]
      }
    }
  }
}
```

------

如需使用標籤進行存取控制的詳細資訊，以及資源型和身分型政策之間的差異，請參閱《*IAM 使用者指南*》中的[根據具有 ABAC 授權的屬性定義許可](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction_attribute-based-access-control.html)。

### 以 IP 為基礎的政策
<a name="ac-types-ip"></a>

以 IP 為基礎的政策，限制存取到一或多個 IP 地址或 CIDR 區塊的網域。從技術層面來看，以 IP 為基礎的政策不是明確的政策類型。反之，它們只是以資源為基礎的政策，指定匿名委託人並包含特殊條件。如需詳細資訊，請參閱《[IAM 使用者指南》中的 IAM JSON 政策元素：條件](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html)。 **

以 IP 為基礎的政策的主要優點是它們允許 OpenSearch Service 網域的未簽署請求，這可讓您使用 [curl](https://curl.haxx.se/) 和 [OpenSearch Dashboards](dashboards.md) 這類用戶端，或透過代理伺服器存取網域。如需詳細資訊，請參閱 [使用代理伺服器從 Dashboards 中存取 OpenSearch Service](dashboards.md#dashboards-proxy)。

**注意**  
如果為網域啟用 VPC 存取，您無法設定以 IP 為基礎的政策。反之，您可以使用 `security groups` 控制哪些 IP 地址可以存取網域。如需詳細資訊，請參閱下列主題：  
[關於 VPC 網域上的存取政策](vpc.md#vpc-security)
《*Amazon VPC 使用者指南*》中的[使用安全群組控制 AWS 資源的流量](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-security-groups.html) 

以下政策會將對 `test-domain` 的存取權限授予所有來自指定 IP 範圍的 HTTP 請求：

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": [
        "es:ESHttp*"
      ],
      "Condition": {
        "IpAddress": {
          "aws:SourceIp": [
            "192.0.2.0/24"
          ]
        }
      },
      "Resource": "arn:aws:es:us-west-1:987654321098:domain/test-domain/*"
    }
  ]
}
```

------

如果您的網域具備公有端點且不使用[精細存取控制](fgac.md)，我們建議將 IAM 委託人與 IP 地址合併。這項政策只有在請求是來自指定 IP 範圍時，才會授予 `test-user` HTTP 存取：

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [{
    "Effect": "Allow",
    "Principal": {
      "AWS": [
        "arn:aws:iam::987654321098:user/test-user"
      ]
    },
    "Action": [
      "es:ESHttp*"
    ],
    "Condition": {
      "IpAddress": {
        "aws:SourceIp": [
          "192.0.2.0/24"
        ]
      }
    },
    "Resource": "arn:aws:es:us-west-1:987654321098:domain/test-domain/*"
  }]
}
```

------

# 提出並簽署 OpenSearch Service 請求
<a name="managedomains-signing-service-requests"></a>

即使設定完全開放以資源為基礎的存取政策，也必須簽署對 OpenSearch Service 組態 API 的*所有*請求。如果您的政策指定 IAM 角色或使用者，對 OpenSearch APIs請求也必須使用 AWS Signature 第 4 版簽署。簽署方法因 API 而異：
+ 若要呼叫 OpenSearch Service 組態 API，建議您使用其中一個 [AWS 開發套件](https://docs.aws.amazon.com/sdkref/latest/guide/overview.html)。開發套件已大幅簡化程序，相較於建立和簽署您自己的請求，可為您節省大量時間。組態 API 端點使用下列格式：

  ```
  es.region.amazonaws.com/2021-01-01/
  ```

  例如，下列請求提出對 `movies`​ 網域進行組態變更，但是您必須自行登入 (不建議)：

  ```
  POST https://es.us-east-1.amazonaws.com/2021-01-01/opensearch/domain/movies/config
  {
    "ClusterConfig": {
      "InstanceType": "c5.xlarge.search"
    }
  }
  ```

  若您使用其中一個開發套件，例如 [Boto 3](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/opensearch.html#OpenSearchService.Client.update_domain_config)，開發套件會自動處理下列簽署：

  ```
  import boto3
  
  client = boto3.client(es)
  response = client.update_domain_config(
    DomainName='movies',
    ClusterConfig={
      'InstanceType': 'c5.xlarge.search'
    }
  )
  ```

  如需 Java 程式碼範例，請參閱[使用 AWS SDKs與 Amazon OpenSearch Service 互動](configuration-samples.md)。
+ 若要呼叫 OpenSearch API，您必須簽署您自己的請求。OpenSearch API 採用下列格式：

  ```
  domain-id.region.es.amazonaws.com
  ```

  例如，以下請求將搜尋 *thor* 的 `movies` 索引：

  ```
  GET https://my-domain.us-east-1.es.amazonaws.com/movies/_search?q=thor
  ```

**注意**  
對於使用 Signature Version 4 簽署的 HTTP POST 請求，此服務會忽略 URL 中傳入的參數。

## 當政策衝突時
<a name="ac-conflict"></a>

當與政策相違或未明確提及使用者時，事情就變得複雜了。[IAM 使用者指南中的 IAM 運作方式](https://docs.aws.amazon.com/IAM/latest/UserGuide/intro-structure.html)提供政策評估邏輯的簡潔摘要： **
+ 根據預設，所有的請求一律拒絕。
+ 明確允許覆寫這個預設值。
+ 明確拒絕覆寫任何允許。

例如，假設以資源為基礎的政策允許您存取網域子資源 (OpenSearch 索引或 API)，但以身分為基礎的政策拒絕您存取，您便無法存取。如果以身分為基礎的政策授與存取權，但以資源為基礎的政策未指定您是否有存取權，此時您便可以存取。請參閱下表的相交政策，以了解網域子資源的完整結果摘要。


****  

|  | 以資源為基礎的政策允許 | 以資源為基礎的政策拒絕 | 以資源為基礎的政策不允許也不拒絕 | 
| --- |--- |--- |--- |
| **Allowed in identity-based policy** |  允許  | Deny | Allow | 
| --- |--- |--- |--- |
| **Denied in identity-based policy** | Deny | Deny | Deny | 
| --- |--- |--- |--- |
| **Neither allowed nor denied in identity-based policy** | Allow | Deny | Deny | 
| --- |--- |--- |--- |

## 政策元素參考
<a name="ac-reference"></a>

OpenSearch Service 支援 [IAM 政策元素參考](https://docs.aws.amazon.com/IAM/latest/UserGuide/AccessPolicyLanguage_ElementDescriptions.html)中的大多數政策元素，唯獨 `NotPrincipal` 除外。下表顯示最常見的元素。


****  

| JSON 政策元素 | 摘要 | 
| --- | --- | 
| Version |  目前版本的政策語言是 `2012-10-17`。所有存取政策應該指定這個值。  | 
| Effect |  此元素指定公告內容是否允許或拒絕對指定動作的存取。有效值為 `Allow` 或 `Deny`。  | 
| Principal |  此元素指定允許或拒絕存取資源的 AWS 帳戶 或 IAM 角色或使用者，並且可以採用多種形式： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/opensearch-service/latest/developerguide/ac.html)  指定 `*` 萬用字元可匿名存取網域，但我們不建議這麼做，除非新增 [IP 型條件](#ac-types-ip)、使用 [VPC 支援](vpc.md)，或啟用[精細存取控制](fgac.md)。此外，請仔細檢查下列政策，以確認它們未授予廣泛存取權：   連接至相關聯 AWS 主體 (例如 IAM 角色) 的身分型政策   連接至相關聯 AWS 資源的資源型政策 （例如， AWS Key Management Service KMS 金鑰）     | 
| Action  | OpenSearch Service 針對 OpenSearch HTTP 方法使用 `ESHttp*` 動作：其餘的動作套用至組態 API。某些特定 `es:` 動作支援資源層級的許可。例如，您可以許可使用者刪除一個特定網域，而不是許可使用者刪除*任何*網域。其他動作只適用於服務本身。例如，`es:ListDomainNames` 在單一網域的內容細節中不具任何意義，因此需要萬用字元。如需所有可用動作的清單，以及了解它們是套用至網域子資源 (`test-domain/*`)、網域組態 (`test-domain`) 還是僅套用至服務 (`*`)，請參閱《服務授權參考》**中的 [Amazon OpenSearch Service 的動作、資源及條件索引鍵](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonopensearchservice.html)以資源為基礎的政策不同於資源層級的許可。[以資源為基礎的政策](#ac-types-resource)是附加到網域的完整 JSON 政策。資源層級許可則可讓您將動作限制到特定網域或子資源。在實務層面，您可以將資源層級許可當成選用之資源或身分為基礎的政策的一部分。由於 `es:CreateDomain` 的資源層級許可不是直覺式的 - 畢竟為何要許可使用者建立一個已經存在的網域？- 使用萬用字元可為您的網域強制執行簡單的命名機制，例如 `"Resource": "arn:aws:es:us-west-1:987654321098:domain/my-team-name-*"`。當然，您有權利納入一些動作來搭配較無限制性的資源元素，如下所示：  JSON   

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "es:ESHttpGet",
        "es:DescribeDomain"
      ],
      "Resource": "*"
    }
  ]
}
```    若要進一步了解有關配對動作和資源的詳細資訊，請參閱此表格中的 `Resource` 元素。 | 
| Condition |  OpenSearch Service 支援 *IAM 使用者指南*中 [AWS 全域條件內容金鑰](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#AvailableKeys)中所述的大部分條件。值得注意的例外狀況包括 OpenSearch Service 不支援的`aws:PrincipalTag`金鑰。 當設定[以 IP 為基礎的政策](#ac-types-ip)時，您可指定 IP 地址或 CIDR 區塊當做條件，如下所示： <pre>"Condition": {<br />  "IpAddress": {<br />    "aws:SourceIp": [<br />      "192.0.2.0/32"<br />    ]<br />  }<br />}</pre> 正如 [身分型政策](#ac-types-identity) 中所述，`aws:ResourceTag`、`aws:RequestTag` 以及 `aws:TagKeys` 條件索引鍵適用於組態 API，以及 OpenSearch API。  | 
| Resource |  OpenSearch Service 以三種基本方式使用 `Resource` 元素： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/opensearch-service/latest/developerguide/ac.html) 如需有關哪些動作支援資源層級許可的詳細資訊，請參閱此表格中的 `Action` 元素。  | 

## 進階選項和 API 考量
<a name="ac-advanced"></a>

OpenSearch Service 有數種進階選項，其中一個可存取控制含意：`rest.action.multi.allow_explicit_index`。它的預設設定為 true，可讓使用者在特定情況下繞過子資源許可。

例如，請考量以下以資源為基礎的政策：

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": [
          "arn:aws:iam::123456789012:user/test-user"
        ]
      },
      "Action": [
        "es:ESHttp*"
      ],
      "Resource": [
        "arn:aws:es:us-west-1:987654321098:domain/test-domain/test-index/*",
        "arn:aws:es:us-west-1:987654321098:domain/test-domain/_bulk"
      ]
    },
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": [
          "arn:aws:iam::123456789012:user/test-user"
        ]
      },
      "Action": [
        "es:ESHttpGet"
      ],
      "Resource": "arn:aws:es:us-west-1:987654321098:domain/test-domain/restricted-index/*"
    }
  ]
}
```

------

此政策向 `test-user` 授予對 `test-index` 和 OpenSearch 大量 API 的完整存取。它也允許 `GET` 請求 `restricted-index`。

以下索引請求因為許可錯誤而失敗：

```
PUT https://search-test-domain.us-west-1.es.amazonaws.com/restricted-index/movie/1
{
  "title": "Your Name",
  "director": "Makoto Shinkai",
  "year": "2016"
}
```

與索引 API 不同的是，大量 API 可讓您在單一呼叫中建立、更新和刪除許多文件。您通常會在請求本文中指定這些操作，而不是在請求 URL。由於 OpenSearch Service 使用 URL 來控制對網域子資源的存取，因此事實上 `test-user` 可以使用大量 API 來變更 `restricted-index`。即使使用者缺少索引的 `POST` 許可，以下請求仍會**成功**：

```
POST https://search-test-domain.us-west-1.es.amazonaws.com/_bulk
{ "index" : { "_index": "restricted-index", "_type" : "movie", "_id" : "1" } }
{ "title": "Your Name", "director": "Makoto Shinkai", "year": "2016" }
```

在這種情況下，存取政策無法滿足其目的。為了防止使用者繞過這些類型的限制，您可以變更 `rest.action.multi.allow_explicit_index` 為 false。如果此值為 false，所有對大量、 mget、msearch API (其在請求本文中指定索引名稱) 的呼叫，便會停止運作。換言之，呼叫 `_bulk` 不再運作，但呼叫 `test-index/_bulk` 則正常運作。第二個端點包含索引名稱，因此您不需要在請求本文中指定一個。

[OpenSearch Dashboards](dashboards.md) 嚴重依賴 mget 和 msearch，因此在此變更後不可能正常運作。若要進行部分補救，您可以保留 `rest.action.multi.allow_explicit_index` 為 true，並且拒絕特定使用者存取一或多個 API。

如需變更此設定的詳細資訊，請參閱[進階叢集設定](createupdatedomains.md#createdomain-configure-advanced-options)。

同樣地，以下以資源為基礎的政策包含兩個細微問題：

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::123456789012:user/test-user"
      },
      "Action": "es:ESHttp*",
      "Resource": "arn:aws:es:us-west-1:987654321098:domain/test-domain/*"
    },
    {
      "Effect": "Deny",
      "Principal": {
        "AWS": "arn:aws:iam::123456789012:user/test-user"
      },
      "Action": "es:ESHttp*",
      "Resource": "arn:aws:es:us-west-1:987654321098:domain/test-domain/restricted-index/*"
    }
  ]
}
```

------
+ 儘管明確拒絕，`test-user` 仍然可以呼叫如 `GET https://search-test-domain.us-west-1.es.amazonaws.com/_all/_search` 和 `GET https://search-test-domain.us-west-1.es.amazonaws.com/*/_search` 以存取 `restricted-index` 中的文件。
+ 由於 `Resource` 元素參考 `restricted-index/*`，`test-user` 未獲許可來直接存取索引的文件。不過，使用者有權*刪除整個索引*。為防止存取和刪除，政策必須指定 `restricted-index*`。

不是廣泛允許和專注於拒絕，最安全的方法是遵循[最小特權原則](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege)，只授與任務所需的許可。如需控制對個別索引或 OpenSearch 操作的存取詳細資訊，請參閱 [Amazon OpenSearch Service 中的精細存取控制](fgac.md)。

**重要**  
指定 \$1 萬用字元可匿名存取您的網域。不建議您使用萬用字元 此外，請仔細檢查下列政策，以確認它們未授予廣泛存取權：  
連接到相關聯 AWS 主體的身分型政策 （例如 IAM 角色）
連接至相關聯 AWS 資源的資源型政策 （例如， AWS Key Management Service KMS 金鑰）

## 設定存取政策
<a name="ac-creating"></a>
+ 如需有關在 OpenSearch Service 中建立或修改以資源為基礎和以 IP 為基礎的政策之說明，請參閱[設定存取政策](createupdatedomains.md#createdomain-configure-access-policies)。
+ 如需在 IAM 中建立或修改身分型政策的說明，請參閱《[IAM 使用者指南》中的使用客戶受管政策定義自訂 IAM 許可](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html)。 **

## 其他範例政策
<a name="ac-samples"></a>

雖然本章包含許多範例政策， AWS 但存取控制是一個複雜的主題，最好透過範例了解。如需詳細資訊，請參閱 *IAM 使用者指南*中的 [IAM 以身分為基礎的政策範例](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_examples.html)。

# Amazon OpenSearch Service API 許可參考
<a name="ac-permissions-ref"></a>

設定[存取控制](ac.md)時，您會撰寫可連接到 IAM 身分的許可政策 （以身分為基礎的政策）。如需詳細的參考資訊，請參閱《服務授權參考》**中的下列主題：
+ [OpenSearch Service 的動作、資源和條件索引鍵](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonopensearchservice.html)。
+ [OpenSearch Ingestion 的動作、資源和條件索引鍵](https://docs.aws.amazon.com/service-authorization/latest/reference/list_opensearchingestionservice.html)。

這項參考包含了可在 IAM 政策中使用哪些 API 操作的相關資訊。它還包含您可以授予許可 AWS 的資源，以及您可以包含用於精細存取控制的條件索引鍵。

您可以在政策的 `Action` 欄位中指定動作、在政策的 `Resource` 欄位中指定資源值，以及在政策的 `Condition` 欄位中指定條件。若要指定 OpenSearch Service 的動作，請使用 `es:`字首，後面接著 API 操作名稱 （例如，`es:CreateDomain`)。若要指定 OpenSearch Ingestion 的動作，請使用 `osis:`字首，後面接著 API 操作 （例如，`osis:CreatePipeline`)。

# AWS Amazon OpenSearch Service 的 受管政策
<a name="ac-managed"></a>

 AWS 受管政策是由 AWS AWS 受管政策建立和管理的獨立政策旨在為許多常用案例提供許可，以便您可以開始將許可指派給使用者、群組和角色。

請記住， AWS 受管政策可能不會授予特定使用案例的最低權限許可，因為這些許可可供所有 AWS 客戶使用。我們建議您定義特定於使用案例的[客戶管理政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#customer-managed-policies)，以便進一步減少許可。

您無法變更 AWS 受管政策中定義的許可。如果 AWS 更新 AWS 受管政策中定義的許可，則更新會影響政策連接的所有主體身分 （使用者、群組和角色）。 AWS 服務 當新的 啟動或新的 API 操作可用於現有 服務時， AWS 最有可能更新 AWS 受管政策。

如需詳細資訊，請參閱 *IAM 使用者指南*中的 [AWS 受管政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies)。

## AmazonOpenSearchDirectQueryGlueCreateAccess
<a name="AmazonOpenSearchDirectQueryGlueCreateAccess"></a>

授予 Amazon OpenSearch Service Direct Query Service 對 `CreateDatabase`、 `CreatePartition``CreateTable`和 的存取權`BatchCreatePartition` AWS Glue API。

您可以在 IAM 主控台中找到 [AmazonOpenSearchDirectQueryGlueCreateAccess](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AmazonOpenSearchDirectQueryGlueCreateAccess) 政策。

## AmazonOpenSearchServiceFullAccess
<a name="AmazonOpenSearchServiceFullAccess"></a>

授予 AWS 帳戶對 OpenSearch Service 組態 API 操作和資源的完整存取權。

您可以在 IAM 主控台中尋找 [AmazonOpenSearchServiceFullAccess](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AmazonOpenSearchServiceFullAccess) 政策。

## AmazonOpenSearchServiceReadOnlyAccess
<a name="AmazonOpenSearchServiceReadOnlyAccess"></a>

授予 所有 OpenSearch Service 資源的唯讀存取權 AWS 帳戶。

您可以在 IAM 主控台中尋找 [AmazonOpenSearchServiceReadOnlyAccess](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AmazonOpenSearchServiceReadOnlyAccess) 政策。

## AmazonOpenSearchServiceRolePolicy
<a name="AmazonOpenSearchServiceRolePolicy"></a>

您不得將 `AmazonOpenSearchServiceRolePolicy` 連接到 IAM 實體。此政策會連接到服務連結角色，可讓 OpenSearch Service 存取帳戶資源。如需詳細資訊，請參閱[許可](slr-aos.md#slr-permissions)。

您可以在 IAM 主控台中尋找 [AmazonOpenSearchServiceRolePolicy](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AmazonOpenSearchServiceRolePolicy) 政策。

## AmazonOpenSearchServiceCognitoAccess
<a name="AmazonOpenSearchServiceCognitoAccess"></a>

提供啟用 [Cognito 身分驗證](cognito-auth.md)所必需的最低 Amazon Cognito 許可。

您可以在 IAM 主控台中尋找 [AmazonOpenSearchServiceCognitoAccess](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AmazonOpenSearchServiceCognitoAccess) 政策。

## AmazonOpenSearchIngestionServiceRolePolicy
<a name="AmazonOpenSearchIngestionServiceRolePolicy"></a>

您不得將 `AmazonOpenSearchIngestionServiceRolePolicy` 連接到 IAM 實體。此政策會連接到服務連結角色，允許 OpenSearch Ingestion 為擷取管道啟用 VPC 存取、建立標籤，以及將擷取相關 CloudWatch 指標發佈至您的帳戶。如需詳細資訊，請參閱[使用 Amazon OpenSearch Service 的服務連結角色](slr.md)。

您可以在 IAM 主控台中找到 [AmazonOpenSearchIngestionServiceRolePolicy](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AmazonOpenSearchIngestionServiceRolePolicy) 政策。

## OpenSearchIngestionSelfManagedVpcePolicy
<a name="OpenSearchIngestionSelfManagedVpcePolicy"></a>

您不得將 `OpenSearchIngestionSelfManagedVpcePolicy` 連接到 IAM 實體。此政策會連接到服務連結角色，允許 OpenSearch Ingestion 為擷取管道啟用自我管理 VPC 存取、建立標籤，以及將擷取相關的 CloudWatch 指標發佈至您的帳戶。如需詳細資訊，請參閱[使用 Amazon OpenSearch Service 的服務連結角色](slr.md)。

您可以在 IAM 主控台中找到 [OpenSearchIngestionSelfManagedVpcePolicy](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/OpenSearchIngestionSelfManagedVpcePolicy) 政策。

## AmazonOpenSearchIngestionFullAccess
<a name="AmazonOpenSearchIngestionFullAccess"></a>

授予 對 OpenSearch Ingestion API 操作和資源的完整存取權 AWS 帳戶。

您可以在 IAM 主控台中找到 [AmazonOpenSearchIngestionFullAccess](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AmazonOpenSearchIngestionFullAccess) 政策。

## AmazonOpenSearchIngestionReadOnlyAccess
<a name="AmazonOpenSearchIngestionReadOnlyAccess"></a>

授予 所有 OpenSearch Ingestion 資源的唯讀存取權 AWS 帳戶。

您可以在 IAM 主控台中找到 [AmazonOpenSearchIngestionReadOnlyAccess](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AmazonOpenSearchIngestionReadOnlyAccess) 政策。

## AmazonOpenSearchServerlessServiceRolePolicy
<a name="AmazonOpenSearchServerlessServiceRolePolicy"></a>

提供將 OpenSearch Serverless 指標資料傳送至 CloudWatch 所需的最低 Amazon CloudWatch 許可。

您可以在 IAM 主控台中尋找 [AmazonOpenSearchServerlessServiceRolePolicy](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AmazonOpenSearchServerlessServiceRolePolicy) 政策。

## AWS 受管政策的 OpenSearch Service 更新
<a name="ac-managed-updates"></a>

檢視自此服務開始追蹤變更以來OpenSearch Service AWS 受管政策更新的詳細資訊。


| 變更 | 描述 | Date | 
| --- | --- | --- | 
|  已更新 `AmazonOpenSearchIngestionServiceRolePolicy`  |  更新提供 OpenSearch Ingestion 許可，以修改 OpenSearch 建立的 VPC 端點，以便在 VPCs 之間共用管道。 如需了解政策 JSON，請參閱 [IAM 主控台](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AmazonOpenSearchIngestionServiceRolePolicy)。  |  2025 年 8 月 28 日  | 
|  已更新 `AmazonOpenSearchServiceRolePolicy`  |  已將下列陳述式新增至政策。當 Amazon OpenSearch Service 擔任`AWSServiceRoleForAmazonOpenSearchService`服務連結角色時，政策中的這個新陳述式可讓 OpenSearch 更新僅由 OpenSearch 管理之任何 AWS IAM Identity Center 應用程式的存取範圍。<pre>{<br />      "Effect": "Allow",<br />      "Action": "sso:PutApplicationAccessScope",<br />      "Resource": "arn:aws:sso::*:application/*/*",<br />      "Condition": {<br />        "StringEquals": {<br />          "aws:ResourceOrgID": "${aws:PrincipalOrgID}"<br />        }<br />      }<br />    }</pre>  | 2025 年 3 月 31 日 | 
|  已更新 `AmazonOpenSearchServerlessServiceRolePolicy`  |  已將 Sid `AllowAOSSCloudwatchMetrics`新增至政策 `AmazonOpenSearchServerlessServiceRolePolicy`。Sid 是做為政策陳述式選用識別符的陳述式 ID。  | 2024 年 7 月 12 日 | 
|  已新增 `OpenSearchIngestionSelfManagedVpcePolicy`  |  允許 OpenSearch Ingestion 為擷取管道啟用自我管理 VPC 存取、建立標籤，以及將擷取相關 CloudWatch 指標發佈至您的帳戶的新政策。 如需了解政策 JSON，請參閱 [IAM 主控台](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AmazonOpenSearchIngestionServiceRolePolicy)。 | 2024 年 6 月 12 日 | 
|  已新增`AmazonOpenSearchDirectQueryGlueCreateAccess`  | 授予 Amazon OpenSearch Service Direct Query Service 對 `CreateDatabase`、 `CreatePartition``CreateTable`和 的存取權`BatchCreatePartition` AWS Glue API。 | 2024 年 5 月 6 日 | 
|  更新 `AmazonOpenSearchServiceRolePolicy` 和 `AmazonElasticsearchServiceRolePolicy`  |  新增[服務連結角色](slr-aos.md#slr-permissions)指派和取消指派 IPv6 地址所需的許可。 已取代的 Elasticsearch 政策也已更新，以確保向後相容性。  |  2023 年 10 月 18 日  | 
|  已新增 `AmazonOpenSearchIngestionServiceRolePolicy`  |  允許 OpenSearch Ingestion 為擷取管道啟用 VPC 存取、建立標籤，以及將擷取相關 CloudWatch 指標發佈至您帳戶的新政策。 如需了解政策 JSON，請參閱 [IAM 主控台](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AmazonOpenSearchIngestionServiceRolePolicy)。  |  2023 年 4 月 26 日  | 
|  已新增 `AmazonOpenSearchIngestionFullAccess`  |  新的政策，授予 對 OpenSearch Ingestion API 操作和資源的完整存取權 AWS 帳戶。 如需了解政策 JSON，請參閱 [IAM 主控台](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AmazonOpenSearchIngestionFullAccess)。  |  2023 年 4 月 26 日  | 
|  已新增 `AmazonOpenSearchIngestionReadOnlyAccess`  |  授予 所有 OpenSearch Ingestion 資源唯讀存取權的新政策 AWS 帳戶。 如需了解政策 JSON，請參閱 [IAM 主控台](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AmazonOpenSearchIngestionReadOnlyAccess)。  |  2023 年 4 月 26 日  | 
|  已新增 `AmazonOpenSearchServerlessServiceRolePolicy`  |  提供將 OpenSearch Serverless 指標資料傳送至 Amazon CloudWatch所需最低許可的新政策。 如需了解政策 JSON，請參閱 [IAM 主控台](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AmazonOpenSearchServerlessServiceRolePolicy)。  |  2022 年 11 月 29 日  | 
|  更新 `AmazonOpenSearchServiceRolePolicy` 和 `AmazonElasticsearchServiceRolePolicy`  |  已新增[服務連結角色](slr-aos.md#slr-permissions)建立 [OpenSearch Service 受管 VPC 端點](slr-aos.md#slr-permissions)所需的許可。某些動作只能在請求包含標籤 `OpenSearchManaged=true` 時執行。 已取代的 Elasticsearch 政策也已更新，以確保向後相容性。  |  2022 年 11 月 7 日  | 
|  更新 `AmazonOpenSearchServiceRolePolicy` 和 `AmazonElasticsearchServiceRolePolicy`  |  已新增對 `PutMetricData` 動作的支援，這是將 OpenSearch 叢集指標發佈至 Amazon CloudWatch 所需的動作。 已取代的 Elasticsearch 政策也已更新，以確保向後相容性。 如需了解政策 JSON，請參閱 [IAM 主控台](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AmazonOpenSearchServiceRolePolicy)。  |  2022 年 9 月 12 日  | 
|  更新 `AmazonOpenSearchServiceRolePolicy` 和 `AmazonElasticsearchServiceRolePolicy`  |  新增對 `acm` 資源類型的支援。此政策提供[服務連結角色](slr-aos.md#slr-permissions)驗證和驗證 ACM 資源所需的最低 AWS Certificate Manager (ACM) 唯讀許可，以建立和更新啟用[自訂端點](customendpoint.md)的網域。 已取代的 Elasticsearch 政策也已更新，以確保向後相容性。  |  2022 年 7 月 28 日  | 
|  更新 `AmazonOpenSearchServiceCognitoAccess` 和 `AmazonESCognitoAccess`  |  新增對 `UpdateUserPoolClient` 動作的支援，這是在從 Elasticsearch 升級至 OpenSearch 期間設定 Cognito 使用者集區設定所需的動作。 更正 `SetIdentityPoolRoles` 動作的許可，允許對所有資源的存取。 已取代的 Elasticsearch 政策也已更新，以確保向後相容性。  |  2021 年 12 月 20 日  | 
|  已更新 `AmazonOpenSearchServiceRolePolicy`  |  新增對 `security-group` 資源類型的支援。該政策提供[服務連結角色](slr-aos.md#slr-permissions)所必需的最低 Amazon EC2 和 Elastic Load Balancing 許可，以啟用 [VPC 存取](cognito-auth.md)。  |  2021 年 9 月 9 日  | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/opensearch-service/latest/developerguide/ac-managed.html)  |  這項新政策旨在取代舊政策。這兩個原則提供對 OpenSearch Service 組態 API 以及 OpenSearch API 的所有 HTTP 方法的完整存取。[精細存取控制](fgac.md)和[以資源為基礎的政策](ac.md#ac-types-resource)仍然可以限制存取。  |  2021 年 9 月 7 日  | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/opensearch-service/latest/developerguide/ac-managed.html)  |  這項新政策旨在取代舊政策。這兩個政策提供對 OpenSearch Service 組態 API (`es:Describe*`、`es:List*` 以及 `es:Get*`) 的唯讀存取，但是*不能*存取 OpenSearch API 的 HTTP 方法。  |  2021 年 9 月 7 日  | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/opensearch-service/latest/developerguide/ac-managed.html)  |  這項新政策旨在取代舊政策。這兩個政策提供啟用 [Cognito 身分驗證](cognito-auth.md)所必需的最低 Amazon Cognito 許可。  |  2021 年 9 月 7 日  | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/opensearch-service/latest/developerguide/ac-managed.html)  |  這項新政策旨在取代舊政策。兩個政策提供[服務連結角色](slr-aos.md#slr-permissions)所必需的最低 Amazon EC2 和 Elastic Load Balancing 許可，以啟用 [VPC 存取](cognito-auth.md)。  |  2021 年 9 月 7 日  | 
|  開始追蹤變更  |  Amazon OpenSearch Service 現在會追蹤 AWS受管政策的變更。  |  2021 年 9 月 7 日  | 

# 預防跨服務混淆代理人
<a name="cross-service-confused-deputy-prevention"></a>

混淆代理人問題屬於安全性議題，其中沒有執行動作許可的實體可以強制具有更多許可的實體執行該動作。在 中 AWS，跨服務模擬可能會導致混淆代理人問題。在某個服務 (*呼叫服務*) 呼叫另一個服務 (*被呼叫服務*) 時，可能會發生跨服務模擬。可以操縱呼叫服務來使用其許可，以其不應有存取許可的方式對其他客戶的資源採取動作。為了預防這種情況， AWS 提供的工具可協助您保護所有服務的資料，而這些服務主體已獲得您帳戶中資源的存取權。

若要限制 Amazon OpenSearch Service 為資源提供另一項服務的許可，我們推薦在資源政策中使用 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn) 和 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount) 全域條件內容索引鍵。如果 `aws:SourceArn` 值不包含帳戶 ID (例如 Amazon S3 儲存貯體 ARN)，您必須使用這兩個全域條件內容金鑰來限制許可。如果同時使用這兩個全域條件內容金鑰，且 `aws:SourceArn` 值包含帳戶 ID，則在相同政策陳述式中使用 `aws:SourceAccount` 值和 `aws:SourceArn` 值中的帳戶時，必須使用相同的帳戶 ID。如果您想要僅允許一個資源與跨服務存取相關聯，則請使用 `aws:SourceArn`。如果您想要允許該帳戶中的任何資源與跨服務使用相關聯，請使用 `aws:SourceAccount`。

`aws:SourceArn` 的值必須是 OpenSearch Service 網域的 ARN。

防範混淆代理人問題最有效的方法，是使用 `aws:SourceArn` 全域條件內容金鑰，以及資源的完整 ARN。如果不知道資源的完整 ARN，或者如果您指定了多個資源，請使用 `aws:SourceArn` 全域條件內容金鑰，同時使用萬用字元 (`*`) 表示 ARN 的未知部分。例如 `arn:aws:es:*:123456789012:*`。

下列範例示範如何使用 OpenSearch Service 中的 `aws:SourceArn` 和 `aws:SourceAccount` 全域條件內容金鑰，來預防混淆代理人問題。

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":{
      "Sid":"ConfusedDeputyPreventionExamplePolicy",
      "Effect":"Allow",
      "Principal":{
         "Service":"es.amazonaws.com"
      },
      "Action":"sts:AssumeRole",
      "Condition":{
         "StringEquals":{
            "aws:SourceAccount":"111122223333"
         },
         "ArnLike":{
            "aws:SourceArn":"arn:aws:es:us-east-1:111122223333:domain/my-domain"
         }
      }
   }
}
```

------

# Amazon OpenSearch Service 中的精細存取控制
<a name="fgac"></a>

精細存取控制可提供額外的方式，以控制在 Amazon OpenSearch Service 上對資料的存取。例如，根據提出請求的人員，您可能會希望搜尋只傳回一個索引的結果。您可能會希望隱藏文件中的某些欄位，或是排除特定的文件。

精細存取控制具有以下優勢：
+ 角色類型存取控制
+ 索引、文件和欄位層級的安全
+ OpenSearch Dashboards 多租用
+ OpenSearch 和 OpenSearch Dashboards 的 HTTP 基本身分驗證

**Topics**
+ [宏觀：精細存取控制和 OpenSearch Service 安全](#fgac-access-policies)
+ [重要概念](#fgac-concepts)
+ [關於主要使用者](#fgac-master-user)
+ [啟用精細存取控制](#fgac-enabling)
+ [以主要使用者身分存取 OpenSearch Dashboards](#fgac-dashboards)
+ [管理許可](#fgac-access-control)
+ [建議的組態](#fgac-recommendations)
+ [限制](#fgac-limitations)
+ [修改主要使用者](#fgac-forget)
+ [其他主要使用者](#fgac-more-masters)
+ [手動快照](#fgac-snapshots)
+ [整合](#fgac-integrations)
+ [REST API 差異](#fgac-rest-api)
+ [教學課程：使用 IAM 主要使用者和 Amazon Cognito 身分驗證設定網域](fgac-iam.md)
+ [教學課程：使用內部使用者資料庫和 HTTP 基本身分驗證設定網域](fgac-http-auth.md)

## 宏觀：精細存取控制和 OpenSearch Service 安全
<a name="fgac-access-policies"></a>

Amazon OpenSearch Service 安全具有三個主要層次：

**網路**  
第一個安全層次是網路，它決定請求是否可以連線 OpenSearch Service 網域。如果您在建立網域時選擇 **Public access (公有存取)**，則來自任何網際網路連線用戶端的請求都能連線到網域端點。如果您選擇 **VPC access (VPC 存取)**，用戶端必須連線至 VPC (且相關聯的安全群組也必須允許)，請求才能連線到端點。如需詳細資訊，請參閱[在 VPC 中啟動您的 Amazon OpenSearch Service 網域](vpc.md)。

**網域存取政策**  
第二個安全層次是網域存取政策。在請求連線到網域端點後，[資源類型存取政策](ac.md#ac-types-resource)會允許或拒絕對指定 URI 的請求存取。存取政策會在請求到達 OpenSearch 本身之前，在網域的「邊緣」接受或拒絕請求。

**精細定義存取控制**  
第三個和最後一個安全層次是精細存取控制。在資源類型存取政策允許請求連線到網域端點後，精細存取控制會評估使用者登入資料，並讓使用者通過身分驗證或拒絕請求。如果精細存取控制讓使用者通過身分驗證，則會擷取所有映射到該使用者的角色，並使用完整的許可集合來判斷如何處理請求。

**注意**  
如果資源型存取政策包含 IAM 角色或使用者，用戶端必須使用 AWS Signature 第 4 版傳送簽署的請求。因此，存取政策可能會和精細存取控制產生衝突，特別是當您使用內部使用者資料庫和 HTTP 基本身分驗證時。您無法使用使用者名稱和密碼和 IAM ** 登入資料來簽署請求。一般而言，如果您啟用了精細存取控制，我們建議您使用不需要簽章請求的網域存取政策。

下圖說明了常見的組態：啟用精細存取控制的 VPC 存取網域、IAM 型的存取政策以及 IAM 主要使用者。

![\[具備 VPC 網域的精細存取控制授權流程\]](http://docs.aws.amazon.com/zh_tw/opensearch-service/latest/developerguide/images/fgac-vpc-iam.png)


下圖說明了另一種常見的組態：啟用精細存取控制的公有存取網域，不使用 IAM 委託人的存取政策，以及內部使用者資料庫中的主要使用者。

![\[具備公有存取網域的精細存取控制授權流程\]](http://docs.aws.amazon.com/zh_tw/opensearch-service/latest/developerguide/images/fgac-public-basic.png)


### 範例
<a name="fgac-example"></a>

假設有一個對 `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` 例外狀況。

## 重要概念
<a name="fgac-concepts"></a>

當您開始使用精細存取控制時，請考慮下列概念：
+ **角色** – 使用精細存取控制的核心方式。在這種情況下，角色與 IAM 角色不同。角色包含了任何許可的組合：全叢集、特定索引、文件層級，以及欄位層級。
+ **映射** – 設定角色之後，您會將其*映射*至一或多個使用者。例如，您可以將三個角色映射到單一使用者：其中一個角色提供存取給 Dashboards，第二個角色提供唯讀存取給 `index1`，第三個角色則提供寫入存取給 `index2`。或者，您可以在單一角色中包含這些許可。
+ **使用者** – 向 OpenSearch 叢集提出請求的人員或應用程式。使用者擁有 IAM 存取金鑰或使用者名稱和密碼等登入資料，他們在提出請求時指定這些登入資料。

## 關於主要使用者
<a name="fgac-master-user"></a>

OpenSearch Service 中的*主要使用者*是使用者名稱和密碼組合，或具有基礎 OpenSearch 叢集完整許可的 IAM 主體。如果使用者擁有 OpenSearch 叢集的所有存取權，以及能夠在 OpenSearch Dashboards 中建立內部使用者、角色和角色映射，則會將其視為主要使用者。

在 OpenSearch Service 主控台或透過 CLI 建立的主要使用者會自動對應至兩個預先定義的角色：
+ `all_access` – 提供所有叢集整體操作的完整存取權、寫入所有叢集索引的許可，以及寫入所有租用戶的許可。
+ `security_manager` – 提供安全[外掛程式](https://opensearch.org/docs/latest/security/)的存取權，以及使用者和許可的管理。

透過這兩個角色，使用者可以存取 OpenSearch Dashboards 中的**安全**索引標籤，在其中管理使用者和許可。如果您建立另一個內部使用者，並且只將其映射到`all_access`角色，則該使用者無法存取**安全**索引標籤。您可以明確地將其他主要使用者映射到 `all_access`和 `security_manager`角色，以建立其他主要使用者。如需說明，請參閱[其他主要使用者](#fgac-more-masters)。

當您為網域建立主要使用者時，您可以指定現有的 *IAM 主體*，或在*內部使用者資料庫中建立主要使用者*。在決定要使用哪個時，請考慮下列事項：
+ **IAM 主體** – 如果您為主要使用者選擇 IAM 主體，必須使用 AWS Signature 第 4 版簽署對叢集的所有請求。

  OpenSearch Service 不會考慮 IAM 主體的任何許可。IAM 使用者或角色僅供*身分驗證*使用。該使用者或角色上的政策與主要使用者*的授權*無關。授權是透過 OpenSearch Security 外掛程式中的各種[許可](https://opensearch.org/docs/latest/security/access-control/permissions/)來處理。

  例如，您可以將零 *IAM* 許可指派給 IAM 主體，只要機器或人員可以向該使用者或角色進行身分驗證，他們就可以在 OpenSearch Service 中擁有主要使用者的能力。

  如果您希望在多個叢集上使用相同的使用者、希望使用 Amazon Cognito 存取 Dashboards，或是您有支援 Signature 4 版簽署的 OpenSearch 用戶端，則我們建議您使用 IAM。
+ **內部使用者資料庫** – 如果您在內部使用者資料庫中建立主伺服器 （使用使用者名稱和密碼組合），您可以使用 HTTP 基本身分驗證 （以及 IAM 憑證） 向叢集提出請求。大多數用戶端都支援基本身分驗證，包括 [curl](https://curl.haxx.se/)，這也支援 AWS Signature 第 4 版搭配 [--aws-sigv4 選項](https://curl.se/docs/manpage.html)。內部使用者資料庫會存放在 OpenSearch 索引中，因此您無法與其他叢集共享。

  如果您不需要跨多個叢集重複使用使用者、希望使用 HTTP 基本身分驗證來存取 Dashboards (而非 Amazon Cognito)，或是您具備只支援基本身分驗證的用戶端，則我們建議您使用內部使用者資料庫。內部使用者資料庫是開始使用 OpenSearch Service 的最簡單方式。

## 啟用精細存取控制
<a name="fgac-enabling"></a>

使用主控台 AWS CLI或組態 API 啟用精細存取控制。如需這些步驟，請參閱 [建立和管理 Amazon OpenSearch Service 網域](createupdatedomains.md)。

精細存取控制需要 OpenSearch 或 Elasticsearch 6.7 或更高版本。亦要求所有流向網域的流量皆使用 HTTPS、[靜態資料加密](encryption-at-rest.md)，以及[節點對節點加密](ntn.md)。視您設定精細存取控制進階功能的方式而定，額外處理請求可能需要個別資料節點上的運算和記憶體資源。在您啟用精細存取控制後，您便無法停用此功能。

### 在現有網域上啟用精細存取控制
<a name="fgac-enabling-existing"></a>

您可以在執行 OpenSearch 或 Elasticsearch 6.7 或更高版本的現有網域上，啟用精細存取控制。

**在現有網域上啟用精細存取控制 (主控台)**

1. 選取網域，並選擇 **Actions** (動作) 和 **Edit security configuration** (編輯安全組態)。

1. 選取 **Enable fine-grained access control** (啟用精細存取控制)。

1. 選擇建立主要使用者的方法：
   + 如果您希望使用 IAM 進行使用者管理，請選擇 **Set IAM ARN as master user** (將 IAM ARN 設為主要使用者)，並指定 IAM 角色的 ARN。
   + 如果您想要使用內部使用者資料庫，請選擇**建立主要使用者**，並指定使用者名稱和密碼。

1. (選用) 選取 **Enable migration period for open/IP-based access policy** (啟用開放/IP 型存取政策的遷移期)。此設定會啟用 30 天的過渡期，在此期間，您目前的使用者可繼續存取網域，不會中斷，且現有的開放和 [IP 型存取政策](ac.md#ac-types-ip)仍可繼續使用您的網域。在此遷移期間，我們建議管理員為網域[建立必要角色，並將其映射至使用者](#fgac-access-control)。如果您使用以身分為基礎的政策，而非開放或 IP 型存取政策，則您可以停用此設定。

   您也需要更新客户端，以在遷移期間使用精細存取控制。例如，如果您對應具有精細存取控制的 IAM 角色，則必須更新用戶端以使用 AWS Signature 第 4 版開始簽署請求。如果您使用精細存取控制設定 HTTP 基本身分驗證，則必須更新客户端，以在請求中提供適當的基本身分驗證憑證。

   在遷移期間，存取網域的 OpenSearch Dashboards 端點的使用者將直接登錄至 **Discover** (發現) 頁面，而非登入頁面。管理員和主要使用者可選擇 **Login** (登入)，使用管理員憑據登入並設定角色映射。
**重要**  
**OpenSearch Service 會在 30 天後自動停用遷移期**。我們建議您在建立必要角色並將其映射至使用者後，立即結束該角色。遷移期結束後，您便無法重新啟用。

1. 選擇**儲存變更**。

在叢集運作狀態變成紅色期間，變更會觸發[藍/綠部署](managedomains-configuration-changes.md#bg)，但所有叢集操作皆不受影響。

**在現有網域上啟用精細存取控制 (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\$1role
<a name="fgac-enabling-defaultrole"></a>

精細存取控制需要[角色映射](#fgac-mapping)。如果網域使用[身分型存取政策](ac.md#ac-types-identity)，則 OpenSearch Service 會自動將使用者映射至名為 **default\$1role** 的新角色，以協助您正確遷移現有使用者。在您建立自有角色映射之前，此臨時映射可確保您的使用者仍可成功傳送由 IAM 簽署之 GET 和 PUT 請求。

該角色不會新增任何安全漏洞或缺陷至您的 OpenSearch Service 網域。我們建議您在設定自有角色後並相應映射它們後，立即刪除預設角色。

### 遷移案例
<a name="fgac-enabling-scenarios"></a>

下表說明在現有網域上啟用精細存取控制前後的各身分驗證方法的行為，以及若管理員要將其使用者正確映射至角色，必須採取的步驟：


| 身分驗證方法 | 在啟用精細存取控制前 | 在啟用精細存取控制後 | 管理員任務 | 
| --- | --- | --- | --- | 
| 以身分為基礎的政策 |  滿足 IAM 政策的所有使用者都可以存取該網域。  |  您無需啟用遷移期。 OpenSearch Service 會自動將所有滿足 IAM 政策的 IAM 使用者映射至 **[default\$1role](#fgac-enabling-defaultrole)**，以便他們能夠繼續存取該網域。  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/opensearch-service/latest/developerguide/fgac.html)  | 
| 以 IP 為基礎的政策 |  來自受允許 IP 地址或 CIDR 區塊的所有使用者皆可存取網域。  |  在 30 天遷移期內，所有來自受允許 IP 地址或 CIDR 區塊的使用者都可繼續存取網域。  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/opensearch-service/latest/developerguide/fgac.html)  | 
| 開放存取政策 |  網際網路上的所有使用者皆可存取網域。  |  在 30 天的遷移期內，網際網路上的所有使用者皆可繼續存取網域。  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/opensearch-service/latest/developerguide/fgac.html)  | 

## 以主要使用者身分存取 OpenSearch Dashboards
<a name="fgac-dashboards"></a>

精細存取控制具備 OpenSearch Dashboards 外掛程式，可以簡化管理任務。您可以使用 Dashboards 來管理使用者、角色、映射、動作群組和租用戶。但是 OpenSearch Dashboards 登入頁面和基礎身分驗證方法會有所不同，這取決於您管理使用者及設定網域的方式。
+ 如果您想使用 IAM 進行使用者管理，請使用 [設定 OpenSearch Dashboards 的 Amazon Cognito 身分驗證](cognito-auth.md) 來存取 Dashboards。否則，Dashboards 會顯示沒有任何功能的登入頁面。請參閱 [限制](#fgac-limitations)。

  透過 Amazon Cognito 身分驗證，擔任的身分集區中的其中一個角色必須與您為主要使用者指定的 IAM 角色相符。如需此組態的詳細資訊，請參閱 [(選用) 設定精細分級的存取](cognito-auth.md#cognito-auth-granular) 和 [教學課程：使用 IAM 主要使用者和 Amazon Cognito 身分驗證設定網域](fgac-iam.md)。  
![\[Cognito 登入頁面\]](http://docs.aws.amazon.com/zh_tw/opensearch-service/latest/developerguide/images/cognito-auth.png)
+ 如果您選擇使用內部使用者資料庫，您可以使用主要使用者名稱和密碼登入 Dashboards。您必須透過 HTTPS 存取 Dashboards。適用於 Dashboards 的 Amazon Cognito 和 SAML 身分驗證都會取代此登入畫面。

  如需此組態的詳細資訊，請參閱「[教學課程：使用內部使用者資料庫和 HTTP 基本身分驗證設定網域](fgac-http-auth.md)」。  
![\[基本身分驗證登入頁面\]](http://docs.aws.amazon.com/zh_tw/opensearch-service/latest/developerguide/images/basic-auth-dashboards.png)
+ 如果您選擇使用 SAML 身分驗證，您可以使用外部身分提供者的憑證登入。如需詳細資訊，請參閱[OpenSearch Dashboards 的 SAML 身分驗證](saml.md)。

## 管理許可
<a name="fgac-access-control"></a>

如 [重要概念](#fgac-concepts) 中所述，您可以使用角色、使用者和映射來管理精細存取控制許可。本節說明如何建立和套用這些資源。我們建議您[以主要使用者身分登入 Dashboards](#fgac-dashboards)，以執行這些操作。

![\[Dashboards 中的安全首頁\]](http://docs.aws.amazon.com/zh_tw/opensearch-service/latest/developerguide/images/dashboards-fgac-home.png)


**注意**  
您選擇授予使用者的許可，根據使用案例有很大差異。我們無法在本文中涵蓋所有案例。在決定要授予使用者的許可時，請務必參考下列章節中提到的 OpenSearch 叢集和索引許可，並始終遵循[最低權限原則](https://en.wikipedia.org/wiki/Principle_of_least_privilege)。

### 建立角色
<a name="fgac-roles"></a>

您可以使用 OpenSearch Dashboards 或 REST API 中的 `_plugins/_security` 操作為精細存取控制建立新角色。如需詳細資訊，請參閱[建立角色](https://opensearch.org/docs/latest/security/access-control/users-roles/#create-roles)。

精細存取控制也包含了許多[預先定義角色](https://opensearch.org/docs/latest/security/access-control/users-roles/#predefined-roles)。OpenSearch Dashboards 和 Logstash 等用戶端會向 OpenSearch 提出各種請求，使手動建立具備最小許可集合的角色變得難以進行。例如，`opensearch_dashboards_user` 角色包含了使用者使用索引模式、視覺化及儀表板和租用戶所需要的許可。我們建議[將其映射](#fgac-mapping)至存取 Dashboards 的任何使用者或後端角色，以及允許存取其他索引的其他角色。

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`

#### 叢集層級安全
<a name="fgac-cluster-level"></a>

叢集層級許可包括能夠發出廣泛請求 (例如 `_mget`、`_msearch` 以及 `_bulk`)、監控運作狀態、擷取快照等。請在建立角色時使用 **Cluster Permissions** (叢集許可) 部分來管理這些許可。如需完整的叢集層級許可清單，請參閱[叢集許可](https://opensearch.org/docs/latest/security/access-control/permissions/#cluster-permissions)。

您通常可以使用預設動作群組組合，而不是個別許可，達到所需的安全狀態。如需叢集層級動作群組的清單，請參閱[叢集層級](https://opensearch.org/docs/latest/security/access-control/default-action-groups/#cluster-level)。

#### 索引層級安全
<a name="fgac-index-level"></a>

索引層級許可包含建立新索引、搜尋索引、讀取和寫入文件、刪除文件、管理別名等能力。請在建立角色時使用 **Index Permissions** (索引許可) 部分來管理這些許可。如需完整的索引層級許可清單，請參閱[索引許可](https://opensearch.org/docs/latest/security/access-control/permissions/#index-permissions)。

您通常可以使用預設動作群組組合，而不是個別許可，達到所需的安全狀態。如需索引層級動作群組的清單，請參閱[索引層級](https://opensearch.org/docs/latest/security/access-control/default-action-groups/#index-level)。

#### 文件層級安全
<a name="fgac-document-level"></a>

文件層級安全可讓您限制使用者在索引中可看見的文件。請在建立角色時指定索引模式和 OpenSearch 查詢。任何您映射到該角色的使用者都只能看見與查詢相符的文件。文件層級安全會影響[您在搜尋時的命中數](#fgac-example)。

如需詳細資訊，請參閱[文件層級安全](https://opensearch.org/docs/latest/security/access-control/document-level-security/)。

#### 欄位層級安全
<a name="fgac-field-level"></a>

欄位層級安全可讓您控制使用者能看見的文件欄位。建立角色時，請新增欄位清單來加入或排除。如果您加入欄位，則您映射到該角色的任何使用者都只能看到那些欄位。如果您排除欄位，則「除了」**遭排除的欄位外，使用者可以看見所有欄位。欄位層級安全會影響[您在搜尋時包含在命中中的欄位數](#fgac-example)。

如需詳細資訊，請參閱[欄位層級安全](https://opensearch.org/docs/latest/security/access-control/field-level-security/)。

#### 欄位遮罩
<a name="fgac-field-masking"></a>

欄位遮罩是欄位層級安全的替代項目，可讓您匿名化欄位中的資料，而非完全移除。請在建立角色時，新增要進行遮罩的欄位清單。欄位遮罩會影響[您在搜尋時是否可以看見欄位的內容](#fgac-example)。

**提示**  
如果您將標準遮罩套用至欄位，OpenSearch Service 會使用安全的隨機雜湊，造成彙總結果不精確。若要在遮罩欄位上執行彙總，請改用以模式為基礎的遮罩。

### 建立 使用者
<a name="fgac-users"></a>

如果您啟用內部使用者資料庫，則您可以使用 OpenSearch Dashboards 或 REST API 中的 `_plugins/_security` 操作來建立使用者。如需詳細資訊，請參閱[建立使用者](https://opensearch.org/docs/latest/security/access-control/users-roles/#create-users)。

如果您為主要使用者選擇了 IAM，請忽略 Dashboards 的這個部分。請改為建立 IAM 角色。如需詳細資訊，請參閱《IAM 使用者指南》[https://docs.aws.amazon.com/IAM/latest/UserGuide/](https://docs.aws.amazon.com/IAM/latest/UserGuide/)。

### 將角色映射至使用者
<a name="fgac-mapping"></a>

角色映射是精細存取控制中最重要的層面。精細存取控制包含了一些預先定義角色，可協助您開始使用，但除非您將這些角色映射到使用者，否則每個向叢集提出的請求都會導致許可錯誤。

*後端角色*可協助簡化角色映射程序。您可以將角色映射到所有 100 個使用者共用的單一後端角色，而不是將相同的角色映射到 100 個個別使用者。後端角色可以是 IAM 角色或任意字串。
+ 在 **Users** (使用者) 區段中指定使用者、使用者 ARN 和 Amazon Cognito 使用者字串。Cognito 使用者字串的形式為 `Cognito/user-pool-id/username`。
+ 請在 **Backend roles (後端角色)** 區段中指定後端角色和 IAM 角色 ARN。

![\[角色映射畫面\]](http://docs.aws.amazon.com/zh_tw/opensearch-service/latest/developerguide/images/role-mapping-edit.png)


您可以使用 OpenSearch Dashboards 或 REST API 中的 `_plugins/_security` 操作將角色映射至使用者。如需詳細資訊，請參閱[將使用者映射至角色](https://opensearch.org/docs/latest/security/access-control/users-roles/#map-users-to-roles)。

### 建立動作群組
<a name="fgac-ag"></a>

動作群組是一組許可，可讓您跨不同資源重複使用。您可以使用 OpenSearch Dashboards 或 REST API 中的 `_plugins/_security` 操作建立新的動作群組，雖然預設動作群組已足以適用大多數的使用案例。如需預設動作群組的詳細資訊，請參閱[預設動作群組](https://opensearch.org/docs/latest/security/access-control/default-action-groups/)。

### OpenSearch Dashboards 多租用
<a name="fgac-multitenancy"></a>

租用戶是儲存索引模式、視覺化、儀表板和其他 Dashboards 物件的空間。Dashboards 多租用戶可讓您安全地與其他 Dashboards 使用者共用您的工作 （或保持私有），並動態設定租用戶。您可以控制哪些角色可以存取租用戶，以及這些角色是否具備讀取或寫入存取權限。全域租用戶為預設值。如需進一步了解，請參閱 [OpenSearch Dashboards 多租用](https://opensearch.org/docs/latest/security/multi-tenancy/tenant-index/)。

**檢視您目前的租用戶或變更租用戶**

1. 導覽至 OpenSearch Dashboards 並登入。

1. 選取右上角的使用者圖示，然後選擇 **Switch tenants** (轉換租用戶)。

1. 在建立視覺效果或儀表板之前驗證您的租用戶。如果您希望與其他所有的 Dashboards 使用者共享您的作品，請選擇 **Global** (全域)。若要與一部分 Dashboards 使用者共享您的作品，請選擇不同的共享租用戶。否則，請選擇 **Private (私有)**。

**注意**  
OpenSearch Dashboards 為每個租用戶維護另外的索引，並建立索引範本 `tenant_template`。請勿刪除或修改 `tenant_template` 索引，因為如果租用戶索引映射錯誤設定，可能會導致 OpenSearch Dashboards 故障。

## 建議的組態
<a name="fgac-recommendations"></a>

由於精細存取控制[與其他安全功能的互動方式](#fgac-access-policies)，我們建議使用數種精細存取控制組態。這些組態適合大多數的使用案例。


| Description | 主要使用者 | 網域存取政策 | 
| --- | --- | --- | 
|  使用 IAM 憑證來呼叫 OpenSearch API，並使用 [SAML 身分驗證](saml.md)存取 Dashboards。使用 Dashboards 或 REST API 管理精細存取控制角色。  | IAM 角色或使用者 |    JSON   

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": "es:ESHttp*",
      "Resource": "arn:aws:es:us-east-1:111122223333:domain/domain-name/*"
    }
  ]
}
```      | 
|  使用 IAM 憑證或基本身分驗證來呼叫 OpenSearch API。使用 Dashboards 或 REST API 管理精細存取控制角色。 此組態提供了很多靈活性，尤其是如果您的 OpenSearch 用戶端僅支援基本身分驗證。 如果您擁有現有的身分提供者，請使用 [SAML 身分驗證](saml.md)來存取 Dashboards。否則，請管理內部使用者資料庫中的 Dashboards 使用者。  | 使用者名稱和密碼 |    JSON   

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": "es:ESHttp*",
      "Resource": "arn:aws:es:us-east-1:111122223333:domain/domain-name/*"
    }
  ]
}
```      | 
|  使用 IAM 憑證來呼叫 OpenSearch API，並使用 Amazon Cognito 存取 Dashboards。使用 Dashboards 或 REST API 管理精細存取控制角色。  | IAM 角色或使用者 |    JSON   

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": "es:ESHttp*",
      "Resource": "arn:aws:es:us-east-1:111122223333:domain/domain-name/*"
    }
  ]
}
```      | 
|  使用 IAM 憑證來呼叫 OpenSearch API，並阻止對 Dashboards 的大多數存取。使用 REST API 管理精細存取控制角色。  | IAM 角色或使用者 |    JSON   

****  

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

## 限制
<a name="fgac-limitations"></a>

精細存取控制有幾個重要的限制：
+ 如果網域是位於 VPC 中，則將角色映射到主機名稱或 IP 地址的角色映射 `hosts` 層面會無法正常運作。您仍然可以將角色映射到使用者和後端角色。
+ 如果您為主要使用者選擇了 IAM 但並未啟用 Amazon Cognito 或 SAML 身分驗證，則 Dashboards 會顯示沒有任何功能的登入頁面。
+ 如果您為主要使用者選擇了 IAM，您仍然可以在內部使用者資料庫中建立使用者。但是，由於沒有在這個組態下啟用 HTTP 基本身分驗證，因此任何使用這些使用者登入資料簽署的請求都會遭到拒絕。
+ 如果您使用 [SQL](sql-support.md) 來查詢您無法存取的索引，便會收到「沒有許可」錯誤。如果索引不存在，則您會收到「找不到索引」錯誤。這項錯誤訊息中的差異表示如果您猜測其名稱，您便可以確認該索引是否存在。

  為了將問題降至最低，[請不要在索引名稱中包含敏感資訊](indexing.md#indexing-naming)。如要拒絕所有對 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 資料來源整合](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/direct-query-s3-creating.html#direct-query-s3-prereq)。

## 修改主要使用者
<a name="fgac-forget"></a>

如果您忘記了主要使用者的詳細資訊，您可以使用主控台、 AWS CLI或組態 API 來重新設定。

**修改主要使用者 (主控台)**

1. 導覽至 Amazon OpenSearch Service 主控台，網址為 https：//[https://console.aws.amazon.com/aos/home/](https://console.aws.amazon.com/aos/home/)。

1. 選取網域，並選擇 **Actions** (動作)、**Edit security configuration** (編輯安全組態)。

1. 選擇 **Set IAM ARN as master user** (將 IAM ARN 設為主要使用者) 或 **Create master user** (建立主要使用者)。
   + 如果您先前使用了 IAM 主要使用者，精細存取控制會將 `all_access` 角色重新映射到您指定的新 IAM ARN。
   + 如果您先前使用了內部使用者資料庫，則精細存取控制會建立新的主要使用者。您可以使用新的主要使用者來刪除舊的主要使用者。
   + 從內部使用者資料庫切換至 IAM 主要使用者*不會*刪除內部使用者資料庫中的任何使用者。相反，它只是停用 HTTP 基本身分驗證。從內部使用者資料庫手動刪除使用者，或者保留它們，以防您需要重新啟用 HTTP 基本身分驗證。

1. 選擇**儲存變更**。

## 其他主要使用者
<a name="fgac-more-masters"></a>

您可以在建立網域時指定主要使用者，但是如果您希望的話，您可以使用這個主要使用者來建立其他主要使用者。您有兩個選項：OpenSearch Dashboards 或 REST API。
+ 在 Dashboards 中，選擇 **Security** (安全性)、**Role** (角色)，然後將新的主要使用者映射到 `all_access` 和 `security_manager` 角色。  
![\[角色映射頁面\]](http://docs.aws.amazon.com/zh_tw/opensearch-service/latest/developerguide/images/new-master-users.png)
+ 如要使用 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` 請求中包含所有目前的角色。在您無法存取 Dashboards 而又希望將 Amazon Cognito 的 IAM 角色映射到 `all_access` 角色時，REST API 特別有用。

## 手動快照
<a name="fgac-snapshots"></a>

精細存取控制在擷取手動快照時複雜度較高。若要註冊快照儲存庫 (即使將 HTTP 基本身分驗證用於所有其他用途)，您必須將 `manage_snapshots` 角色映射至具備 `iam:PassRole` 許可能夠擔任 `TheSnapshotRole` 的 IAM 角色，如 [先決條件](managedomains-snapshots.md#managedomains-snapshot-prerequisites) 中所定義。

然後使用該 IAM 角色將簽章的請求傳送到網域，如 [註冊手動快照儲存庫](managedomains-snapshot-registerdirectory.md) 中所述。

## 整合
<a name="fgac-integrations"></a>

如果您使用[其他 AWS 服務](integrations.md)搭配 OpenSearch Service，您必須為這些服務提供具有適當許可的 IAM 角色。例如，Firehose 交付串流通常會使用名為 的 IAM 角色`firehose_delivery_role`。在 Dashboards 中，[建立精細存取控制的角色](#fgac-roles)，然後[將 IAM 角色映射到該角色](#fgac-mapping)。在此案例中，新的角色需要下列許可：

```
{
  "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 差異
<a name="fgac-rest-api"></a>

精細存取控制 REST API 會因您的 OpenSearch/Elasticsearch 版本而有些許差異。在提出 `PUT` 請求前，請先提出 `GET` 請求以驗證預期的請求主體。例如，向 `_plugins/_security/api/user` 提出的 `GET` 請求會傳回所有使用者，讓您可以接著進行修改並用來提出有效的 `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 參考](https://opensearch.org/docs/latest/security/access-control/api/)。

**提示**  
如果您使用內部用戶資料庫，則可以使用 [curl](https://curl.haxx.se/) 發出請求並測試您的網域。嘗試以下範例命令：  

```
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'
```

# 教學課程：使用 IAM 主要使用者和 Amazon Cognito 身分驗證設定網域
<a name="fgac-iam"></a>

此本學課程涵蓋適用於[精細存取控制](fgac.md)的熱門 Amazon OpenSearch Service 使用案例：適用於 OpenSearch Dashboards 的 IAM 主要使用者與 Amazon Cognito 身分驗證。

在本教學課程中，我們將設定*主要* IAM 角色和*有限的* IAM 角色，然後我們將它們與 Amazon Cognito 中的使用者建立關聯。然後，主要使用者可以登入 OpenSearch Dashboards，將有限的使用者對應至角色，並使用精細存取控制來限制使用者的許可。

![\[IAM roles and Amazon Cognito integration with OpenSearch Dashboards access control.\]](http://docs.aws.amazon.com/zh_tw/opensearch-service/latest/developerguide/images/fgac-cognito.png)


雖然這些步驟會使用 Amazon Cognito 使用者集區進行身分驗證，但相同的基本程序也適用於任何可讓您將不同 IAM 角色指派給不同使用者的 Cognito 身分驗證提供者。

在本教學課程中，您會完成下列步驟：

1. [建立主要和有限的 IAM 角色](#fgac-iam-roles)

1. [使用 Cognito 身分驗證建立網域](#fgac-iam-domain)

1. [設定 Cognito 使用者集區和身分集區](#fgac-iam-cognito)

1. [在 OpenSearch Dashboards 中對應角色](#fgac-iam-dashboards)

1. [測試許可](#fgac-iam-test)

## 步驟 1：建立主要和有限的 IAM 角色
<a name="fgac-iam-roles"></a>

導覽至 AWS Identity and Access Management (IAM) 主控台並建立兩個不同的角色：
+ `MasterUserRole`：具備叢集完整許可並管理角色與角色映射的主要使用者。
+ `LimitedUserRole`：更受限制的角色，您將向其授予作為主要使用者的有限存取權。

如需建立角色的指示，請參閱《*IAM 使用者指南*》中的[使用自訂信任政策建立角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-custom.html)。

兩個角色都必須具有下列信任政策，以允許您的 Cognito 身分集區擔任相關角色：

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [{
    "Effect": "Allow",
    "Principal": {
      "Federated": "cognito-identity.amazonaws.com"
    },
    "Action": "sts:AssumeRoleWithWebIdentity",
    "Condition": {
      "StringEquals": {
        "cognito-identity.amazonaws.com:aud": "{identity-pool-id}"
      },
      "ForAnyValue:StringLike": {
        "cognito-identity.amazonaws.com:amr": "authenticated"
      }
    }
  }]
}
```

------

**注意**  
使用 Amazon Cognito 身分集區的唯一識別符取代 `identity-pool-id`。例如 `us-east-1:0c6cdba7-3c3c-443b-a958-fb9feb207aa6`。

## 步驟 2：使用 Cognito 身分驗證建立網域
<a name="fgac-iam-domain"></a>

導覽至位於 https：//[https://console.aws.amazon.com/aos/home/](https://console.aws.amazon.com/aos/home/) 的 Amazon OpenSearch Service 主控台，並使用[下列設定建立網域](createupdatedomains.md)：
+ OpenSearch 1.0 或更高版本，或者 Elasticsearch 7.8 或更高版本
+ 公開存取
+ 以 `MasterUserRole` 作為主要使用者啟用的精細存取控制 (在上一個步驟中建立) 
+ 已為 OpenSearch Dashboards 啟用 Amazon Cognito 身分驗證。如需啟用 Cognito 身分驗證，以及選取使用者和身分集區的說明，請參閱[設定網域以使用 Amazon Cognito 身分驗證](cognito-auth.md#cognito-auth-config)。
+ 以下網域存取政策：

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

****  

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

------
+ 要求所有前往網域的流量皆使用 HTTPS
+ 節點對節點加密
+ 靜態資料加密

## 步驟 3：設定 Cognito 使用者
<a name="fgac-iam-cognito"></a>

建立網域時，請依照《Amazon Cognito *開發人員指南》中的 Amazon Cognito*[建立使用者集區，在 Amazon Cognito 內設定主要和受限使用者](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-as-user-directory.html)。最後，請依照在 [Amazon Cognito 中建立身分集區中的步驟來設定身分集區](https://docs.aws.amazon.com/cognito/latest/developerguide/getting-started-with-identity-pools.html#create-identity-pool)。使用者集區和身分集區必須在相同的 AWS 區域。

## 步驟 4：在 OpenSearch Dashboards 中映射角色
<a name="fgac-iam-dashboards"></a>

現在已設定您的使用者，您可以主要使用者身分登入 OpenSearch Dashboards，並將使用者映射至角色。

1. 返回 OpenSearch Service 主控台，然後導覽至您所建立網域的 OpenSearch Dashboards URL。URL 遵循此格式：`domain-endpoint/_dashboards/`。

1. 使用 `master-user` 憑證登入。

1. 選擇 **Add sample data** (新增範例資料)，並新增範例航班資料。

1. 在左側導覽窗格中，選擇 **Security** (安全)、**Roles** (角色)、**Create role** (建立角色)。

1. 將角色命名為 `new-role`。

1. 對於 **Index** (索引)，指定 `opensearch_dashboards_sample_data_fli*` (Elasticsearch 網域上的 `kibana_sample_data_fli*`)。

1. 對於 **Index permissions** (索引許可)，請選擇 **read** (讀取)。

1. 對於 **Document level security** (文件層級安全)，指定以下查詢：

   ```
   {
     "match": {
       "FlightDelay": true
     }
   }
   ```

1. 如需欄位層級的安全性，請選擇 **Exclude** (排除)，然後指定 `FlightNum`。

1. 對於 **Anonymization** (匿名化)，請指定 `Dest`。

1. 選擇**建立**。

1. 選擇 **Mapped users** (已映射的使用者)、**Manage mapping** (管理映射)。新增 `LimitedUserRole` 的 Amazon Resource Name (ARN) 作為外部身分，然後選擇 **Map** (映射)。

1. 傳回角色清單，然後選擇 **opensearch\$1dashboards\$1user**。選擇 **Mapped users** (已映射的使用者)、**Manage mapping** (管理映射)。新增 `LimitedUserRole` 的 ARN 作為後端角色，並選擇 **Map** (映射)。

## 步驟 5：測試許可
<a name="fgac-iam-test"></a>

當您的角色映射正確時，您可以有限使用者身分登入並測試許可。

1. 在新的私有瀏覽器視窗中，導覽至網域的 OpenSearch Dashboards URL，使用 `limited-user` 憑證登入，然後選擇 **Explore on my own** (自行探索)。

1. 移至 **Dev Tools** (開發工具) 並執行預設搜尋：

   ```
   GET _search
   {
     "query": {
       "match_all": {}
     }
   }
   ```

   請注意許可錯誤。`limited-user` 沒有執行全叢集搜尋的許可。

1. 執行另一項搜尋：

   ```
   GET opensearch_dashboards_sample_data_flights/_search
   {
     "query": {
       "match_all": {}
     }
   }
   ```

   請注意，所有相符文件的都有值為 `true` 的 `FlightDelay` 欄位、匿名化的 `Dest` 欄位，並不包含 `FlightNum` 欄位。

1. 在原始瀏覽器視窗中，以 `master-user` 的身分登入、選擇 **Dev Tools (開發工具)**，然後執行相同的搜尋。注意許可、命中數、相符文件以及所包含欄位中的差異。

# 教學課程：使用內部使用者資料庫和 HTTP 基本身分驗證設定網域
<a name="fgac-http-auth"></a>

本教學課程涵蓋另一種熱門的[精細存取控制](fgac.md)使用案例：內部使用者資料庫中的主要使用者，以及適用於 OpenSearch Dashboards 的 HTTP 基本身分驗證。然後，主要使用者可以登入 OpenSearch Dashboards、建立內部使用者、將使用者對應至角色，並使用精細存取控制來限制使用者的許可。

在本教學課程中，您會完成下列步驟：

1. [使用主要使用者建立網域](#fgac-http-auth-domain)

1. [在 OpenSearch Dashboards 中設定內部使用者](#fgac-http-auth-dashboards-user)

1. [在 OpenSearch Dashboards 中對應角色](#fgac-http-auth-dashboards-map)

1. [測試許可](#fgac-http-auth-test)

## 步驟 1：建立網域
<a name="fgac-http-auth-domain"></a>

導覽至位於 https：//[https://console.aws.amazon.com/aos/home/](https://console.aws.amazon.com/aos/home/) 的 Amazon OpenSearch Service 主控台，並使用[下列設定建立網域](createupdatedomains.md)：
+ OpenSearch 1.0 或更高版本，或者 Elasticsearch 7.9 或更高版本
+ 公開存取
+ 使用內部使用者資料庫 (本教學中的其餘部分稱為 `TheMasterUser`) 中的主要使用者進行精細存取控制。
+ Dashboards 的 Amazon Cognito 身分驗證*已停用*
+ 以下存取政策：

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

****  

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

------
+ 要求所有前往網域的流量皆使用 HTTPS
+ 節點對節點加密
+ 靜態資料加密

## 步驟 2：在 OpenSearch Dashboards 中建立內部使用者
<a name="fgac-http-auth-dashboards-user"></a>

現在您已擁有網域，您可以登入 OpenSearch Dashboards 並建立內部使用者。

1. 返回 OpenSearch Service 主控台，然後導覽至您所建立網域的 OpenSearch Dashboards URL。URL 遵循此格式：`domain-endpoint/_dashboards/`。

1. 使用 登入`TheMasterUser`。

1. 選擇 **Add sample data** (新增範例資料)，並新增範例航班資料。

1. 在左側導覽窗格中，選擇**安全性**、**內部使用者**、**建立內部使用者**。

1. 命名使用者 `new-user`，然後指定密碼。然後選擇 **Create (建立)**。

## 步驟 3：在 OpenSearch Dashboards 中映射角色
<a name="fgac-http-auth-dashboards-map"></a>

現在您的使用者已設定完成，您可以將使用者映射至角色。

1. 停留在 OpenSearch Dashboards **的安全**區段，然後選擇**角色**、**建立角色**。

1. 將角色命名為 `new-role`。

1. 對於**索引**，請指定索引模式的 `opensearch_dashboards_sample_data_fli*`(`kibana_sample_data_fli*`在 Elasticsearch 網域上）。

1. 對於動作群組，請選擇 **read** (讀取)。

1. 對於 **Document level security** (文件層級安全)，指定以下查詢：

   ```
   {
     "match": {
       "FlightDelay": true
     }
   }
   ```

1. 如需欄位層級的安全性，請選擇 **Exclude** (排除)，然後指定 `FlightNum`。

1. 對於 **Anonymization** (匿名化)，請指定 `Dest`。

1. 選擇**建立**。

1. 選擇 **Mapped users** (已映射的使用者)、**Manage mapping** (管理映射)。然後將 `new-user` 新增至 **Users** (使用者)，然後選擇 **Map** (映射)。

1. 傳回角色清單，然後選擇 **opensearch\$1dashboards\$1user**。選擇 **Mapped users** (已映射的使用者)、**Manage mapping** (管理映射)。然後將 `new-user` 新增至 **Users** (使用者)，然後選擇 **Map** (映射)。

## 步驟 4：測試許可
<a name="fgac-http-auth-test"></a>

當您的角色映射正確時，您可以有限使用者身分登入並測試許可。

1. 在新的私有瀏覽器視窗中，導覽至網域的 OpenSearch Dashboards URL，使用 `new-user` 憑證登入，然後選擇 **Explore on my own** (自行探索)。

1. 移至 **Dev Tools** (開發工具) 並執行預設搜尋：

   ```
   GET _search
   {
     "query": {
       "match_all": {}
     }
   }
   ```

   請注意許可錯誤。`new-user` 沒有執行全叢集搜尋的許可。

1. 執行另一項搜尋：

   ```
   GET dashboards_sample_data_flights/_search
   {
     "query": {
       "match_all": {}
     }
   }
   ```

   請注意，所有相符文件的都有值為 `true` 的 `FlightDelay` 欄位、匿名化的 `Dest` 欄位，並不包含 `FlightNum` 欄位。

1. 在原始瀏覽器視窗中，以 `TheMasterUser` 的身分登入、選擇 **Dev Tools (開發工具)** 並執行相同的搜尋。注意許可、命中數、相符文件以及所包含欄位中的差異。

# Amazon OpenSearch Service 的合規驗證
<a name="compliance-validation"></a>

在多個 AWS 合規計劃中，第三方稽核人員會評估 Amazon OpenSearch Service 的安全與合規。這些計劃包括 SOC、PCI 和 HIPAA。

若您有合規性要求，請考慮使用任一版本的 OpenSearch 或 Elasticsearch 6.0 或更高版本。Elasticsearch 的早期版本不提供[靜態資料加密](encryption-at-rest.md)和[節點對節點加密](ntn.md)之組合，因此不可能符合您的需求。若對您的使用案例而言，[精細存取控制](fgac.md)很重要，也可以考慮使用任一版本的 OpenSearch 或 Elasticsearch 6.7 或更高版本。無論如何，在建立網域時選擇特定的 OpenSearch 或 Elasticsearch 版本，皆無法保證合規性。

若要了解 AWS 服務 是否在特定合規計劃範圍內，請參閱[AWS 服務 合規計劃範圍內](https://aws.amazon.com/compliance/services-in-scope/)然後選擇您感興趣的合規計劃。如需一般資訊，請參閱[AWS 合規計劃](https://aws.amazon.com/compliance/programs/)。

您可以使用 下載第三方稽核報告 AWS Artifact。如需詳細資訊，請參閱[下載報告 in AWS Artifact](https://docs.aws.amazon.com/artifact/latest/ug/downloading-documents.html)

您使用 時的合規責任 AWS 服務 取決於資料的機密性、您公司的合規目標，以及適用的法律和法規。如需使用 時合規責任的詳細資訊 AWS 服務，請參閱 [AWS 安全文件](https://docs.aws.amazon.com/security/)。

# Amazon CopenSearFront Service 的復原功能
<a name="disaster-recovery-resiliency"></a>

 AWS 全球基礎設施是以 AWS 區域 和 可用區域為基礎建置。 AWS 區域 提供多個實體隔離和隔離的可用區域，這些可用區域與低延遲、高輸送量和高備援聯網連接。透過可用區域，您所設計與操作的應用程式和資料庫，就能夠在可用區域之間自動容錯移轉，而不會發生中斷。可用區域的可用性、容錯能力和擴充能力，均較單一或多個資料中心的傳統基礎設施還高。

如需 AWS 區域 和可用區域的詳細資訊，請參閱 [AWS 全球基礎設施](https://aws.amazon.com/about-aws/global-infrastructure/)。

除了 AWS 全球基礎設施之外，OpenSearch Service 還提供數種功能，以協助支援您的資料彈性和備份需求：
+ [異地同步備份網域和複本碎片](managedomains-multiaz.md)
+ [自動和手動快照](managedomains-snapshots.md)

# Amazon OpenSearch Service 的 JWT 身分驗證和授權
<a name="JSON-Web-tokens"></a>

Amazon OpenSearch Service 現在可讓您使用 JSON Web Token (JWTs) 進行身分驗證和授權。JWTs是以 JSON 為基礎的存取字符，用於授予單一登入 (SSO) 存取。您可以在 OpenSearch Service 中使用 JWTs來建立單一登入字符，以驗證對 OpenSearch Service 網域的請求。若要使用 JWTs，您必須啟用精細存取控制，而且必須提供有效的 RSA 或 ECDSA PEM 格式公有金鑰。如需精細存取控制的詳細資訊，請參閱 [Amazon OpenSearch Service 中的精細存取控制](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/fgac.html)。

您可以使用 OpenSearch Service 主控台、 AWS Command Line Interface (AWS CLI) 或 AWS SDKs 來設定 JSON Web 權杖。

## 考量事項
<a name="consider"></a>

將 JWTs與 Amazon OpenSearch Service 搭配使用之前，您必須考慮下列事項：
+ 由於 RSA 公有金鑰的大小採用 PEM 格式，我們建議您使用 AWS 主控台來設定 JWT 身分驗證和授權。
+ 指定 JWTs 的主題和角色欄位時，您必須提供有效的使用者和角色，否則請求將被拒絕。
+ OpenSearch 2.11 是可用於 JWT 身分驗證的最早相容版本。

## 修改網域存取政策
<a name="modifying"></a>

您必須先更新網域存取政策，以允許 JWT 使用者存取網域，才能將網域設定為使用 JWT 身分驗證和授權。否則，所有傳入的 JWT 授權請求都會遭到拒絕。提供子資源 (/\$1) 完整存取權的建議網域存取政策為：

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

****  

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

------

## 設定 JWT 身分驗證和授權
<a name="configuration"></a>

您可以在網域建立程序期間或透過更新現有網域來啟用 JWT 身分驗證和授權。設定步驟會因您選擇的選項而略有不同。

下列步驟說明如何在 OpenSearch Service 主控台中設定 JWT 身分驗證和授權的現有網域：

1. 在**網域組態**下，導覽至 ** OpenSearch 的 JWT 身分驗證和授權**，選取**啟用 JWT 身分驗證和授權**。

1. 設定公有金鑰以用於您的網域。若要這樣做，您可以上傳 PEM 檔案、包含公有金鑰，或手動輸入。
**注意**  
如果上傳或輸入的金鑰無效，則會在指定問題的文字方塊上方顯示警告。

1. （選用） 在其他設定下，您可以設定下列選用欄位
   + **主旨金鑰** — 您可以保留此欄位空白，以使用 JWTs的預設`sub`金鑰。
   +  **角色金鑰** — 您可以保留此欄位空白，以使用 JWTs的預設`roles`金鑰。

   完成變更後，請儲存您的網域。

## 使用 JWT 傳送測試請求
<a name="test"></a>

使用指定的主旨和角色對建立新的 JWT 之後，您可以傳送測試請求。若要這樣做，請使用私有金鑰，透過建立 JWT 的工具簽署您的請求。OpenSearch Service 能夠透過驗證此簽章來驗證傳入請求。

**注意**  
如果您為 JWT 指定了自訂主體金鑰或角色金鑰，則必須為 JWT 使用正確的宣告名稱。

以下是如何使用 JWT 字符透過網域的搜尋端點存取 OpenSearch Service 的範例：

```
curl -XGET "$search_endpoint" -H "Authorization: Bearer <JWT>"
```

### 設定 JWT 身分驗證和授權 (AWS CLI)
<a name="cli"></a>

如果網域存在，以下 AWS CLI 命令會啟用 OpenSearch 的 JWT 身分驗證和授權：

```
aws opensearch update-domain-config --domain-name <your_domain_name> --advanced-security-options '{"JWTOptions":{"Enabled":true, "PublicKey": "<your_public_key>", "SubjectKey": "<your_subject_key>", "RolesKey": "<your_roles_key>"}}'
```

#### 設定 JWT 身分驗證和授權 （透過 API 設定）
<a name="API"></a>

下列對組態 API 的請求會在現有網域上啟用 OpenSearch 的 JWT 身分驗證和授權：

```
POST https://es.us-east-1.amazonaws.com/2021-01-01/opensearch/domain/my-domain/config
{
  "AdvancedSecurityOptions": {
    "JWTOptions": {
      "Enabled": true,
      "PublicKey": "public-key",
      "RolesKey": "optional-roles-key",
      "SubjectKey": "optional-subject-key"
   }  
  }
}
```

##### 產生金鑰對
<a name="gen-key-pair"></a>

為了為您的 OpenSearch 網域設定 JWTs，您需要以隱私權增強郵件 (PEM) 格式提供公有金鑰。Amazon OpenSearch Service 目前在使用 JWTs時支援兩種非對稱加密演算法：RSA 和 ECDSA。

若要使用通用 openssl 程式庫建立 RSA 金鑰對，請遵循下列步驟：

1. `openssl genrsa -out privatekey.pem 2048`

1. `openssl rsa -in privatekey.pem -pubout -out publickey.pem`

在此範例中， `publickey.pem` 檔案包含用於 Amazon OpenSearch Service 的公有金鑰，而 `privatekey.pem`包含用於簽署傳送至服務的 JWTs的私有金鑰。此外，如果您需要私有金鑰來產生 JWTs，您可以選擇將私有金鑰轉換為常用`pkcs8`格式。

如果您使用上傳按鈕將 PEM 檔案直接新增至主控台，則檔案必須具有`.pem`副檔名、其他副檔名，例如 `.crt``.cert`或 目前`.key`不受支援。

# Amazon OpenSearch Service 中的基礎設施安全性
<a name="infrastructure-security"></a>

作為受管服務， 受到 AWS 全球網路安全的保護。如需 AWS 安全服務以及如何 AWS 保護基礎設施的資訊，請參閱[AWS 雲端安全](https://aws.amazon.com/security/)。若要使用基礎設施安全的最佳實務設計您的 AWS 環境，請參閱*安全支柱 AWS Well-Architected Framework* 中的[基礎設施保護](https://docs.aws.amazon.com/wellarchitected/latest/security-pillar/infrastructure-protection.html)。

您可以使用 AWS 發佈的 API 呼叫，透過網路存取 。使用者端必須支援下列專案：
+ Transport Layer Security (TLS)。我們需要 TLS 1.2 並建議使用 TLS 1.3。
+ 具備完美轉送私密(PFS)的密碼套件，例如 DHE (Ephemeral Diffie-Hellman)或 ECDHE (Elliptic Curve Ephemeral Diffie-Hellman)。現代系統(如 Java 7 和更新版本)大多會支援這些模式。

您可以使用 AWS 發佈的 API 呼叫，透過網路存取 OpenSearch Service 組態 API。若要設定接受的最低所需 TLS 版本，請在網域端點選項中指定 `TLSSecurityPolicy` 值：

```
aws opensearch update-domain-config --domain-name my-domain --domain-endpoint-options '{"TLSSecurityPolicy": "Policy-Min-TLS-1-2-2019-07"}'
```

如需詳細資訊，請參閱 [AWS CLI 命令參考](https://docs.aws.amazon.com/cli/latest/reference/opensearch/update-domain-config.html)。

根據您的網域組態，您可能也需要簽署對 OpenSearch API 的請求。如需詳細資訊，請參閱[提出並簽署 OpenSearch Service 請求](managedomains-signing-service-requests.md)。

OpenSearch Service 支援公有存取網域 (可從任何網際網路連線裝置收到請求) 和 [VPC 存取網域](vpc.md) (獨立於公有網際網路)。

# 使用 OpenSearch Service 受管 VPC 端點 (AWS PrivateLink) 存取 Amazon OpenSearch Service
<a name="vpc-interface-endpoints"></a>

您可以設定 OpenSearch Service 受管 VPC 端點 （由 提供支援） 來存取 Amazon OpenSearch Service 網域 AWS PrivateLink。這些端點可在 VPC 與 Amazon OpenSearch Service 之間建立私有連線。您可以像在 VPC 中一樣存取 OpenSearch Service VPC 網域，無需使用網際網路閘道、NAT 裝置、VPN 連接或 Direct Connect 連線。VPC 中的執行個體無需公有 IP 地址，即可存取 OpenSearch Service。

您可以將 OpenSearch Service 網域設定為公開在相同 VPC、不同 VPC 或不同 AWS 帳戶內的公有或私有子網路上執行的其他端點。這讓您可以新增額外的安全性層，以存取您的網域 (無論網域在何處執行)，而無需管理基礎架構。下圖說明相同 VPC 內的 OpenSearch Service 受管 VPC 端點：

![\[VPC diagram showing Amazon PrivateLink in public subnet connecting to OpenSearch Service in private subnet.\]](http://docs.aws.amazon.com/zh_tw/opensearch-service/latest/developerguide/images/Privatelink-Diagram.png)


您可以建立由 AWS PrivateLink提供支援的 OpenSearch Service 受管*介面 VPC 端點*，以建立此私有連線。我們會在您為介面 VPC 端點啟用的每個子網路中建立端點網路介面。這些是服務受管網路介面，可作為目的地為 OpenSearch Server 之流量的進入點。標準[AWS PrivateLink 介面端點定價](https://aws.amazon.com/privatelink/pricing/)適用於依 計費的 OpenSearch Service 受管 VPC 端點 AWS PrivateLink。

您可以為執行所有版本的 OpenSearch 和舊版 Elasticsearch 的網域建立 VPC 端點。如需詳細資訊，請參閱《*AWS PrivateLink 指南*》中的「[透過 AWS PrivateLink存取 AWS 服務](https://docs.aws.amazon.com/vpc/latest/privatelink/privatelink-access-aws-services.html)」。

## OpenSearch Service 的考量事項與限制
<a name="vpc-endpoint-considerations"></a>

設定 OpenSearch Service 的介面 VPC 端點之前，請先檢閱《 *AWS PrivateLink 指南*》中的[使用介面 VPC 端點存取 AWS 服務](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html)。

使用 OpenSearch Service 受管 VPC 端點時，請考量下列事項：
+ 您僅可使用介面 VPC 端點來連線至 [VPC 網域](vpc.md)。不支援公有網域。
+ VPC 端點只能連線至相同 AWS 區域內的網域。
+ HTTPS 是 VPC 端點唯一支援的通訊協定。不允許使用 HTTP。
+ OpenSearch Server 支援透過介面 VPC 端點呼叫所有[支援的 OpenSearch API 操作](supported-operations.md)。
+ 每個帳戶最多可設定 50 個端點，每個網域最多可設定 10 個端點。單一網域最多可有 10 個[授權的主體](#vpc-endpoint-access)。
+ 您目前無法使用 AWS CloudFormation 建立介面 VPC 端點。
+ 您僅可透過 OpenSearch Service 主控台或使用 [OpenSearch Service API](https://docs.aws.amazon.com/opensearch-service/latest/APIReference/Welcome.html) 建立介面 VPC 端點。您無法使用 Amazon VPC 主控台為 OpenSearch Service 建立介面 VPC 端點。
+ OpenSearch Service 受管 VPC 端點無法從網際網路存取。在路由表和安全群組許可的情況下，OpenSearch Service 受管 VPC 端點只能在佈建端點的 VPC 或與佈建端點之 VPC 對等的任何 VPC 內存取。
+ OpenSearch Service 不支援 VPC 端點政策。您可以將安全群組與端點網路介面相關聯，以控制透過介面 VPC 端點傳輸至 OpenSearch Server 的流量。
+ 您的[服務連結角色](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/slr.html)必須位於您用來建立 VPC 端點的相同 AWS 帳戶中。
+ 若要建立、更新和刪除 OpenSearch Service VPC 端點，除了 Amazon OpenSearch Service 許可之外，您還必須擁有下列 Amazon EC2 許可： OpenSearch 
  + `ec2:CreateVpcEndpoint`
  + `ec2:DescribeVpcEndpoints`
  + `ec2:ModifyVpcEndpoint`
  + `ec2:DeleteVpcEndpoints`
  + `ec2:CreateTags`
  + `ec2:DescribeTags`
  + `ec2:DescribeSubnets`
  + `ec2:DescribeSecurityGroups`
  + `ec2:DescribeVpcs`

**注意**  
目前，您無法將 VPC 端點建立限制為 OpenSearch Service。我們正在努力在未來的更新中實現這一點。

## 提供對網域的存取
<a name="vpc-endpoint-access"></a>

如果您想要存取網域的 VPC 位於另一個 VPC 中 AWS 帳戶，您必須先從擁有者的帳戶授權，才能建立介面 VPC 端點。

**允許另一個 中的 VPC AWS 帳戶 存取您的網域**

1. 開啟位於 https：//[https://console.aws.amazon.com/aos/home/](https://console.aws.amazon.com/aos/home/) 的 Amazon OpenSearch Service 主控台。

1. 在導覽窗格中選擇 **Domains** (網域)，然後開啟您要提供存取權的網域。

1. 前往 **VPC endpoints** (VPC 端點) 索引標籤，其中會顯示可存取您網域的帳戶和對應 VPC。

1. 選擇 **Authorize principal** (授權主體)。

1. 輸入將存取您的網域的帳戶 AWS 帳戶 ID。此步驟會授權指定帳戶針對網域建立 VPC 端點。

1. 選擇 **Authorize** (授權)。

## 為 VPC 網域建立介面 VPC 端點
<a name="vpc-endpoint-create"></a>

您可以使用 OpenSearch Service 主控台或 AWS Command Line Interface () 為 OpenSearch Service 建立介面 VPC 端點AWS CLI。

**建立 OpenSearch Server 網域的介面 VPC 端點**

1. 開啟位於 https：//[https://console.aws.amazon.com/aos/home/](https://console.aws.amazon.com/aos/home/) 的 Amazon OpenSearch Service 主控台。

1. 在左側導覽窗格中選擇 **VPC endpoints** (VPC 端點)。

1. 選擇**建立端點**。

1. 選取是否要連接目前 中的網域 AWS 帳戶 或其他 AWS 帳戶。

1. 選取您與此端點連線的網域。如果網域位於目前的 中 AWS 帳戶，請使用下拉式清單選擇網域。如果網域位於不同的帳戶中，請輸入要連線之網域的 Amazon Resource Name (ARN)。若要選擇不同帳戶中的網域，擁有者需[為您提供對網域的存取權](#vpc-endpoint-access)。

1. 對於 **VPC**，選取您將從中存取 OpenSearch Service 的 VPC。

1. 對於 **Subnets** (子網路)，選取您將從中存取 OpenSearch Service 的一個或多個子網路。

1. 對於 **Security group** (安全群組)，選取要與端點網路介面建立關聯的安全群組。這是一個關鍵步驟，其中您需限制正授權進入端點之傳入流量的連接埠、通訊協定和來源。安全群組規則必須允許將使用 VPC 端點與 OpenSearch Service 通訊的資源，以便與端點網路介面通訊。

1. 選擇**建立端點**。端點應會在 2-5 分鐘內進入作用中狀態。

## 使用 OpenSearch Service 受管 VPC 端點 (使用組態 API)
<a name="vpc-endpoint-api"></a>

使用下列 API 操作來建立和管理 OpenSearch Service 受管 VPC 端點。
+ [CreateVpcEndpoint](https://docs.aws.amazon.com/opensearch-service/latest/APIReference/API_CreateVpcEndpoint.html)
+ [ListVpcEndpoints](https://docs.aws.amazon.com/opensearch-service/latest/APIReference/API_ListVpcEndpoints.html)
+ [UpdateVpcEndpoint](https://docs.aws.amazon.com/opensearch-service/latest/APIReference/API_UpdateVpcEndpoint.html)
+ [DeleteVpcEndpoint](https://docs.aws.amazon.com/opensearch-service/latest/APIReference/API_DeleteVpcEndpoint.html)

使用下列 API 操作來管理端點對 VPC 網域的存取：
+ [AuthorizeVpcEndpointAccess](https://docs.aws.amazon.com/opensearch-service/latest/APIReference/API_AuthorizeVpcEndpointAccess.html)
+ [ListVpcEndpointAccess](https://docs.aws.amazon.com/opensearch-service/latest/APIReference/API_ListVpcEndpointAccess.html)
+ [ListVpcEndpointsForDomain](https://docs.aws.amazon.com/opensearch-service/latest/APIReference/API_ListVpcEndpointsForDomain.html)
+ [RevokeVpcEndpointAccess](https://docs.aws.amazon.com/opensearch-service/latest/APIReference/API_RevokeVpcEndpointAccess.html)

# OpenSearch Dashboards 的 SAML 身分驗證
<a name="saml"></a>

OpenSearch Dashboards 的 SAML 身分驗證可讓您使用現有身分提供者，以便在執行 OpenSearch 或 Elasticsearch 6.7 或更新版本的 Amazon OpenSearch Service 網域上提供 Dashboards 的單一登入 (SSO)。若要使用 SAML 身分驗證，您必須啟用[精細存取控制](fgac.md)。

不是透過 [Amazon Cognito](cognito-auth.md) 或[內部使用者資料庫](fgac.md#fgac-dashboards)進行身分驗證，OpenSearch Dashboards 的 SAML 身分驗證可讓您使用第三方身分提供者來登入 Dashboards、管理精細存取控制、搜尋您的資料，以及建置視覺效果。OpenSearch Service 支援使用 SAML 2.0 標準的提供者，例如 Okta、Keycloak、Active Directory Federation Services (ADFS)、Auth0 和 AWS IAM Identity Center。

Dashboards 的 SAML 身分驗證僅適用於透過 web 瀏覽器存取 OpenSearch Dashboards。您的 SAML 憑證*不能*讓您對 OpenSearch 或 Dashboards API 發出直接 HTTP 請求。

## SAML 組態概觀
<a name="saml-overview"></a>

本文件假設您擁有現有的身分提供者並且熟悉它。我們無法為您的確切供應商提供詳細的設定步驟，僅適用於您的 OpenSearch Service 網域。

OpenSearch Dashboards 登入流程可採用以下兩種形式之一：
+ **服務供應商 (SP) 已啟動**：您瀏覽至 Dashboards (例如 `https://my-domain.us-east-1.es.amazonaws.com/_dashboards`)，它會將您重新引導到登入畫面。登入後，身分提供者會將您重新引導至 Dashboards。
+ **身分提供者 (IdP) 已啟動**：瀏覽至身分提供者，登入並從應用程式目錄中選擇 OpenSearch Dashboards。

OpenSearch Service 提供兩個單一登入 URL，即 SP 啟動和 IdP 啟動，但您只需要一個，即符合您想要的 OpenSearch Dashboards 登入流程即可。

無論您使用哪種身分驗證類型，目標是透過身分提供者登入，並接收包含您的使用者名稱 (必要) 和任何[後端角色](fgac.md#fgac-concepts) (選用，但建議使用) 的 SAML 聲明。此資訊允許[精細存取控制](fgac.md)以便將許可指派給 SAML 使用者。在外部身分提供者中，後端角色通常稱為「角色」或「群組」。

## 考量事項
<a name="saml-considerations"></a>

設定 SAML 身分驗證時請考量下列事項：
+ 由於 IdP 中繼資料檔案的大小，強烈建議使用 AWS 主控台來設定 SAML 身分驗證。
+ 網域一次只支援一個 Dashboards 身分驗證方法。如果您啟用 [OpenSearch Dashboards 的 Amazon Cognito 身分驗證](cognito-auth.md)，則必須先將其停用才可啟用 SAML 身分驗證。
+ 如果您搭配 SAML 使用網路負載平衡器，您必須先建立自訂端點。如需詳細資訊，請參閱[為 Amazon OpenSearch Service 建立自訂端點](customendpoint.md)。
+ 在非 IAM 身分的情況下，服務控制政策 (SCP) 將不適用或評估 （例如 Amazon OpenSearch Serverless & SAML 中的 SAML 和 Amazon OpenSearch Service 的基本內部使用者授權）。

## VPC 網域的 SAML 身分驗證
<a name="saml-vpc"></a>

SAML 不需要身分提供者和服務供應商之間的直接通訊。因此，即使您的 OpenSearch 網域託管在私有 VPC 中，只要您的瀏覽器能夠與您的 OpenSearch 叢集和身分提供者通訊，則您仍可以使用 SAML。您的瀏覽器本質上充當身分提供者和服務供應商之間的媒介。如需有關解釋 SAML 身分驗證流程的實用圖表，請參閱 [Okta 文件](https://developer.okta.com/docs/concepts/saml/#planning-for-saml)。

## 修改網域存取政策
<a name="saml-domain-access"></a>

在設定 SAML 身分驗證之前，您必須更新網域存取政策，以允許 SAML 使用者存取網域。否則，您將看到存取遭拒錯誤。

我們建議您採用下列[網域存取政策](ac.md#ac-types-resource)，該政策提供對網域上子資源 (`/*`) 的完整存取權：

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

****  

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

------

若要讓政策更具限制性，您可以將 IP 地址條件新增至政策。此情況只會限制對指定 IP 地址範圍或子網路的存取。例如，下列政策僅允許從 192.0.2.0/24 子網路進行存取：

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": [
        "es:ESHttp*"
      ],
      "Condition": {
        "IpAddress": {
          "aws:SourceIp": [
            "192.0.2.0/24"
          ]
        }
      },
      "Resource": "arn:aws:es:us-east-1:111122223333:domain/domain-name/*"
    }
  ]
}
```

------

**注意**  
開放網域存取政策要求在您的網域上啟用精細存取控制，否則您會看到下列錯誤：  
`To protect domains with public access, a restrictive policy or fine-grained access control is required.`  
如果您的主要使用者或內部使用者已設定強式密碼，則從安全角度而言，在使用精細存取控制時保持政策開啟可能是可接受的。如需詳細資訊，請參閱[Amazon OpenSearch Service 中的精細存取控制](fgac.md)。

## 設定 SP 或 IdP 啟動的身分驗證
<a name="saml-enable-sp-or-idp"></a>

這些步驟說明如何透過 OpenSearch Dashboards 的 SP 啟動的*或* IdP 啟動的身分驗證來啟用 SAML 身分驗證。如需了解啟用兩者所需的額外步驟，請參閱[同時啟用 SP 和 IdP 啟動的身分驗證](#saml-idp-with-sp)。

### 步驟 1：啟用 SAML 身分驗證
<a name="saml-enable"></a>

您可以在網域建立期間啟用 SAML 身分驗證，或在現有網域上選擇 **Actions** (動作)、**Edit security configuration** (編輯安全組態)來啟用 SAML 身分驗證。根據您選擇的動作，以下步驟略有不同。

在網域組態中，於 **SAML authentication for OpenSearch Dashboards/Kibana** (OpenSearch Dashboards/Kibana 的 SAML 身分驗證) 下，選取 **Enable SAML authentication** (啟用 SAML 身分驗證)。

### 步驟 2：設定身分提供者
<a name="saml-configure-idp"></a>

根據設定 SAML 身分驗證的時間，執行下列步驟。

#### 如果您正在建立新網域
<a name="saml-configure-new"></a>

如果您正在建立新網域，OpenSearch Service 還無法產生服務提供者實體 ID 或 SSO URL。身分提供者需要這些值才能正確啟用 SAML 身分驗證，但只有在建立網域之後才能產生這些值。若要在網域建立期間處理此相互依存性，您可以在 IdP 組態中提供臨時值，以產生必要的中繼資料，然後在網域處於作用中狀態時加以更新。

如果您使用的是[自訂端點](customendpoint.md)，則可以推斷 URL 為何。例如，如果自訂端點是 `www.custom-endpoint.com`，服務提供者實體 ID 將會是 `www.custom-endpoint.com`，IdP 起始的 SSO URL 將會是 `www.custom-endpoint.com/_dashboards/_opendistro/_security/saml/acs/idpinitiated`，並且 SP 起始的 SSO URL 將會是 `www.custom-endpoint.com/_dashboards/_opendistro/_security/saml/acs`。在建立網域之前，您可以使用這些值來設定身分提供者。如需範例，請參閱下一區段。

**注意**  
您不能使用雙堆疊端點登入，因為 HTTP 請求的 FQDN 與 SAML 請求的 FQDN 不同。如果您想要使用雙堆疊端點登入，OpenSearch 管理員將需要設定自訂端點，並將 CNAME 值設定為雙堆疊端點。

如果您未使用自訂端點，可以在 IdP 中輸入*臨時*值以產生所需的中繼資料，然後在網域處於作用中後加以更新。

例如，在 Okta 中，您可以將 `https://temp-endpoint.amazonaws.com` 輸入 **Single sign on URL** (單一登入 URL) 和 **Audience URI (SP Entity ID)** (對象 URI (SP 實體 ID)) 欄位，如此可產生中繼資料。然後，在網域處於作用中狀態後，您可以從 OpenSearch Service 中擷取正確的值並在 Okta 中加以更新。如需說明，請參閱[步驟 6：更新 IdP URL](#saml-update-urls)。

#### 如果您正在編輯現有網域
<a name="saml-configure-existing"></a>

如果您要在現有網域上啟用 SAML 身分驗證，請複製服務提供者實體 ID 和其中一個 SSO URL。如需有關使用哪個 URL 的指引，請參閱 [SAML 組態概觀](#saml-overview)。

![\[Service provider entity ID and SSO URLs for SAML authentication configuration.\]](http://docs.aws.amazon.com/zh_tw/opensearch-service/latest/developerguide/images/SAML.png)


使用這些值來設定身分提供者。這是程序中最複雜的部分，不幸的是，術語和步驟因供應商而千差萬別。請咨詢供應商文件。

例如，在 Okta 中，您可以建立 SAML 2.0 Web 應用程式。對於 **Single sign on URL** (單一登入 URL)，指定 SSO URL。對於**對象 URI (SP 實體 ID)**，指定 SP 實體 ID。

Okta 擁有使用者和群組，而不是使用者和後端角色。對於 **Group Attribute Statements** (群組屬性陳述式)，我們建議將 `role` 新增至 **Name** (名稱) 欄位，將常規表達式 `.+` 新增至 **Filter** (篩選條件) 欄位。此陳述式會告訴 Okta 身分提供者在使用中身分驗證之後，包含 SAML 聲明 `role` 欄位下的所有使用者群組。

在 IAM Identity Center 中，您將 SP 實體 ID 指定為 **Application SAML 對象**。您也需要指定下列[屬性映射](https://docs.aws.amazon.com/singlesignon/latest/userguide/attributemappingsconcept.html)： `Subject=${user:subject}:format=unspecified`和 `Role=${user:groups}:format=uri`。

在 Auth0 中，您可以建立一般 Web 應用程式並啟用 SAML 2.0 附加元件。在 Keycloak 中，您可以建立用戶端。

### 步驟 3：匯入 IdP 中繼資料
<a name="saml-import-metadata"></a>

設定身分提供者之後，會產生 IdP 中繼資料檔案。此 XML 檔案包含提供者的相關資訊，例如 TLS 憑證、單一登入端點以及身分提供者的實體 ID。

複製 IdP 中繼資料檔案內容，然後貼至 OpenSearch Service 主控台的 **Metadata from IdP** (來自 IdP 的中繼資料) 欄位。或者，選擇 **Import from XML file** (從 XML 檔案匯入)，然後上傳檔案。中繼資料檔案如下所示：

```
<?xml version="1.0" encoding="UTF-8"?>
<md:EntityDescriptor entityID="entity-id" xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata">
  <md:IDPSSODescriptor WantAuthnRequestsSigned="false" protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
    <md:KeyDescriptor use="signing">
      <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
        <ds:X509Data>
          <ds:X509Certificate>tls-certificate</ds:X509Certificate>
        </ds:X509Data>
      </ds:KeyInfo>
    </md:KeyDescriptor>
    <md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified</md:NameIDFormat>
    <md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress</md:NameIDFormat>
    <md:SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="idp-sso-url"/>
    <md:SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="idp-sso-url"/>
  </md:IDPSSODescriptor>
</md:EntityDescriptor>
```

### 步驟 4：設定 SAML 欄位
<a name="saml-configure-fields"></a>

輸入 IdP 中繼資料之後，請在 OpenSearch Service 主控台中設定下列其他欄位：
+ **IdP entity ID** (IdP 實體 ID) – 從中繼資料檔案中複製 `entityID` 屬性的值，然後貼至此欄位。許多身分提供者也會將此值顯示為組態後摘要的一部分。有些供應商稱之為「發行者」。
+ **SAML master username** (SAML 主要使用者名稱) 和 **SAML master backend role** (SAML 主要後端角色) – 您指定的使用者和/或後端角色會收到叢集完整許可，相當於[新主要使用者](fgac.md#fgac-more-masters)，但只能在 OpenSearch Dashboards 中使用這些許可。

  例如，在 Okta 中，您可能擁有屬於群組 `admins` 的使用者 `jdoe`。如果您將 `jdoe` 新增到 **SAML 主要使用者名稱**欄位，只有該使用者會收到完整許可。如果您將 `admins` 新增到 SAML 主要後端角色欄位中，屬於 `admins` 群組的任何使用者都會收到完整許可。
**注意**  
SAML 聲明的內容必須完全符合您用於 SAML 主要使用者名稱和 SAML 主要角色的字串。某些身分供應商會在其使用者名稱之前新增字首，這可能會導致難以診斷的不相符。在身分提供者使用者介面中，您可能會看到 `jdoe`，但 SAML 聲明可能包含 `auth0|jdoe`。永遠使用 SAML 聲明中的字串。

許多身分提供者可讓您在設定程序期間檢視範例聲明，諸如 [SAML-tracer](https://addons.mozilla.org/en-US/firefox/addon/saml-tracer/) 等工具可以幫助您檢查和疑難排解真實聲明的內容。聲明看起來像這樣：

```
<?xml version="1.0" encoding="UTF-8"?>
<saml2:Assertion ID="id67229299299259351343340162" IssueInstant="2020-09-22T22:03:08.633Z" Version="2.0"
  xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion">
  <saml2:Issuer Format="urn:oasis:names:tc:SAML:2.0:nameid-format:entity">idp-issuer</saml2:Issuer>
  <saml2:Subject>
    <saml2:NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified">username</saml2:NameID>
    <saml2:SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
      <saml2:SubjectConfirmationData NotOnOrAfter="2020-09-22T22:08:08.816Z" Recipient="domain-endpoint/_dashboards/_opendistro/_security/saml/acs"/>
    </saml2:SubjectConfirmation>
  </saml2:Subject>
  <saml2:Conditions NotBefore="2020-09-22T21:58:08.816Z" NotOnOrAfter="2020-09-22T22:08:08.816Z">
    <saml2:AudienceRestriction>
      <saml2:Audience>domain-endpoint</saml2:Audience>
    </saml2:AudienceRestriction>
  </saml2:Conditions>
  <saml2:AuthnStatement AuthnInstant="2020-09-22T19:54:37.274Z">
    <saml2:AuthnContext>
      <saml2:AuthnContextClassRef>urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport</saml2:AuthnContextClassRef>
    </saml2:AuthnContext>
  </saml2:AuthnStatement>
  <saml2:AttributeStatement>
    <saml2:Attribute Name="role" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified">
      <saml2:AttributeValue
        xmlns:xs="http://www.w3.org/2001/XMLSchema"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">GroupName Match Matches regex ".+" (case-sensitive)
      </saml2:AttributeValue>
    </saml2:Attribute>
  </saml2:AttributeStatement>
</saml2:Assertion>
```

### 步驟 5：(選用) 設定其他設定
<a name="saml-additional-settings"></a>

在 **Additional settings** (其他設定) 下，設定下列選用欄位：
+ **Subject key** (主體金鑰)– 您可以將此欄位留空，將 SAML 聲明的 `NameID` 元素用於使用者名稱。如果您的聲明不使用此標準元素，而是將使用者名稱作為自訂屬性，請在此處指定該屬性。
+ **Roles key** (角色金鑰)– 如果您想要使用後端角色 (建議使用)，請在此欄位中從聲明中指定屬性，例如 `role` 或 `group`。這是 [SAML-tracer](https://addons.mozilla.org/en-US/firefox/addon/saml-tracer/) 等工具可以提供協助的另一種情況。
+ **Session time to live** (工作階段存留時間) – 依預設，OpenSearch Dashboards 會在 24 小時後將使用者登出。您可以透過指定新值，將此值設定為 60 至 1,440 分鐘 (24 小時) 之間的任何數字。

如果您對於組態感到滿意，請儲存網域。

### 步驟 6：更新 IdP URL
<a name="saml-update-urls"></a>

如果您[在建立網域時啟用 SAML 身分驗證](#saml-configure-new)，則必須在 IdP 中指定臨時 URL，才能產生 XML 中繼資料檔案。網域狀態變更為 `Active` 後，您可以取得正確的 URL 並修改 IdP。

若要擷取 URL，請選取網域並選擇 **Actions** (動作)，**Edit security configuration** (編輯安全組態)。在 **SAML authentication for OpenSearch Dashboards/Kibana** (OpenSearch Dashboards/Kibana 的 SAML 身分驗證) 下，您可以找到正確的服務提供者實體 ID 和 SSO URL。複製這些值並使用其來設定身分提供者，取代您在步驟 2 中提供的臨時 URL。

### 步驟 7：將 SAML 使用者映射至角色
<a name="saml-map-users"></a>

當網域狀態為作用中且 IdP 的設定都正確無誤後，請瀏覽至 OpenSearch Dashboards。
+ 如果您選擇 SP 啟動的 URL，請導覽至 `domain-endpoint/_dashboards`。若要直接登入特定租用戶，您可以將 `?security_tenant=tenant-name` 附加至 URL。
+ 如果您選擇 IdP 啟動的 URL，請導覽至身分提供者的應用程式目錄。

在這兩種情況下，請以 SAML 主要使用者或屬於 SAML 主要後端角色的使用者身分登入。若要繼續步驟 7 的範例，請以 `jdoe` 或 `admins` 群組成員身分登入。

OpenSearch Dashboards 載入後，選擇 **Security** (安全性) 和 **Roles** (角色)。接著，[映射角色](fgac.md#fgac-mapping)以允許其他使用者存取 OpenSearch Dashboards。

例如，您可將信任的同事 `jroe` 映射到 `all_access` 和 `security_manager` 角色。您也可以將後端角色 `analysts` 映射到 `readall` 和 `opensearch_dashboards_user` 角色。

如果您偏好使用 API 而非 OpenSearch Dashboards，請參閱下列範例要求：

```
PATCH _plugins/_security/api/rolesmapping
[
  {
    "op": "add", "path": "/security_manager", "value": { "users": ["master-user", "jdoe", "jroe"], "backend_roles": ["admins"] }
  },
  {
    "op": "add", "path": "/all_access", "value": { "users": ["master-user", "jdoe", "jroe"], "backend_roles": ["admins"] }
  },
  {
    "op": "add", "path": "/readall", "value": { "backend_roles": ["analysts"] }
  },
  {
    "op": "add", "path": "/opensearch_dashboards_user", "value": { "backend_roles": ["analysts"] }
  }
]
```

## 同時設定 SP 和 IdP 啟動的身分驗證
<a name="saml-idp-with-sp"></a>

如果您要設定 SP 和 IdP 啟動的身分驗證，則必須透過身分提供者進行設定。例如，在 Okta 中，您可以執行下列步驟：

1. 在您的 SAML 應用程式中，移至 **General** (一般)、**SAML settings** (SAML 設定)。

1. 對於 **Single sign on URL** (單一登入 URL)，提供 *IdP* 啟動的 SSO URL。例如 `https://search-domain-hash/_dashboards/_opendistro/_security/saml/acs/idpinitiated`。

1. 啟用 **Allow this app to request other SSO URLs** (允許此應用程式請求其他 SSO URL)。

1. 在 **Requestable SSO URLs** (可請求的 SSO URL) 中，新增一個或多個 *SP* 啟動的 SSO URL。例如 `https://search-domain-hash/_dashboards/_opendistro/_security/saml/acs`。

## 設定 SAML 身分驗證 (AWS CLI)
<a name="saml-enable-cli"></a>

下列 AWS CLI 命令會在現有網域上啟用 OpenSearch Dashboards 的 SAML 身分驗證：

```
aws opensearch update-domain-config \
  --domain-name my-domain \
  --advanced-security-options '{"SAMLOptions":{"Enabled":true,"MasterUserName":"my-idp-user","MasterBackendRole":"my-idp-group-or-role","Idp":{"EntityId":"entity-id","MetadataContent":"metadata-content-with-quotes-escaped"},"RolesKey":"optional-roles-key","SessionTimeoutMinutes":180,"SubjectKey":"optional-subject-key"}}'
```

您必須轉義中繼資料 XML 中的所有引號和換行符號字元。例如，使用 `<KeyDescriptor use=\"signing\">\n`，而不是 `<KeyDescriptor use="signing">` 和換行符。如需有關使用 AWS CLI的詳細資訊，請參閱 [AWS CLI 命令參考](https://docs.aws.amazon.com/cli/latest/reference/)。

## 設定 SAML 身分驗證 (組態 API)
<a name="saml-enable-api"></a>

下列對組態 API 的請求會在現有網域上啟用 OpenSearch Dashboards 的 SAML 身分驗證：

```
POST https://es.us-east-1.amazonaws.com/2021-01-01/opensearch/domain/my-domain/config
{
  "AdvancedSecurityOptions": {
    "SAMLOptions": {
      "Enabled": true,
      "MasterUserName": "my-idp-user",
      "MasterBackendRole": "my-idp-group-or-role",
      "Idp": {
        "EntityId": "entity-id",
        "MetadataContent": "metadata-content-with-quotes-escaped"
      },
      "RolesKey": "optional-roles-key",
      "SessionTimeoutMinutes": 180,
      "SubjectKey": "optional-subject-key"
    }
  }
}
```

您必須轉義中繼資料 XML 中的所有引號和換行符號字元。例如，使用 `<KeyDescriptor use=\"signing\">\n`，而不是 `<KeyDescriptor use="signing">` 和換行符。如需有關使用組態 API 的詳細資訊，請參閱 [OpenSearch Service API reference](https://docs.aws.amazon.com/opensearch-service/latest/APIReference/API_Welcome.html) (OpenSearch Service API 參考)。

## SAML 疑難排解
<a name="saml-troubleshoot"></a>


| 錯誤 | 詳細資訊 | 
| --- | --- | 
| 您的請求：'*/some/path*' 不允許。 | 確認您為身分提供者提供了正確的 [SSO URL](#saml-enable) (步驟 3)。 | 
|  請提供有效的身分提供者中繼資料文件以啟用 SAML。  |  您的 IdP 中繼資料檔案不符合 SAML 2.0 標準。使用驗證工具檢查錯誤。  | 
|  SAML 組態選項在主控台中不可見。  |  更新至最新[服務軟體](service-software.md)。  | 
|  SAML 組態錯誤：擷取 SAML 組態時發生錯誤，請檢查您的設定。  |  此一般性錯誤的發生原因很多。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/opensearch-service/latest/developerguide/saml.html)  | 
|  缺少角色：此使用者沒有可用的角色，請聯絡您的系統管理員。  |  您已成功進行身分驗證，但 SAML 聲明中的使用者名稱和任何後端角色未映射至任何角色，因此沒有許可。這些映射區分大小寫。 您的系統管理員可以使用 SAML[-tracer 等工具驗證 SAML](https://addons.mozilla.org/en-US/firefox/addon/saml-tracer/) 聲明的內容，然後使用下列請求檢查您的角色映射： <pre>GET _plugins/_security/api/rolesmapping</pre>  | 
|  當您嘗試存取 OpenSearch Dashboards 時，您的瀏覽器會持續重新引導或收到 HTTP 500 錯誤。  |  如果您的 SAML 聲明包含大量的角色，總計約 1,500 個字元，就會發生這些錯誤。例如，如果您傳遞 80 個角色，平均長度為 20 個字元，您可能會超過 web 瀏覽器中 Cookie 的大小限制。從 OpenSearch 2.7 版開始，SAML 聲明支援最多 5000 個字元的角色。  | 
|  您無法登出 ADFS。  |  ADFS 要求簽署所有登出請求，而 OpenSearch Service 不支援這些請求。從 IdP 中繼資料檔案中移除 `<SingleLogoutService />`，以強制 OpenSearch Service 使用自己的內部登出機制。  | 
|  `Could not find entity descriptor for __PATH__.`  |  中繼資料 XML 中提供給 OpenSearch Service 的 IdP 實體 ID 與 SAML 回應中的實體 ID 不同。若要修正此問題，請確定它們相符。在您的網域上啟用 **CW 應用程式錯誤日誌**，以尋找偵錯 SAML 整合問題的錯誤訊息。  | 
|  `Signature validation failed. SAML response rejected.`  |  OpenSearch Service 無法使用中繼資料 XML 中提供的 IdP 憑證來驗證 SAML 回應中的簽章。這可能是手動錯誤，或者您的 IdP 已輪換其憑證。在透過 提供給 OpenSearch Service 的中繼資料 XML 中，從 IdP 更新最新的憑證 AWS 管理主控台。  | 
|  `__PATH__ is not a valid audience for this response.`  |  SAML 回應中的對象欄位與網域端點不相符。若要修正此錯誤，請更新 SP 對象欄位以符合您的網域端點。如果您已啟用自訂端點，對象欄位應與自訂端點相符。在您的網域上啟用 **CW 應用程式錯誤日誌**，以尋找偵錯 SAML 整合問題的錯誤訊息。  | 
|  您的瀏覽器在回應`Invalid Request Id`中收到 HTTP 400 錯誤與 。  |  如果您已使用 格式設定 IdP 起始的 URL，則通常會發生此錯誤`<DashboardsURL>/_opendistro/_security/saml/acs`。反之，請以 格式設定 URL`<DashboardsURL>/_opendistro/_security/saml/acs/idpinitiated`。  | 
|  在 收到回應，`__PATH__`而不是 `__PATH__`。  |  SAML 回應中的目的地欄位不符合下列其中一個 URL 格式： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/opensearch-service/latest/developerguide/saml.html) 根據您使用的登入流程 (SP 起始或 IdP 起始），在符合其中一個 OpenSearch URLs目的地欄位中輸入 。  | 
|  回應具有 `InResponseTo` 屬性，但`InResponseTo`預期不會。  |  您正在針對 SP 起始的登入流程使用 IdP 起始的 URL。請改用 SP 起始的 URL。  | 

## 停用 SAML 身分驗證
<a name="saml-disable"></a>

**若要停用 OpenSearch Dashboards (主控台) 的 SAML 身分驗證**

1. 選擇網域、**Actions** (動作) 和 **Edit security configuration** (編輯安全組態)。

1. 取消勾選 **Enable SAML authentication** (啟用 SAML 身分驗證)。

1. 選擇**儲存變更**。

1. 網域完成處理之後，請使用下列請求確認精細存取控制角色映射：

   ```
   GET _plugins/_security/api/rolesmapping
   ```

   停用 Dashboards 的 SAML 身分驗證*不會*移除 SAML 主要使用者名稱和/或 SAML 主要後端角色的映射。如果您要移除這些映射，請使用內部使用者資料庫 (如果已啟用) 登入 Dashboards，或使用 API 將其移除：

   ```
   PUT _plugins/_security/api/rolesmapping/all_access
   {
     "users": [
       "master-user"
     ]
   }
   ```

# OpenSearch 的 IAM Identity Center 受信任身分傳播支援
<a name="idc-aos"></a>

 您現在可以透過[信任的身分傳播](https://docs.aws.amazon.com/singlesignon/latest/userguide/trustedidentitypropagation-overview.html)，使用集中設定的 AWS IAM Identity Center 主體 （使用者和群組），透過 OpenSearch Service [ 應用程式 存取 Amazon OpenSearch Service ](application.md)網域。若要啟用 OpenSearch 的 IAM Identity Center 支援，您需要啟用 IAM Identity Center 的使用。若要進一步了解如何執行此操作，請參閱[什麼是 IAM Identity Center？](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html)。如需詳細資訊，請參閱[如何在 OpenSearch 應用程式中將 OpenSearch 網域關聯為資料來源？](application.md)。

您可以使用 OpenSearch Service 主控台、 AWS Command Line Interface (AWS CLI) 或 SDKs 來 AWS 設定 IAM Identity Center。

**注意**  
透過 [ Dashboards （與叢集共置） ](dashboards.md)不支援 IAM Identity Center 主體。它們僅透過[集中式 OpenSearch 使用者介面 （儀表板） ](application.md)支援。

## 考量事項
<a name="idc-considerations"></a>

將 IAM Identity Center 與 Amazon OpenSearch Service 搭配使用之前，您必須考慮下列事項：
+ 帳戶已啟用 IAM Identity Center。
+ IAM Identity Center 可在您的 [區域](opensearch-ui-endpoints-quotas.md)使用。
+ OpenSearch 網域版本為 1.3 或更新版本。
+ 網域上已啟用[精細存取控制](fgac.md)。
+ 網域與 IAM Identity Center 執行個體位於相同的區域。
+ 網域和 [OpenSearch 應用程式](application.md)屬於同一個 AWS 帳戶。

## 修改網域存取政策
<a name="idc-domain-access"></a>

設定 IAM Identity Center 之前，您必須更新網域存取政策或在 OpenSearch 應用程式中為受信任身分傳播設定的 IAM 角色許可。

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

****  

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

------

## 設定 IAM Identity Center 身分驗證和授權 （主控台）
<a name="idc-configure-console"></a>

您可以在網域建立程序期間或透過更新現有網域來啟用 IAM Identity Center 身分驗證和授權。設定步驟會因您選擇的選項而略有不同。

下列步驟說明如何在 Amazon OpenSearch Service 主控台中設定 IAM Identity Center 身分驗證和授權的現有網域：

1. 在**網域組態**下，導覽至**安全組態**，選擇編輯並導覽至 IAM Identity Center Authentication 區段，然後選取**啟用使用 IAM Identity Center 驗證的 API 存取**。

1.  選取 SubjectKey 和 Roles 金鑰，如下所示。
   + **主旨金鑰** - 選擇其中一個 UserId （預設）、UserName 和 Email，以使用對應的屬性做為存取網域的主體。
   + **角色金鑰** - 選擇其中一個 GroupId （預設） 和 GroupName，針對與 IAM Identity Center 主體相關聯的所有群組，使用對應的屬性值做為[fine-grained-access-control](fgac.md)的後端角色。

完成變更後，請儲存您的網域。

## 設定精細存取控制
<a name="idc-configure-fgac"></a>

在 OpenSearch 網域上啟用 IAM Identity Center 選項後，您可以透過[建立**與後端**角色的角色映射來設定對 IAM Identity Center 主體的](fgac.md#fgac-mapping)存取。委託人的後端角色值是以 IAM Identity Center 委託人的群組成員資格和 GroupId 或 GroupName 的 RolesKey 組態為基礎。

**注意**  
Amazon OpenSearch Service 最多可為單一使用者支援 **100 個群組**。如果您嘗試使用超過允許的執行個體數量，您會遇到與fine-grained-access-control授權處理不一致的情況，並收到 403 錯誤訊息。

## 設定 IAM Identity Center 身分驗證和授權 (CLI)
<a name="idc-configure-cli"></a>

```
	 aws opensearch update-domain-config \
	     --domain-name my-domain \
	     --identity-center-options '{"EnabledAPIAccess": true, "IdentityCenterInstanceARN": "instance arn",  "SubjectKey": "UserId/UserName/UserEmail" , "RolesKey": "GroupId/GroupName"}'
```

## 在網域上停用 IAM Identity Center 身分驗證
<a name="idc-configure-disable"></a>

若要在 OpenSearch 網域上停用 IAM Identity Center：

1. 選擇網域、**Actions** (動作) 和 **Edit security configuration** (編輯安全組態)。

1. 取消勾選**啟用透過 IAM Identity Center 驗證的 API 存取**。

1. 選擇**儲存變更**。

1. 網域完成處理後，移除為 IAM Identity Center 主體新增[的角色映射](fgac.md) 

若要透過 CLI 停用 IAM Identity Center，您可以使用下列

```
	 aws opensearch update-domain-config \
	     --domain-name my-domain \
	     --identity-center-options '{"EnabledAPIAccess": false}'
```

# 設定 OpenSearch Dashboards 的 Amazon Cognito 身分驗證
<a name="cognito-auth"></a>

您可以使用 [Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/what-is-amazon-cognito.html) 進行身分驗證並保護 OpenSearch Dashboards 的 Amazon OpenSearch Service 預設安裝。Amazon Cognito 身分驗證是可選的，並僅適用於使用 OpenSearch 或 Elasticsearch 5.1 或更高版本的網域。如果您不設定 Amazon Cognito 身分驗證，您仍然可以使用[以 IP 為基礎的存取政策](ac.md#ac-types-ip)和[代理伺服器](dashboards.md#dashboards-proxy)、HTTP 基本身分驗證或 [SAML](saml.md) 來保護 Dashboards。

大部分身分驗證程序發生在 Amazon Cognito 中，但本節提供設定 Amazon Cognito 資源以使用 OpenSearch Service 網域的準則和要求。[標準定價](https://aws.amazon.com/cognito/pricing/)適用於所有 Amazon Cognito 資源。

**提示**  
第一次設定網域以便對 OpenSearch Dashboards 使用 Amazon Cognito 身分驗證時，我們建議您使用主控台。Amazon Cognito 資源完全可自訂，而主控台可協助您識別和了解重要的功能。

**Topics**
+ [先決條件](#cognito-auth-prereq)
+ [設定網域以使用 Amazon Cognito 身分驗證](#cognito-auth-config)
+ [允許已經過身分驗證的角色](#cognito-auth-config-ac)
+ [設定身分提供者](#cognito-auth-identity-providers)
+ [(選用) 設定精細分級的存取](#cognito-auth-granular)
+ [(選用) 自訂登入頁面](#cognito-auth-customize)
+ [(選用) 設定進階安全性](#cognito-auth-advanced)
+ [測試](#cognito-auth-testing)
+ [配額](#cognito-auth-limits)
+ [常見的設定問題](#cognito-auth-troubleshooting)
+ [停用 OpenSearch Dashboards 的 Amazon Cognito 身分驗證](#cognito-auth-disable)
+ [刪除使用 OpenSearch Dashboards 的 Amazon Cognito 身分驗證的網域](#cognito-auth-delete)

## 先決條件
<a name="cognito-auth-prereq"></a>

您必須滿足幾個先決條件，之後您才能夠為 OpenSearch Dashboards 設定 Amazon Cognito 身分驗證。OpenSearch Service 主控台可協助簡化這些資源的建立，但了解每個資源的目的有助於進行設定和故障診斷。針對 Dashboards 的 Amazon Cognito 身分驗證需要下列資源：
+ Amazon Cognito [使用者集區](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools.html)
+ Amazon Cognito [身分集區](https://docs.aws.amazon.com/cognito/latest/developerguide/identity-pools.html)
+ 連接 `AmazonOpenSearchServiceCognitoAccess` 政策的 IAM 角色 (`CognitoAccessForAmazonOpenSearch`)

**注意**  
使用者集區和身分集區必須在相同的 AWS 區域。您可以使用相同的使用者集區、身分集區和 IAM 角色，將 Dashboards 的 Amazon Cognito 身分驗證新增到多個 OpenSearch Service 網域。如需詳細資訊，請參閱 [配額](#cognito-auth-limits)。

### 關於使用者集區
<a name="cognito-auth-prereq-up"></a>

使用者集區有兩個主要功能：建立和管理使用者目錄，並讓使用者註冊和登入。如需建立使用者集區的指示，請參閱《*Amazon Cognito 開發人員指南*》中的[使用者集區入門](https://docs.aws.amazon.com/cognito/latest/developerguide/getting-started-user-pools.html)。

當您建立使用者集區以與 OpenSearch Service 搭配使用時，請考慮以下事項：
+ 您的 Amazon Cognito 使用者集區必須擁有[網域名稱](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-domain.html)。OpenSearch Service 使用此網域名稱將使用者重新引導至存取 Dashboards 的登入頁面。除了網域名稱，使用者集區不需要任何非預設組態。
+ 您必須指定集區所需的[標準屬性](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-attributes.html#cognito-user-pools-standard-attributes) -​ 例如名稱、出生日期、電子郵件地址和電話號碼等屬性。在您建立使用者集區之後您無法變更這些屬性，因此請選擇目前對您重要的屬性。
+ 建立您的使用者集區時，選擇使用者是否可以建立自己的帳戶、帳戶的最低密碼強度，以及是否啟用多重要素驗證。如果您計劃使用[外部身分提供者](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-identity-federation.html)，這些設定是無關緊要的。通常，您可以讓使用者集區做為身分提供者*並且*啟用外部身分提供者，但大多數使用者偏好非此即彼。

使用者集區 ID 採用 `region_ID` 格式。如果您計劃使用 AWS CLI 或 AWS SDK 來設定 OpenSearch Service，請記下 ID。

### 關於身分集區
<a name="cognito-auth-prereq-ip"></a>

身分集區可讓您在使用者登入後將臨時受限的許可角色指派給使用者。如需建立身分集區的指示，請參閱《*Amazon Cognito 開發人員指南*》中的[身分集區主控台概觀](https://docs.aws.amazon.com/cognito/latest/developerguide/identity-pools.html)。當您建立身分集區以與 OpenSearch Service 搭配使用時，請考慮以下事項：
+ 如果您使用 Amazon Cognito 主控台，您必須選擇 **Enable access to unauthenticated identities** (允許存取未經驗證的身分) 核取方塊，以建立身分集區。在您建立身分集區並設定 OpenSearch Service 網域之後，Amazon Cognito 會停用此設定。
+ 您不需要新增[外部身分提供者](https://docs.aws.amazon.com/cognito/latest/developerguide/external-identity-providers.html)到身分集區。當您設定 OpenSearch Service 以使用 Amazon Cognito 身分驗證時，它會設定身分集區以使用您剛建立的使用者集區。
+ 建立身分集區之後，您必須選擇未經授權和經過授權的 IAM 角色。這些角色指定使用者登入前後的存取政策。如果您使用 Amazon Cognito 主控台，它可為您建立這些角色。在您建立經過授權的角色後，請記下採用 `arn:aws:iam::123456789012:role/Cognito_identitypoolnameAuth_Role` 格式的 ARN。

身分集區 ID 採用 `region:ID-ID-ID-ID-ID` 格式。如果您計劃使用 AWS CLI 或 AWS SDK 來設定 OpenSearch Service，請記下 ID。

### 關於 CognitoAccessForAmazonOpenSearch 角色
<a name="cognito-auth-role"></a>

OpenSearch Service 需要許可才能設定 Amazon Cognito 使用者集區和身分集區，並使用它們來進行身分驗證。為此，您可以使用 `AmazonOpenSearchServiceCognitoAccess`，這是 AWS 受管政策。 `AmazonESCognitoAccess` 是舊版政策，當服務重新命名為 Amazon OpenSearch Service `AmazonOpenSearchServiceCognitoAccess`時，已由 取代。這兩個政策都提供啟用 Amazon Cognito 身分驗證所需的最低 Amazon Cognito 許可。如需政策詳細資訊，請參閱《 *AWS 受管政策參考指南*》中的 [AmazonOpenSearchServiceCognitoAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonOpenSearchServiceCognitoAccess.html)。

如果您使用主控台來建立或設定 OpenSearch Service 網域，它會為您建立 IAM 角色，然後將 `AmazonOpenSearchServiceCognitoAccess` 政策 (或者，若為 Elasticsearch 網域，則為 `AmazonESCognitoAccess` 政策) 連接到角色。此角色的預設名稱為 `CognitoAccessForAmazonOpenSearch`。

角色許可政策 `AmazonOpenSearchServiceCognitoAccess` 和 `AmazonESCognitoAccess` 均允許 OpenSearch Service 在所有身分識別和使用者集區上完成下列動作：
+ 動作：`cognito-idp:DescribeUserPool`
+ 動作：`cognito-idp:CreateUserPoolClient`
+ 動作：`cognito-idp:DeleteUserPoolClient`
+ 動作：`cognito-idp:UpdateUserPoolClient`
+ 動作：`cognito-idp:DescribeUserPoolClient`
+ 動作：`cognito-idp:AdminInitiateAuth`
+ 動作：`cognito-idp:AdminUserGlobalSignOut`
+ 動作：`cognito-idp:ListUserPoolClients`
+ 動作：`cognito-identity:DescribeIdentityPool`
+ 動作：`cognito-identity:SetIdentityPoolRoles`
+ 動作：`cognito-identity:GetIdentityPoolRoles`

如果您使用 AWS CLI 或其中一個 AWS SDKs，則必須建立自己的角色、連接政策，並在設定 OpenSearch Service 網域時指定此角色的 ARN。角色必須具有下列信任關係：

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

****  

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

------

如需說明，請參閱《IAM 使用者指南》中的[建立角色以將許可委派給 AWS 服務](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html)，以及新增和移除 IAM 身分許可。 [https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html) **

## 設定網域以使用 Amazon Cognito 身分驗證
<a name="cognito-auth-config"></a>

在完成先決條件之後，您可以設定 OpenSearch Service 網域以使用適用於 Dashboards 的 Amazon Cognito。

**注意**  
Amazon Cognito 不適用於所有 AWS 區域。如需支援的區域清單；請參閱 Amazon Cognito [的服務端點](https://docs.aws.amazon.com/general/latest/gr/cognito_identity.html#cognito_identity_region)。您不需要對用於 OpenSearch Service 的 Amazon Cognito 使用相同區域。

### 設定 Amazon Cognito 身分驗證 (主控台)
<a name="cognito-auth-config-console"></a>

由於主控台會為您建立 `CognitoAccessForAmazonOpenSearch`角色，因此可提供最簡單的組態體驗。除了標準 OpenSearch Service 許可外，您還需要以下一組許可，才能使用主控台來建立網域，該網域對 OpenSearch 儀表板使用 Amazon Cognito 身分驗證。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [{
      "Effect": "Allow",
      "Action": [
        "ec2:DescribeVpcs",
        "cognito-identity:ListIdentityPools",
        "cognito-idp:ListUserPools",
        "iam:CreateRole",
        "iam:AttachRolePolicy"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "iam:GetRole",
        "iam:PassRole"
      ],
      "Resource": "arn:aws:iam::123456789012:role/service-role/CognitoAccessForAmazonOpenSearch"
    }
  ]
}
```

------

如需有關將許可新增至身分 (使用者、使用者群組或角色) 的說明，請參閱[新增 IAM 身分許可 (主控台)](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html#add-policies-console)。

如果 `CognitoAccessForAmazonOpenSearch` 已存在，您需要的許可更少：

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [{
      "Effect": "Allow",
      "Action": [
        "ec2:DescribeVpcs",
        "cognito-identity:ListIdentityPools",
        "cognito-idp:ListUserPools"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "iam:GetRole",
        "iam:PassRole"
      ],
      "Resource": "arn:aws:iam::123456789012:role/service-role/CognitoAccessForAmazonOpenSearch"
    }
  ]
}
```

------

**若要設定 Dashboards 的 Amazon Cognito 身分驗證 (主控台)**

1. 開啟位於 https：//[https://console.aws.amazon.com/aos/home/](https://console.aws.amazon.com/aos/home/) 的 Amazon OpenSearch Service 主控台。

1. 在 **Domains** (網域) 下，選取您要設定的網域。

1. 選擇 **Actions** (動作)、**Edit security configuration** (編輯安全組態)。

1. 選擇 **Enable Amazon Cognito authentication** (啟用 Amazon Cognito 身分驗證)。

1. 針對**區域**，選取 AWS 區域 包含 Amazon Cognito 使用者集區和身分集區的 。

1. 對於 **Cognito user pool** (Cognito 使用者集區)，選擇使用者集區或建立集區。如需詳細資訊，請參閱[關於使用者集區](#cognito-auth-prereq-up)。

1. 對於 **Cognito identity pool** (Cognito 身分集區)，選擇身分集區或建立集區。如需詳細資訊，請參閱[關於身分集區](#cognito-auth-prereq-ip)。
**注意**  
**Create user pool** (建立使用者集區) 和 **Create identity pool** (建立身分集區) 連結會將您導向到 Amazon Cognito 主控台，並要求您手動建立這些資源。此程序不是自動的。如需詳細資訊，請參閱[先決條件](#cognito-auth-prereq)。

1. 對於 **IAM role name** (IAM 角色名稱)，使用 `CognitoAccessForAmazonOpenSearch` 的預設值 (建議) 或輸入新名稱。如需詳細資訊，請參閱[關於 CognitoAccessForAmazonOpenSearch 角色](#cognito-auth-role)。

1. 選擇 **Save changes** (儲存變更)。

在您的網域完成處理之後，請參閱[允許已經過身分驗證的角色](#cognito-auth-config-ac)和[設定身分提供者](#cognito-auth-identity-providers)以取得其他設定步驟。

### 設定 Amazon Cognito 身分驗證 (AWS CLI)
<a name="cognito-auth-config-cli"></a>

使用 `--cognito-options` 參數來設定 OpenSearch Service 網域。由 `create-domain` 和 `update-domain-config` 命令使用以下語法：

```
--cognito-options Enabled=true,UserPoolId="user-pool-id",IdentityPoolId="identity-pool-id",RoleArn="arn:aws:iam::123456789012:role/CognitoAccessForAmazonOpenSearch"
```

**範例**

以下範例在 `us-east-1` 區域建立網域，該區域使用 `CognitoAccessForAmazonOpenSearch` 角色來啟用 Dashboards 的 Amazon Cognito 身分驗證，並提供對 `Cognito_Auth_Role` 的網域存取：

```
aws opensearch create-domain --domain-name my-domain --region us-east-1 --access-policies '{ "Version": "2012-10-17",		 	 	  "Statement":[{"Effect":"Allow","Principal":{"AWS": ["arn:aws:iam::123456789012:role/Cognito_Auth_Role"]},"Action":"es:ESHttp*","Resource":"arn:aws:es:us-east-1:123456789012:domain/*" }]}' --engine-version "OpenSearch_1.0" --cluster-config InstanceType=m4.xlarge.search,InstanceCount=1 --ebs-options EBSEnabled=true,VolumeSize=10 --cognito-options Enabled=true,UserPoolId="us-east-1_123456789",IdentityPoolId="us-east-1:12345678-1234-1234-1234-123456789012",RoleArn="arn:aws:iam::123456789012:role/CognitoAccessForAmazonOpenSearch"
```

在您的網域完成處理之後，請參閱[允許已經過身分驗證的角色](#cognito-auth-config-ac)和[設定身分提供者](#cognito-auth-identity-providers)以取得其他設定步驟。

### 設定 Amazon Cognito 身分驗證AWS SDKs)
<a name="cognito-auth-config-sdk"></a>

 AWS SDKs (Android 和 iOS SDKs除外） 支援 [Amazon OpenSearch Service API 參考](https://docs.aws.amazon.com/opensearch-service/latest/APIReference/Welcome.html)中定義的所有操作，包括 `CreateDomain`和 `UpdateDomainConfig`操作的 `CognitoOptions` 參數。如需安裝和使用 AWS SDKs 的詳細資訊，請參閱[AWS 軟體開發套件](https://aws.amazon.com/code)。

在您的網域完成處理之後，請參閱[允許已經過身分驗證的角色](#cognito-auth-config-ac)和[設定身分提供者](#cognito-auth-identity-providers)以取得其他設定步驟。

## 允許已經過身分驗證的角色
<a name="cognito-auth-config-ac"></a>

在預設情況下，您遵照 [關於身分集區](#cognito-auth-prereq-ip) 中的準則設定的已經過身分驗證的 IAM 角色並不具備存取 OpenSearch Dashboards 所必需的權限。您必須提供該角色額外的許可。

**注意**  
如果您已設定[精細存取控制](fgac.md)並使用開放或以 IP 為基礎的存取政策，您可以略過此步驟。

您可以將這些許可包含在[身分型](ac.md#ac-types-identity)政策中，但除非您希望已經過身分驗證的使用者可存取所有 OpenSearch Service 網域，否則連接到單一網域的[資源型政策](ac.md#ac-types-resource)會是更好的方法。

針對 `Principal`，指定您使用 [關於身分集區](#cognito-auth-prereq-ip) 中的準則設定之 Cognito 經身分驗證角色的 ARN。

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

****  

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

------

 如需有關將資源型政策新增到 OpenSearch Service 網域的說明，請參閱[設定存取政策](createupdatedomains.md#createdomain-configure-access-policies)。

## 設定身分提供者
<a name="cognito-auth-identity-providers"></a>

當您設定網域以使用 Dashboards 的 Amazon Cognito 身分驗證時，OpenSearch Service 會將[應用程式用戶端](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-client-apps.html)新增到使用者集區，並將使用者集區作為身分驗證供應商新增到身分集區。

**警告**  
不重新命名或刪除應用程式用戶端。

根據您設定使用者集區的方式而定，您可能需要手動建立使用者帳戶，或者使用者可以建立自己的帳戶。如果這些設定是可接受的，您便無需做進一步的動作。不過，許多人偏好使用外部身分提供者。

若要啟用 SAML 2.0 身分提供者，您必須提供 SAML 中繼資料文件。若要啟用社交身分提供者，例如，Login with Amazon、Facebook 和 Google，您必須擁有這些供應商提供的應用程式 ID 和應用程式密碼。您可以啟用任意組合的身分提供者。

設定使用者集區的最簡單方式就是使用 Amazon Cognito 主控台。如需說明，請參閱《*Amazon Cognito 開發人員指南*》中的[使用第三方身分提供者的使用者集區登入](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-identity-federation.html)和[使用應用程式用戶端的應用程式特定設定](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-app-idp-settings.html)。

## (選用) 設定精細分級的存取
<a name="cognito-auth-granular"></a>

您可能已注意到預設身分集區設定會指派登入相同 IAM 角色 (`Cognito_identitypoolAuth_Role`) 的每個使用者，這表示每個使用者可以存取相同的 AWS 資源。如果您想要搭配使用[精細存取控制](fgac.md)與 Amazon Cognito (例如，如果希望您組織的分析師擁有多個索引的唯讀存取權，而開發人員擁有所有索引的寫入存取權)，您有兩個選擇：
+ 建立使用者群組並設定您的身分提供者，以根據使用者的身分驗證字符選擇 IAM 角色 (建議)。
+ 設定您的身分提供者，以根據一個或多個規則選擇 IAM 角色。

如需包含精細存取控制的演練，請參閱 [教學課程：使用 IAM 主要使用者和 Amazon Cognito 身分驗證設定網域](fgac-iam.md)。

**重要**  
與預設角色相似，Amazon Cognito 必須是每個額外角色信任關係的一部分。如需詳細資訊，請參閱《*Amazon Cognito 開發人員指南*》中的[為角色映射建立角色](https://docs.aws.amazon.com/cognito/latest/developerguide/role-based-access-control.html#creating-roles-for-role-mapping)。

### 使用者群組和字符
<a name="cognito-auth-granular-tokens"></a>

當您建立使用者群組時，您為群組成員選擇 IAM 角色。如需建立群組的相關資訊，請參閱《*Amazon Cognito 開發人員指南*》中的[將群組新增至使用者集](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-user-groups.html)區。

在您建立一或多個使用者群組後，您可以設定您的驗證供應商，以指派使用者其群組的角色，而不是身分集區的預設角色。選取 **Choose role from token** (從字符中選擇角色)，然後選擇 **Use default Authenticated role** (使用預設已經過身分驗證的角色) 或 **DENY** (拒絕)，以指定身分集區應該如何處理不屬於群組的使用者。

### 規則
<a name="cognito-auth-granular-rules"></a>

規則本質上是 Amazon Cognito 依序評估的一系列 `if` 陳述式。例如，如果使用者的電子郵件地址包含 `@corporate`，Amazon Cognito 會為該使用者指派 `Role_A`。如果使用者的電子郵件地址包含 `@subsidiary`，它會指派該使用者 `Role_B`。否則，它會指派使用者預設驗證角色。

若要進一步了解，請參閱《*Amazon Cognito 開發人員指南*》中的[使用規則型映射將角色指派給使用者](https://docs.aws.amazon.com/cognito/latest/developerguide/role-based-access-control.html#using-rules-to-assign-roles-to-users)。

## (選用) 自訂登入頁面
<a name="cognito-auth-customize"></a>

您可以使用 Amazon Cognito 主控台上傳自訂標誌，並對登入頁面進行 CSS 變更。如需 CSS 屬性的說明和完整清單，請參閱《*Amazon Cognito 開發人員指南*》中的[自訂託管 UI （傳統） 品牌](https://docs.aws.amazon.com/cognito/latest/developerguide/hosted-ui-classic-branding.html)。

## (選用) 設定進階安全性
<a name="cognito-auth-advanced"></a>

Amazon Cognito 使用者集區支援進階安全功能，例如多重驗證、遭盜用認證檢查和調整式驗證。若要進一步了解，請參閱《[Amazon Cognito 開發人員指南》中的使用 Amazon Cognito 使用者集區安全功能](https://docs.aws.amazon.com/cognito/latest/developerguide/managing-security.html)。 *Amazon Cognito *

## 測試
<a name="cognito-auth-testing"></a>

在您滿意您的設定之後，請驗證使用者體驗是否符合您的期望。

**若要存取 OpenSearch Dashboards**

1. 在 Web 瀏覽器中導覽至 `https://opensearch-domain/_dashboards`。若要直接登入特定租用戶，請將 `?security_tenant=tenant-name` 附加至 URL。

1. 使用您慣用的登入資料登入。

1. 載入 OpenSearch Dashboards 之後，至少設定一個索引模式。Dashboards 使用這些模式來識別您要分析的索引。輸入 `*`，選擇 **Next step (下一步)**，然後選擇 **Create index pattern (建立索引模式)**。

1. 若要搜尋或探索您的資料，請選擇 **Discover (探索)**。

如果此程序中的任何步驟失敗，請參閱[常見的設定問題](#cognito-auth-troubleshooting)以取得故障診斷資訊。

## 配額
<a name="cognito-auth-limits"></a>

Amazon Cognito 對於許多資源有軟性限制。如果您想要為大量的 OpenSearch Service 網域啟用 Dashboards 身分驗證，請視需要檢閱 [Amazon Cognito 中的配額](https://docs.aws.amazon.com/cognito/latest/developerguide/limits.html)並[請求提高限制](https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html)。

每個 OpenSearch Service 網域會新增[應用程式用戶端](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-client-apps.html)到使用者集區，這會新增[身分驗證供應商](https://docs.aws.amazon.com/cognito/latest/developerguide/external-identity-providers.html)到身分集區。如果您對 10 個以上的網域啟用 OpenSearch Dashboards 身分驗證，您可能會遇到「每個身分集區的 Amazon Cognito 使用者集區供應商上限」限制。如果超出限制，您嘗試設定以使用 Dashboards 的 Amazon Cognito 身分驗證的任何 OpenSearch Service 網域可能凍結在 **Processing** (處理) 的設定狀態中。

## 常見的設定問題
<a name="cognito-auth-troubleshooting"></a>

下表列出常見的設定問題和解決方案。


**設定 OpenSearch Service**  

| 問題 | 解決方案 | 
| --- | --- | 
|  `OpenSearch Service can't create the role` (主控台)  | 您沒有正確的 IAM 許可。新增 [設定 Amazon Cognito 身分驗證 (主控台)](#cognito-auth-config-console) 中指定的許可。 | 
|  `User is not authorized to perform: iam:PassRole on resource CognitoAccessForAmazonOpenSearch` (主控台)  | 您沒有 [CognitoAccessForAmazonOpenSearch](#cognito-auth-role) 角色的 iam:PassRole 許可。將下列政策連接至您的帳戶：  JSON   

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "iam:PassRole"
      ],
      "Resource": "arn:aws:iam::123456789012:role/service-role/CognitoAccessForAmazonOpenSearch"
    }
  ]
}
```    或者，您可以連接 `IAMFullAccess` 政策。 | 
|  `User is not authorized to perform: cognito-identity:ListIdentityPools on resource`  |  您沒有 Amazon Cognito 的讀取許可。將 `AmazonCognitoReadOnly` 政策連接至您的帳戶。  | 
|  `An error occurred (ValidationException) when calling the CreateDomain operation: OpenSearch Service must be allowed to use the passed role`  |  並未在 `CognitoAccessForAmazonOpenSearch` 角色的信任關係中指定 OpenSearch Service。確認您的角色使用 [關於 CognitoAccessForAmazonOpenSearch 角色](#cognito-auth-role) 中指定的信任關係。或者，使用主控台來設定 Amazon Cognito 身分驗證。主控台會為您建立一個角色。  | 
|  `An error occurred (ValidationException) when calling the CreateDomain operation: User is not authorized to perform: cognito-idp:action on resource: user pool`  | 在 --cognito-options 中指定的角色沒有存取 Amazon Cognito 的許可。檢查角色是否已連接 AWS 受管AmazonOpenSearchServiceCognitoAccess政策。或者，使用主控台來設定 Amazon Cognito 身分驗證。主控台會為您建立一個角色。 | 
| An error occurred (ValidationException) when calling the CreateDomain operation: User pool does not exist |  OpenSearch Service 找不到使用者集區。確認您已建立一個且具有正確的 ID。若要尋找 ID，您可以使用 Amazon Cognito 主控台或下列 AWS CLI 命令： <pre>aws cognito-idp list-user-pools --max-results 60 --region region</pre>  | 
|  `An error occurred (ValidationException) when calling the CreateDomain operation: IdentityPool not found`  |  OpenSearch Service 找不到身分集區。確認您已建立一個且具有正確的 ID。若要尋找 ID，您可以使用 Amazon Cognito 主控台或下列 AWS CLI 命令： <pre>aws cognito-identity list-identity-pools --max-results 60 --region region</pre>  | 
|  `An error occurred (ValidationException) when calling the CreateDomain operation: Domain needs to be specified for user pool`  | 使用者集區沒有網域名稱。您可以使用 Amazon Cognito 主控台或以下 AWS CLI 命令來設定一個：<pre>aws cognito-idp create-user-pool-domain --domain name --user-pool-id id</pre> | 


**存取 OpenSearch Dashboards**  

| 問題 | 解決方案 | 
| --- | --- | 
| 登入頁面不會顯示我慣用的身分提供者。 |  確認您已為 OpenSearch Service 應用程式用戶端啟用 [設定身分提供者](#cognito-auth-identity-providers) 中指定的身分提供者。  | 
|  登入頁面看起來不似與我的組織關聯。  |  請參閱 [(選用) 自訂登入頁面](#cognito-auth-customize)。  | 
| 我的登入資料無法運作。 |  確認您已如 [設定身分提供者](#cognito-auth-identity-providers) 中所指定，來設定身分提供者。 如果您使用使用者集區做為身分提供者，請檢查帳戶是否存在於 Amazon Cognito 主控台。  | 
|  OpenSearch Dashboards 完全不載入，或無法正常運作。  |  Amazon Cognito 經過身分驗證的角色需要網域 (`/*`) 的 `es:ESHttp*` 許可來存取和使用 Dashboards。如 [允許已經過身分驗證的角色](#cognito-auth-config-ac) 中所指定，檢查您新增的存取政策。  | 
|  當我從一個索引標籤登出 OpenSearch Dashboards 時，剩餘的索引標籤會顯示一則訊息，指出重新整理字符已被撤銷。  |  當您在使用 Amazon Cognito 身分驗證時登出 OpenSearch Dashboards 工作階段時，OpenSearch Service 會執行 [AdminUserGlobalSignOut](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminUserGlobalSignOut.html) 操作，該操作會將您登出*所有*作用中的 OpenSearch Dashboards 工作階段。  | 
| Invalid identity pool configuration. Check assigned IAM roles for this pool. | Amazon Cognito 無權代表已經過身分驗證的使用者擔任 IAM 角色。修改角色的信任關係，使其包含：  JSON   

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [{
    "Effect": "Allow",
    "Principal": {
      "Federated": "cognito-identity.amazonaws.com"
    },
    "Action": "sts:AssumeRoleWithWebIdentity",
    "Condition": {
      "StringEquals": {
        "cognito-identity.amazonaws.com:aud": "identity-pool-id"
      },
      "ForAnyValue:StringLike": {
        "cognito-identity.amazonaws.com:amr": "authenticated"
      }
    }
  }
 ]
}
```     | 
| Token is not from a supported provider of this identity pool. | 當您從使用者集區移除應用程式用戶端時，可能發生此少見的錯誤。嘗試在新的瀏覽器工作階段中開啟 Dashboards。 | 

## 停用 OpenSearch Dashboards 的 Amazon Cognito 身分驗證
<a name="cognito-auth-disable"></a>

使用下列步驟來停用 Dashboards 的 Amazon Cognito 身分驗證。

**若要停用 Dashboards 的 Amazon Cognito 身分驗證 (主控台)**

1. 開啟 [Amazon OpenSearch Service 主控台](https://console.aws.amazon.com/aos/home/)。

1. 在 **Domains** (網域) 下，選擇您要設定的網域。

1. 選擇 **Actions** (動作)、**Edit security configuration** (編輯安全組態)。

1. 取消選擇 **Enable Amazon Cognito authentication** (啟用 Amazon Cognito 身分驗證)。

1. 選擇**儲存變更**。

**重要**  
如果您不再需要 Amazon Cognito 使用者集區和身分集區，請刪除它們。否則，您需繼續負擔費用。

## 刪除使用 OpenSearch Dashboards 的 Amazon Cognito 身分驗證的網域
<a name="cognito-auth-delete"></a>

為避免使用 Dashboards 的 Amazon Cognito 身分驗證的網域凍結在 **Processing** (處理) 的設定狀態，請在刪除其相關的 Amazon Cognito 使用者和身分集區*之前*，刪除 OpenSearch Service 網域。

# 使用 Amazon OpenSearch Service 的服務連結角色
<a name="slr"></a>

Amazon OpenSearch Service 使用 AWS Identity and Access Management (IAM) [服務連結角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#iam-term-service-linked-role)。服務連結角色是直接連結至 OpenSearch Service 的一種特殊 IAM 角色類型。服務連結角色是由 OpenSearch Service 預先定義，並包含該服務代表您呼叫其他 AWS 服務所需的所有許可。

服務連結角色可讓設定 OpenSearch Service 更為簡單，因為您不必手動新增必要的許可。OpenSearch Service 定義其服務連結角色的許可，除非另有定義，否則僅 OpenSearch Service 可以擔任其角色。定義的許可包括信任政策和許可政策，且該許可政策無法附加至其他 IAM 實體。如需服務連結角色和許可政策的更新，請參閱 [Amazon OpenSearch Service 的文件歷史記錄](release-notes.md)。

如需有關支援服務連結角色的其他 服務的資訊，請參閱[AWS 使用 IAM 的服務](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html)，並在**服務連結角色**欄中尋找具有**是**的服務。選擇具有連結的**是**，以檢視該服務的服務連結角色文件。

**Topics**
+ [使用服務連結角色來建立 VPC 網域和直接查詢資料來源](slr-aos.md)
+ [使用服務連結角色建立 OpenSearch Serverless 集合](serverless-service-linked-roles.md)
+ [使用服務連結角色建立 OpenSearch Ingestion 管道](slr-osis.md)

# 使用服務連結角色來建立 VPC 網域和直接查詢資料來源
<a name="slr-aos"></a>

Amazon OpenSearch Service 使用 AWS Identity and Access Management (IAM) [服務連結角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#iam-term-service-linked-role)。服務連結角色是直接連結至 OpenSearch Service 的一種特殊 IAM 角色類型。服務連結角色由 OpenSearch Service 預先定義，並包含該服務代表您呼叫其他 AWS 服務所需的所有許可。

OpenSearch Service 使用名為 **AWSServiceRoleForAmazonOpenSearchService** 的服務連結角色，可提供角色啟用網域或直接查詢資料來源 [VPC 存取](cognito-auth.md)所需的最低 Amazon EC2 和 Elastic Load Balancing 許可。

## 舊版 Elasticsearch 角色
<a name="slr-replacement"></a>

Amazon OpenSearch Service 使用名為 `AWSServiceRoleForAmazonOpenSearchService` 的服務連結角色。您的帳戶可能也會包含名為 `AWSServiceRoleForAmazonElasticsearchService` 的舊版服務連結角色，其使用已被淘汰的 Elasticsearch API 端點運作。

如果您的帳戶中沒有舊版的 Elasticsearch 角色，則 OpenSearch Service 會在您首次建立 OpenSearch 網域時，自動建立一個新的 OpenSearch 服務連結角色。否則，您的帳戶將繼續使用 Elasticsearch 角色。若要讓此自動建立作業順利完成，您必須具有 `iam:CreateServiceLinkedRole` 動作的許可。

## 許可
<a name="slr-permissions"></a>

`AWSServiceRoleForAmazonOpenSearchService` 服務連結角色信任下列服務以擔任角色：
+ `opensearchservice.amazonaws.com`

名為 [https://docs.aws.amazon.com/opensearch-service/latest/developerguide/ac-managed.html#AmazonOpenSearchServiceRolePolicy](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/ac-managed.html#AmazonOpenSearchServiceRolePolicy) 的角色許可政策允許 OpenSearch Service 對指定資源完成下列動作：
+ 動作：`*` 上的 `acm:DescribeCertificate`
+ 動作：`*` 上的 `cloudwatch:PutMetricData`
+ 動作：`*` 上的 `ec2:CreateNetworkInterface`
+ 動作：`*` 上的 `ec2:DeleteNetworkInterface`
+ 動作：`*` 上的 `ec2:DescribeNetworkInterfaces`
+ 動作：`*` 上的 `ec2:ModifyNetworkInterfaceAttribute`
+ 動作：`*` 上的 `ec2:DescribeSecurityGroups`
+ 動作：`*` 上的 `ec2:DescribeSubnets`
+ 動作：`*` 上的 `ec2:DescribeVpcs`
+ 動作：在所有網路介面和 VPC 端點進行 `ec2:CreateTags`
+ 動作：`*` 上的 `ec2:DescribeTags`
+ 動作：當請求包含標籤 `OpenSearchManaged=true` 時，在所有 VPC、安全群組、子網路和路由表，以及所有 VPC 端點上進行 `ec2:CreateVpcEndpoint`
+ 動作：當請求包含標籤 `OpenSearchManaged=true` 時，在所有 VPC、安全群組、子網路和路由表，以及所有 VPC 端點上進行 `ec2:ModifyVpcEndpoint`
+ 動作：當請求包含標籤 `OpenSearchManaged=true` 時，在所有端點上進行 `ec2:DeleteVpcEndpoints`
+ 動作：`*` 上的 `ec2:AssignIpv6Addresses`
+ 動作：`*` 上的 `ec2:UnAssignIpv6Addresses`
+ 動作：`*` 上的 `elasticloadbalancing:AddListenerCertificates`
+ 動作：`*` 上的 `elasticloadbalancing:RemoveListenerCertificates`

您必須設定許可，IAM 實體 (如使用者、群組或角色) 才可建立、編輯或刪除服務連結角色。如需詳細資訊，請參閱 *IAM 使用者指南*中的[服務連結角色許可](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html#service-linked-role-permissions)。

## 建立 服務連結角色
<a name="create-slr"></a>

您不需要手動建立服務連結角色，當您使用 建立已啟用 VPC 的網域或直接查詢資料來源時 AWS 管理主控台，OpenSearch Service 會為您建立服務連結角色。若要讓此自動建立作業順利完成，您必須具有 `iam:CreateServiceLinkedRole` 動作的許可。

您也可以使用 IAM 主控台、IAM CLI 或 IAM API 來手動建立服務連結角色。如需詳細資訊，請參閱 *IAM 使用者指南*中的[建立服務連結角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html#create-service-linked-role)。

## 編輯服務連結角色
<a name="edit-slr"></a>

OpenSearch Service 不允許您編輯 `AWSServiceRoleForAmazonOpenSearchService` 服務連結角色。因為可能有各種實體會參考服務連結角色，所以您無法在建立角色之後變更其名稱。然而，您可使用 IAM 來編輯角色描述。如需詳細資訊，請參閱《*IAM 使用者指南*》中的[編輯服務連結角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html#edit-service-linked-role)。

## 刪除 服務連結角色
<a name="delete-slr"></a>

若您不再使用需要服務連結角色的功能或服務，我們建議您刪除該角色。如此一來，您就沒有未主動監控或維護的未使用實體。然而，務必清除您的服務連結角色，之後才能以手動方式將其刪除。

### 清除 服務連結角色
<a name="slr-review-before-delete"></a>

您必須先確認服務連結角色沒有作用中的工作階段，並移除該角色使用的資源，之後才能使用 IAM 將其刪除。

**檢查服務連結角色是否於 IAM 主控台有作用中的工作階段**

1. 登入 AWS 管理主控台 並開啟位於 https：//[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 的 IAM 主控台。

1. 在 IAM 主控台的導覽窗格中，選擇**角色**。然後選擇 `AWSServiceRoleForAmazonOpenSearchService` 角色的名稱 (而非核取方塊)。

1. 在所選角色的 **Summary (摘要)** 頁面中，選擇 **Access Advisor (存取 Advisor)** 分頁。

1. 在 **Access Advisor (存取 Advisor)** 分頁中，檢閱服務連結角色的近期活動。
**注意**  
如果您不確定 OpenSearch Service 是否正在使用 `AWSServiceRoleForAmazonOpenSearchService` 角色，可嘗試刪除該角色。如果服務正在使用該角色，則刪除會失敗，而您可以檢視正在使用該角色的資源。如果角色正在使用中，則您必須先等到工作階段結束，才能刪除該角色，及/或刪除正在使用該角色的資源。您無法撤銷服務連結角色的工作階段。

### 手動刪除服務連結角色
<a name="slr-manual-delete"></a>

從 IAM 主控台、API 或 CLI AWS 刪除服務連結角色。如需相關說明，請參閱 *IAM 使用者指南*中的[刪除服務連結角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html#delete-service-linked-role)。

# 使用服務連結角色建立 OpenSearch Serverless 集合
<a name="serverless-service-linked-roles"></a>

OpenSearch Serverless 使用 AWS Identity and Access Management (IAM) [服務連結角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#iam-term-service-linked-role)。服務連結角色是直接連結至 OpenSearch Service 的一種特殊 IAM 角色類型。服務連結角色由 OpenSearch Service 預先定義，並包含該服務代表您呼叫其他 AWS 服務所需的所有許可。

OpenSearch Serverless 使用名為 **AWSServiceRoleForAmazonOpenSearchServerless** 的服務連結角色，提供角色將無伺服器相關 CloudWatch 指標發佈至您的帳戶所需的許可。與 AWSServiceRoleForAmazonOpenSearchServerless 相關聯的角色許可政策名為 `AmazonOpenSearchServerlessServiceRolePolicy`。如需政策的詳細資訊，請參閱《 *AWS 受管政策參考指南*》中的 [AmazonOpenSearchServerlessServiceRolePolicy](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonOpenSearchServerlessServiceRolePolicy.html)。

## OpenSearch Serverless 的服務連結角色許可
<a name="serverless-slr-permissions"></a>

OpenSearch Serverless 使用名為 AWSServiceRoleForAmazonOpenSearchServerless 的服務連結角色，這可讓 OpenSearch Serverless 代表您呼叫 AWS 服務。

AWSServiceRoleForAmazonOpenSearchServerless 服務連結角色信任下列服務擔任該角色：
+ `observability.aoss.amazonaws.com`

名為 `AmazonOpenSearchServerlessServiceRolePolicy` 的角色許可政策允許 OpenSearch Serverless 對指定資源完成下列動作：
+ 動作：`cloudwatch:PutMetricData` 於所有 AWS 資源。

**注意**  
政策包括條件條件索引鍵 `{"StringEquals": {"cloudwatch:namespace": "AWS/AOSS"}}`，而這表示服務連結角色僅可傳送指標資料至 `AWS/AOSS` CloudWatch 命名空間。  
 

您必須設定許可，IAM 實體 (如使用者、群組或角色) 才可建立、編輯或刪除服務連結角色。如需詳細資訊，請參閱 *IAM 使用者指南*中的[服務連結角色許可](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html#service-linked-role-permissions)。

## 建立 OpenSearch Serverless 的服務連結角色
<a name="create-serverless-slr"></a>

您不需要手動建立服務連結角色，當您在 AWS 管理主控台、 AWS CLI或 AWS API 中建立 OpenSearch Serverless 集合時，OpenSearch Serverless 會為您建立服務連結角色。

**注意**  
第一次建立集合時，必須在以身分為基礎的政策中指派 `iam:CreateServiceLinkedRole` 給您。

若您刪除此服務連結角色，之後需要再次建立，您可以在帳戶中使用相同程序重新建立角色。建立 OpenSearch Serverless 集合時，OpenSearch Serverless 可再次為您建立服務連結角色。

您也可以使用 IAM 主控台，透過 **Amazon OpenSearch Serverless** 使用案例建立服務連結角色。在 AWS CLI 或 AWS API 中，使用服務名稱建立`observability.aoss.amazonaws.com`服務連結角色：

```
aws iam create-service-linked-role --aws-service-name "observability.aoss.amazonaws.com"
```

如需詳細資訊，請參閱《IAM 使用者指南》**中的「[建立服務連結角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html#create-service-linked-role)」。如果您刪除此服務連結角色，您可以使用此相同的程序以再次建立該角色。

## 編輯 OpenSearch Serverless 的服務連結角色
<a name="edit-serverless-slr"></a>

OpenSearch Serverless 不允許您編輯 AWSServiceRoleForAmazonOpenSearchServerless 服務連結角色。因為可能有各種實體會參考服務連結角色，所以您無法在建立角色之後變更其名稱。然而，您可使用 IAM 來編輯角色描述。如需詳細資訊，請參閱《*IAM 使用者指南*》中的[編輯服務連結角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html#edit-service-linked-role)。

## 刪除 OpenSearch Serverless 的服務連結角色
<a name="delete-serverless-slr"></a>

若您不再使用需要服務連結角色的功能或服務，我們建議您刪除該角色。這會防止您擁有未主動監控或維護的未使用實體。然而，在手動刪除服務連結角色之前，您必須先清除資源。

若要刪除 AWSServiceRoleForAmazonOpenSearchServerless，您必須先[刪除 中的所有 OpenSearch Serverless 集合](serverless-delete.md) AWS 帳戶。

**注意**  
如果 OpenSearch Serverless 在您嘗試刪除資源時正在使用該角色，則刪除動作可能會失敗。若此情況發生，請等待數分鐘後並再次嘗試操作。

**使用 IAM 手動刪除服務連結角色**

使用 IAM 主控台 AWS CLI、 或 AWS API 來刪除 AWSServiceRoleForAmazonOpenSearchServerless 服務連結角色。如需詳細資訊，請參閱《*IAM 使用者指南*》中的[刪除服務連結角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html#delete-service-linked-role)。

## OpenSearch Serverless 服務連結角色的支援區域
<a name="serverless-slr-regions"></a>

OpenSearch Serverless 支援在可使用 OpenSearch Serverless 的每個區域中使用 AWSServiceRoleForAmazonOpenSearchServerless 服務連結角色。 OpenSearch 如需支援區域的清單，請參閱《》中的 [Amazon OpenSearch Serverless 端點和配額](https://docs.aws.amazon.com/general/latest/gr/opensearch-service.html)*AWS 一般參考*。

# 使用服務連結角色建立 OpenSearch Ingestion 管道
<a name="slr-osis"></a>

Amazon OpenSearch Ingestion 使用 AWS Identity and Access Management (IAM) [服務連結角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#iam-term-service-linked-role)。服務連結角色是直接連結至 OpenSearch Ingestion 的唯一 IAM 角色類型。服務連結角色由 OpenSearch Ingestion 預先定義，並包含該服務代表您呼叫其他 AWS 服務所需的所有許可。

OpenSearch Ingestion 使用名為 **AWSServiceRoleForAmazonOpenSearchIngestionService** 的服務連結角色，除非您使用自我管理 VPC，在這種情況下，它使用名為 **AWSServiceRoleForOpensearchIngestionSelfManagedVpce** 的服務連結角色。連接的政策提供角色在您的帳戶和 OpenSearch Ingestion 之間建立虛擬私有雲端 (VPC)，以及將 CloudWatch 指標發佈至您的帳戶所需的許可。

## 許可
<a name="slr-osis-permissions"></a>

`AWSServiceRoleForAmazonOpenSearchIngestionService` 服務連結角色信任下列服務以擔任角色：
+ `osis.amazonaws.com`

名為 的角色許可政策`AmazonOpenSearchIngestionServiceRolePolicy`允許 OpenSearch Ingestion 對指定的資源完成下列動作：
+ 動作：`cloudwatch:namespace": "AWS/OSIS"` 上的 `cloudwatch:PutMetricData`
+ 動作：`arn:aws:ec2:*:*:network-interface/*` 上的 `ec2:CreateTags`
+ 動作：`*` 上的 `ec2:CreateVpcEndpoint`
+ 動作：`*` 上的 `ec2:DeleteVpcEndpoints`
+ 動作：`*` 上的 `ec2:DescribeSecurityGroups`
+ 動作：`*` 上的 `ec2:DescribeSubnets`
+ 動作：`*` 上的 `ec2:DescribeVpcEndpoints`
+ 動作：`*` 上的 `ec2:ModifyVpcEndpoint`

`AWSServiceRoleForOpensearchIngestionSelfManagedVpce` 服務連結角色信任下列服務以擔任角色：
+ `self-managed-vpce.osis.amazonaws.com`

名為 的角色許可政策`OpenSearchIngestionSelfManagedVpcePolicy`允許 OpenSearch Ingestion 對指定的資源完成下列動作：
+ 動作：`*` 上的 `ec2:DescribeSubnets`
+ 動作：`*` 上的 `ec2:DescribeSecurityGroups`
+ 動作：`*` 上的 `ec2:DescribeVpcEndpoints`
+ 動作：`cloudwatch:namespace": "AWS/OSIS"` 上的 `cloudwatch:PutMetricData`

您必須設定許可，IAM 實體 (如使用者、群組或角色) 才可建立、編輯或刪除服務連結角色。如需詳細資訊，請參閱 *IAM 使用者指南*中的[服務連結角色許可](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html#service-linked-role-permissions)。

## 建立 OpenSearch Ingestion 的服務連結角色
<a name="slr-osis-create"></a>

您不需要手動建立服務連結角色，當您在 AWS 管理主控台、 AWS CLI或 AWS API 中[建立 OpenSearch Ingestion 管道](creating-pipeline.md#create-pipeline)時，OpenSearch Ingestion 會為您建立服務連結角色。

若您刪除此服務連結角色，之後需要再次建立，您可以在帳戶中使用相同程序重新建立角色。當您建立 OpenSearch Ingestion 管道時，OpenSearch Ingestion 會再次為您建立服務連結角色。

## 編輯 OpenSearch Ingestion 的服務連結角色
<a name="slr-osis-edit"></a>

OpenSearch Ingestion 不允許您編輯`AWSServiceRoleForAmazonOpenSearchIngestionService`服務連結角色。因為有各種實體可能會參考服務連結角色，所以您無法在建立角色之後變更角色名稱。然而，您可使用 IAM 來編輯角色描述。如需詳細資訊，請參閱《*IAM 使用者指南*》中的[編輯服務連結角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html#edit-service-linked-role)。

## 刪除 OpenSearch Ingestion 的服務連結角色
<a name="slr-osis-deleting"></a>

若您不再使用需要服務連結角色的功能或服務，我們建議您刪除該角色。如此一來，您就沒有未主動監控或維護的未使用實體。然而，在手動刪除服務連結角色之前，您必須先清除資源。

### 清除服務連結角色
<a name="slr-osis-cleanup"></a>

在您使用 IAM 刪除服務連結角色之前，您必須先刪除該角色所使用的任何資源。

**注意**  
如果 OpenSearch Ingestion 在您嘗試刪除資源時使用角色，則刪除可能會失敗。若此情況發生，請等待數分鐘後並再次嘗試操作。

**刪除 `AWSServiceRoleForAmazonOpenSearchIngestionService`或 `AWSServiceRoleForOpensearchIngestionSelfManagedVpce`角色使用的 OpenSearch Ingestion 資源**

1. 導覽至 Amazon OpenSearch Service 主控台，然後選擇**擷取**。

1. 刪除所有管道。如需說明，請參閱[刪除 Amazon OpenSearch 擷取管道](delete-pipeline.md)。

### 刪除 OpenSearch Ingestion 的服務連結角色
<a name="slr-osis-delete"></a>

您可以使用 OpenSearch Ingestion 主控台來刪除服務連結角色。

**刪除服務連結角色 (主控台)**

1. 導覽至 IAM 主控台。

1. 選擇**角色**並搜尋 **AWSServiceRoleForAmazonOpenSearchIngestionService** 或 **AWSServiceRoleForOpensearchIngestionSelfManagedVpce** 角色。

1. 選取角色，然後選擇**刪除**。