教學課程:使用 IAM 主要使用者和 Amazon Cognito 身分驗證設定網域 - Amazon OpenSearch 服務

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

教學課程:使用 IAM 主要使用者和 Amazon Cognito 身分驗證設定網域

本教學涵蓋了一個熱門的 Amazon OpenSearch 服務使用案例,用於精確的存取控制:具有適用於儀表板的 Amazon Cognito 身份驗證的 IAM 主使用 OpenSearch 者。

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

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

在本教學課程中,您會完成下列步驟:

步驟 1:建立主要和有限的 IAM 角色

導覽至 AWS Identity and Access Management (IAM) 主控台並建立兩個獨立的角色:

  • MasterUserRole:具備叢集完整許可並管理角色與角色映射的主要使用者。

  • LimitedUserRole:更受限制的角色,您將向其授予作為主要使用者的有限存取權。

如需建立角色的說明,請參閱使用自訂信任政策建立角色

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

{ "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 身分驗證建立網域

https://console.aws.amazon.com/aos/home/ 瀏覽至 Amazon OpenSearch 服務主控台,並使用以下設定建立網域

  • OpenSearch 1.0 或更新版本,或彈性搜尋 7.8 或更新版本

  • 公用存取

  • MasterUserRole 作為主要使用者啟用的精細存取控制 (在上一個步驟中建立)

  • 為 OpenSearch 儀表板啟用 Amazon Cognito 份驗證。如需啟用 Cognito 身分驗證,以及選取使用者和身分集區的說明,請參閱設定網域以使用 Amazon Cognito 身分驗證

  • 以下網域存取政策:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::{account-id}:root" }, "Action": [ "es:ESHttp*" ], "Resource": "arn:aws:es:{region}:{account-id}:domain/{domain-name}/*" } ] }
  • 要求所有前往網域的流量皆使用 HTTPS

  • N ode-to-node 加密技術

  • 靜態資料加密

步驟 3:設定 Cognito 使用者

建立您的網域時,請按照 Amazon Cognito 開發人員指南中的建立使用者集區,在 Amazon Cognito 中設定主要使用者和受限使用者。最後,按照在 Amazon Cognito 中建立身分集區中的步驟設定您的身分集區。使用者集區和身分集區必須在相同的 AWS 區域。

步驟 4:在 OpenSearch 儀表板中對應角色

現在已設定使用者,您可以以主要使用者身分登入 OpenSearch 儀表板,並將使用者對應至角色。

  1. 返回 OpenSearch 服務主控台並導覽至您建立之網域的 OpenSearch 儀表板 URL。URL 遵循此格式:domain-endpoint/_dashboards/

  2. 使用 master-user 憑證登入。

  3. 選擇 Add sample data (新增範例資料),並新增範例航班資料。

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

  5. 將角色命名為 new-role

  6. 對於 Index (索引),指定 opensearch_dashboards_sample_data_fli* (Elasticsearch 網域上的 kibana_sample_data_fli*)。

  7. 對於 Index permissions (索引許可),請選擇 read (讀取)。

  8. 對於 Document level security (文件層級安全),指定以下查詢:

    { "match": { "FlightDelay": true } }
  9. 如需欄位層級的安全性,請選擇 Exclude (排除),然後指定 FlightNum

  10. 對於 Anonymization (匿名化),請指定 Dest

  11. 選擇建立

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

  13. 傳回角色清單,然後選擇 opensearch_dashboards_user。選擇 Mapped users (已映射的使用者)、Manage mapping (管理映射)。新增 LimitedUserRole 的 ARN 作為後端角色,並選擇 Map (映射)。

步驟 5:測試許可

正確對應角色後,您可以以受限使用者身分登入並測試權限。

  1. 在新的私人瀏覽器視窗中,導覽至網域的 OpenSearch 儀表板 URL,使用limited-user認證登入,然後選擇 [自行探索]。

  2. 移至 Dev Tools (開發工具) 並執行預設搜尋:

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

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

  3. 執行另一項搜尋:

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

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

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