

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

# 使用 啟用 SAML 聯合 AWS Identity and Access Management
<a name="application-enable-SAML-identity-federation"></a>

OpenSearch UI 支援安全性聲明標記語言 2.0 (SAML)，這是許多身分提供者使用的開放標準。這會啟用與 AWS Identity and Access Management (IAM) 的聯合身分。透過此支援，您帳戶或組織中的使用者可以透過擔任 IAM 角色直接存取 OpenSearch UI。您可以為您的最終使用者建立身分提供者起始 (IdP) 單一登入體驗，他們可以在外部身分提供者中進行身分驗證，並直接路由到 OpenSearch UI 中定義的頁面。您也可以透過設定最終使用者或群組來擔任具有不同許可的不同 IAM 角色，以存取 OpenSearch UI 和相關聯的資料來源，來實作精細存取控制。

本主題提供設定搭配 OpenSearch UI 使用 SAML 的step-by-step說明。在這些程序中，我們使用設定 Okta 身分和存取管理應用程式的步驟做為範例。其他身分提供者的組態步驟類似，例如 Azure Active Directory 和 Ping。

**Topics**
+ [步驟 1：設定身分提供者應用程式 (Okta)](#SAML-identity-federation-step-1)
+ [步驟 2：設定 Okta 的 AWS 組態](#SAML-identity-federation-step-2)
+ [步驟 3：在 IAM 中建立 Amazon OpenSearch Service 存取政策](#SAML-identity-federation-step-3)
+ [步驟 4：使用 SAML 驗證身分提供者起始的單一登入體驗](#SAML-identity-federation-step-4)
+ [步驟 5：設定以 SAML 屬性為基礎的精細存取控制](#SAML-identity-federation-step-5)

## 步驟 1：設定身分提供者應用程式 (Okta)
<a name="SAML-identity-federation-step-1"></a>

若要搭配 OpenSearch UI 使用 SAML，第一步是設定您的身分提供者。

**任務 1：建立 Okta 使用者**

1. 以具有管理權限的使用者身分登入您的 Okta 組織，網址為 https：//[https://login.okta.com/](https://login.okta.com/)。

1. 在管理員主控台的導覽窗格中的**目錄**下，選擇**人物**。

1. 選擇**新增人員**。

1. 針對**名字**，輸入使用者的名字。

1. 針對**姓氏**，輸入使用者的姓氏。

1. 針對**使用者名稱**，以電子郵件格式輸入使用者的使用者名稱。

1. 選擇**我將會設定密碼**並輸入密碼 

1. （選用） 如果您不希望**使用者在第一次登入時變更密碼**，請清除使用者必須在第一次登入時變更密碼方塊。

1. 選擇**儲存**。

**任務 2：建立和指派群組**

1. 以具有管理權限的使用者身分登入您的 Okta 組織，網址為 https：//[https://login.okta.com/](https://login.okta.com/)。

1. 在管理員主控台的導覽窗格中的**目錄**下，選擇**群組**。

1. 選擇 **Add group (新增群組)**。

1. 輸入群組名稱，然後選擇**儲存**。

1. 選擇新建立的群組，然後選擇**指派人員**。

1. 選擇加號 (**\$1**)，然後選擇**完成**。

1. （選用） 重複步驟 1–6 以新增更多群組。

**任務 3：建立 Okta 應用程式**

1. 以具有管理權限的使用者身分登入您的 Okta 組織，網址為 https：//[https://login.okta.com/](https://login.okta.com/)。

1. 在管理員主控台的導覽窗格中**的應用程式**下，選擇**應用程式**。

1.  選擇 **Create App Integration** (建立應用程式整合)。

1. 選擇 SAML 2.0 作為登入方法，然後選擇**下一步**。

1.  輸入應用程式整合的名稱 （例如 **OpenSearch\$1UI**)，然後選擇**下一步**。

1. 在應用程式中輸入下列值；您不需要變更其他值：

   1.  1. 在**單一登入 URL **中，輸入 **https://signin.aws.amazon.com/saml** 表示商業 AWS 區域，或輸入您區域特定的 URL。

   1. 2. 針對**對象 URI (SP 實體 ID)**，輸入 **urn:amazon:webservices**。

   1. 3. 針對**名稱 ID 格式**，輸入 **EmailAddress**。

1. 選擇**下一步**。

1. 選擇**我是新增內部應用程式的 Okta 客戶**，然後選擇**這是我們建立的內部應用程式**。

1. 選擇**完成**。

1. 選擇**指派**，然後選擇**指派**。

1. 選擇**指派給群組**，然後選取您要新增的群組旁的**指派**。

1. 選擇**完成**。

**任務 4：設定 Okta 進階組態**

建立自訂 SAML 應用程式後，請完成下列步驟：

1. 以具有管理權限的使用者身分登入您的 Okta 組織，網址為 https：//[https://login.okta.com/](https://login.okta.com/)。

   在管理員主控台**的一般**區域中，選擇 **SAML 設定**下的**編輯**。

1. 選擇**下一步**。

1. 使用格式將**預設轉送狀態**設定為 OpenSearch UI 端點：

   `https://region.console.aws.amazon.com/aos/home?region=region#opensearch/applications/application-id/redirectToDashboardURL`. 

   以下是範例：

   `https://us-east-2.console.aws.amazon.com/aos/home?region=us-east-2#opensearch/applications/abc123def4567EXAMPLE/redirectToDashboardURL` 

1. 在**屬性陳述式 （選用）** 下，新增下列屬性：

   1. 使用角色屬性，以逗號分隔格式提供 IAM **角色**和身分提供者。在稍後的步驟中，您將在設定 AWS 組態時使用相同的 IAM 角色和身分提供者。

   1. 設定 **RoleSessionName** 的 **user.login**。這是做為擔任角色時所發出臨時登入資料的識別符。

   如需參考：    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/opensearch-service/latest/developerguide/application-enable-SAML-identity-federation.html)

1. 新增屬性屬性之後，請選擇**下一步**，然後選擇**完成**。

您的屬性格式應類似於下圖所示的屬性。**預設轉送狀態**值是在您帳戶或組織中最終使用者完成 Okta 的單一登入驗證後定義登陸頁面的 URL。您可以將其設定為 OpenSearch UI 中的任何頁面，然後將該 URL 提供給其預期的最終使用者。

![\[「SAML 2.0」區域會報告應用程式的預設轉送狀態 URL 和中繼資料 URL。\]](http://docs.aws.amazon.com/zh_tw/opensearch-service/latest/developerguide/images/ui-saml-2.0-area-okta.png)


## 步驟 2：設定 Okta 的 AWS 組態
<a name="SAML-identity-federation-step-2"></a>

完成下列任務以設定 Okta 的 AWS 組態。

**任務 1：收集 Okta 資訊**

在此步驟中，您將需要收集 Okta 資訊，以便稍後進行設定 AWS。

1. 以具有管理權限的使用者身分登入您的 Okta 組織，網址為 https：//[https://login.okta.com/](https://login.okta.com/)。

1. 在**登入**索引標籤的頁面右下角，選擇**檢視 SAML 設定指示**。

1. 請記下**身分提供者單一登入 URL **的值。您可以在連線至 SQL [Workbench/J](https://www.sql-workbench.eu/) 等任何第三方 SQL 用戶端時使用此 URL。

1. 在區塊 4 中使用身分提供者中繼資料，然後將中繼資料檔案儲存為 .xml 格式 （例如 `metadata.xml`)。

**任務 2：建立 IAM 提供者**

若要建立 IAM 提供者，請完成下列步驟：

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

1. 在導覽窗格的**存取管理 **下，選擇**身分提供者**。

1. 選擇 **Add provider** (新增提供者)。

1. 針對**提供者類型**選取 **SAML**。

1. 針對**提供者名稱**輸入名稱。

1. 針對**中繼資料文件**，選擇**選擇檔案**並上傳您先前下載的中繼資料檔案 (.xml)。

1. 選擇 **Add provider** (新增提供者)。

**任務 3：建立 IAM 角色**

若要建立您的 AWS Identity and Access Management 角色，請完成下列步驟：

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

1. 在導覽窗格的**存取管理 **下，選擇**角色**。

1. 選擇建**立角色**。

1. 針對**信任的實體類型**，選取 **SAML 2.0 聯合。**

1. 針對以 **SAML 2.0 為基礎的提供者**，選擇您先前建立的身分提供者。

1. 選取**允許程式設計和 AWS 管理主控台 存取**。

1. 選擇**下一步**。

1. 在**許可政策**清單中，選取授予 OpenSearch Service 許可之政策的核取方塊，例如 AWS ，受管政策 **AmazonOpenSearchServiceFullAccess**。

1. 選擇**下一步**。

1. 在**檢閱**區域中，針對**角色名稱**輸入角色的名稱，例如 **oktarole**。

1. （選用） 針對**描述**，輸入角色用途的簡短描述。

1. 選擇建**立角色**。

1. 導覽至您剛建立的角色，選擇**信任關係**索引標籤，然後選擇**編輯信任政策**。

1. 在**編輯陳述式**窗格**的新增 STS 動作**下，選取 **TagSession** 的方塊。

1. 選擇**更新政策**。

## 步驟 3：在 IAM 中建立 Amazon OpenSearch Service 存取政策
<a name="SAML-identity-federation-step-3"></a>

了解如何為 OpenSearch 存取控制設定 IAM 角色。透過 IAM 角色，您可以為 Okta 使用者群組實作精細存取控制，以存取 OpenSearch 資源。本主題示範使用兩個範例群組的 IAM 角色型組態。

------
#### [ Sample group: Alice ]

要求:

```
GET _plugins/_security/api/roles/alice-group
```

結果：

```
{
  "alice-group": {
    "reserved": false,
    "hidden": false,
    "cluster_permissions": [
      "unlimited"
    ],
    "index_permissions": [
      {
        "index_patterns": [
          "alice*"
        ],
        "dls": "",
        "fls": [],
        "masked_fields": [],
        "allowed_actions": [
          "indices_all"
        ]
      }
    ],
    "tenant_permissions": [
      {
        "tenant_patterns": [
          "global_tenant"
        ],
        "allowed_actions": [
          "kibana_all_write"
        ]
      }
    ],
    "static": false
  }
}
```

------
#### [ Sample group: Bob ]

要求:

```
GET _plugins/_security/api/roles/bob-group
```

結果：

```
{
  "bob-group": {
    "reserved": false,
    "hidden": false,
    "cluster_permissions": [
      "unlimited"
    ],
    "index_permissions": [
      {
        "index_patterns": [
          "bob*"
        ],
        "dls": "",
        "fls": [],
        "masked_fields": [],
        "allowed_actions": [
          "indices_all"
        ]
      }
    ],
    "tenant_permissions": [
      {
        "tenant_patterns": [
          "global_tenant"
        ],
        "allowed_actions": [
          "kibana_all_write"
        ]
      }
    ],
    "static": false
  }
}
```

------

您可以使用後端角色映射將 Amazon OpenSearch Service 網域角色映射至 IAM 角色，如下列範例所示：

```
{
  "bob-group": {
    "hosts": [],
    "users": [],
    "reserved": false,
    "hidden": false,
    "backend_roles": [
      "arn:aws:iam::111222333444:role/bob-group"
    ],
    "and_backend_roles": []
  },
  "alice-group": {
    "hosts": [],
    "users": [],
    "reserved": false,
    "hidden": false,
    "backend_roles": [
      "arn:aws:iam::111222333444:role/alice-group"
    ],
    "and_backend_roles": []
  }
}
```

## 步驟 4：使用 SAML 驗證身分提供者起始的單一登入體驗
<a name="SAML-identity-federation-step-4"></a>

開啟**預設轉送狀態**的 URL 以開啟 Okta 身分驗證頁面。輸入最終使用者的登入資料。您會自動重新導向至 OpenSearch UI。

您可以選擇導覽面板底部的使用者圖示來檢查目前的登入資料，如下圖所示：

![\[在 Okta「設定和設定」頁面中選擇使用者圖示會顯示目前使用者的登入資料。\]](http://docs.aws.amazon.com/zh_tw/opensearch-service/latest/developerguide/images/ui-okta-user-icon.png)


您也可以存取導覽面板底部的開發人員工具，並在主控台中執行查詢，來驗證使用者的精細存取控制許可。以下是範例查詢。

------
#### [ Example 1: Displays information about the current user ]

要求:

```
GET _plugins/_security/api/account
```

結果：

```
{
  "user_name": "arn:aws:iam::XXXXXXXXXXXX:role/bob-group",
  "is_reserved": false,
  "is_hidden": false,
  "is_internal_user": false,
  "user_requested_tenant": null,
  "backend_roles": [
    "arn:aws:iam::XXXXXXXXXXXX:role/bob-group"
  ],
  "custom_attribute_names": [],
  "tenants": {
    "global_tenant": true,
    "arn:aws:iam::XXXXXXXXXXXX:role/bob-group": true
  },
  "roles": [
    "bob-group"
  ]
}
```

------
#### [ Example 2: Displays actions permitted for a user ]

要求:

```
GET bob-test/_search
```

結果：

```
{
  "took": 390,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 1,
      "relation": "eq"
    },
    "max_score": 1,
    "hits": [
      {
        "_index": "bob-test",
        "_id": "ui01N5UBCIHpjO8Jlvfy",
        "_score": 1,
        "_source": {
          "title": "Your Name",
          "year": "2016"
        }
      }
    ]
  }
}
```

------
#### [ Example 3: Displays actions not permitted for a user ]

要求:

```
GET alice-test
```

結果：

```
{
  "error": {
    "root_cause": [
      {
        "type": "security_exception",
        "reason": "no permissions for [indices:admin/get] and User [name=arn:aws:iam::111222333444:role/bob-group, backend_roles=[arn:aws:iam::111222333444:role/bob-group], requestedTenant=null]"
      }
    ],
    "type": "security_exception",
    "reason": "no permissions for [indices:admin/get] and User [name=arn:aws:iam::111222333444:role/bob-group, backend_roles=[arn:aws:iam::111222333444:role/bob-group], requestedTenant=null]"
  },
  "status": 403
}
```

------

## 步驟 5：設定以 SAML 屬性為基礎的精細存取控制
<a name="SAML-identity-federation-step-5"></a>

透過 Amazon OpenSearch Service，您可以將精細存取控制與 SAML 搭配使用，以動態方式將身分提供者的使用者和群組映射至 OpenSearch 精細存取控制使用者和角色。您可以將這些角色範圍限定在特定 OpenSearch 網域和無伺服器集合，並定義索引層級許可和文件層級安全性。

**注意**  
如需精細存取控制的詳細資訊，請參閱 [Amazon OpenSearch Service 中的精細存取控制](fgac.md)。

**Topics**
+ [精細存取控制的 SAML 屬性](#saml-fgac-key-attributes)
+ [任務 1：設定 Okta 進行精細存取控制](#configure-okta-fgac)
+ [任務 2：在 OpenSearch 網域中設定 SAML](#configure-opensearch-domain-fgac)
+ [任務 3：在 OpenSearch Serverless 集合中設定 SAML](#saml-configure-collections)

### 精細存取控制的 SAML 屬性
<a name="saml-fgac-key-attributes"></a>

**subjectKey**  
映射至唯一使用者屬性，例如電子郵件或使用者名稱，以識別要進行身分驗證的使用者。

**rolesKey**  
映射至 IdP 中的群組或角色屬性，以決定角色或授權許可。

### 任務 1：設定 Okta 進行精細存取控制
<a name="configure-okta-fgac"></a>

**設定 Okta 進行精細存取控制**

1. 在屬性**陳述式**區段中為 OpenSearch 使用者主體新增屬性：
   + 名稱：`UserName`
   + 值：`${user-email}`

   此屬性用作 OpenSearch 精細存取控制組態中用於身分驗證的**主體金鑰**。

1. 在群組屬性**陳述式區段中新增角色的群組屬性**：
   + 名稱：`groups`
   + 篩選條件： `OpenSearch_xxx`

   此屬性用作將**群組映射至 OpenSearch 精細存取控制角色以進行授權的角色金鑰**。 OpenSearch 

### 任務 2：在 OpenSearch 網域中設定 SAML
<a name="configure-opensearch-domain-fgac"></a>

**在 OpenSearch 網域中設定 SAML**

1. 在 AWS 管理主控台中，識別您要為 OpenSearch UI 使用者啟用精細分級存取控制的 OpenSearch Service 網域。

1. 導覽至特定網域的詳細資訊頁面。

1. 選取**安全組態**索引標籤，然後按一下**編輯**。

1. **透過 IAM Federate 展開 SAML**。

1. 輸入您在 Okta 中定義的 `roleKey` `subjectKey`和 。

1. **SelectSave 變更**。

您也可以使用 設定精細存取控制 AWS CLI。

```
aws opensearch create-domain \
--domain-name testDomain \
--engine-version OpenSearch_1.3 \
--cluster-config InstanceType=r5.xlarge.search,InstanceCount=1,DedicatedMasterEnabled=false,ZoneAwarenessEnabled=false,WarmEnabled=false \
--access-policies '{"Version": "2012-10-17",		 	 	 "Statement":[{"Effect":"Allow","Principal":{"AWS":"*"},"Action":"es:*","Resource":"arn:aws:es:us-east-1:12345678901:domain/neosaml10/*"}]}' \
--domain-endpoint-options '{"EnforceHTTPS":true,"TLSSecurityPolicy":"Policy-Min-TLS-1-2-2019-07"}' \
--node-to-node-encryption-options '{"Enabled":true}' \
--encryption-at-rest-options '{"Enabled":true}' \
--advanced-security-options '{"Enabled":true,"InternalUserDatabaseEnabled":true,"MasterUserOptions":{"MasterUserName":"********","MasterUserPassword":"********"}, "IAMFederationOptions":{"Enabled": true,"SubjectKey":"TestSubjectKey","RolesKey":"TestRolesKey"}}' \
--ebs-options "EBSEnabled=true,VolumeType=gp2,VolumeSize=300" \
--no-verify-ssl \
--endpoint-url https://es.us-east-1.amazonaws.com \
--region us-east-1
```

若要更新現有的網域：

```
aws opensearch update-domain-config \
--domain-name testDomain \
--advanced-security-options '{"Enabled":true,"InternalUserDatabaseEnabled":true,"MasterUserOptions":{"MasterUserName":"********","MasterUserPassword":"********"}, "IAMFederationOptions":{"Enabled": true,"SubjectKey":"TestSubjectKey","RolesKey":"TestRolesKey"}}' \
--ebs-options "EBSEnabled=true,VolumeType=gp2,VolumeSize=300" \
--no-verify-ssl \
--endpoint-url https://es.us-east-1.amazonaws.com \
--region us-east-1
```

### 任務 3：在 OpenSearch Serverless 集合中設定 SAML
<a name="saml-configure-collections"></a>

**在 OpenSearch Serverless 中設定以 SAML 為基礎的精細存取控制**

1. 開啟 AWS 管理主控台 並導覽至 Amazon OpenSearch Service。

1. 在導覽窗格的**無伺服器**下，選擇**安全性**，然後選擇**身分驗證**。

1. 在 **IAM 聯合**區段中，選取**編輯**。

   您可以使用此組態控制以 SAML 屬性為基礎的精細存取控制。IAM 聯合預設為停用。

1. 選取**啟用 IAM 聯合**。

1. 輸入您在 Okta 中定義的 `subjectKey`和 `roleKey`值。

   如需詳細資訊，請參閱[精細存取控制的 SAML 屬性](#saml-fgac-key-attributes)。

1. 選取**儲存**。

1. 在**無伺服器**下的導覽窗格中，選擇**資料存取政策**。

1. 更新現有的政策或建立新的政策。

1. 展開規則，選擇**新增主體**，然後選擇 **IAM 聯合身分使用者和群組**。

1. 新增必要的委託人，然後選擇**儲存**。

1. 選擇 **Grant** (授予)。

1. 在此規則下，執行下列動作：
   + 選取您要為所選委託人定義的許可。
   + 指定您要套用許可的集合。
   + 或者，定義索引層級許可。
**注意**  
您可以建立多個規則，將不同的許可指派給不同的委託人群組。

1. 完成時，選擇**儲存**。

1. 選擇**建立**。

或者，您可以使用 CLI 來建立集合的安全組態，如下所示：

```
aws opensearchserverless create-security-config --region "region"  --type iamfederation --name "configuration_name" --description "description" --iam-federation-options '{"groupAttribute":"GroupKey","userAttribute":"UserKey"}'
```