如何使用 SSH 通道從 VPC 外部藉助 Amazon Cognito 身分驗證存取 OpenSearch Dashboards?

上次更新日期:2021 年 8 月 5 日

我的 Amazon OpenSearch Service (Amazon Elasticsearch Service 的繼任者) 叢集是在 virtual private cloud (VPC) 中。我希望使用 SSH 通道從 VPC 外部藉助 Amazon Cognito 身分驗證存取 OpenSearch Dashboards。

簡短描述

在預設情況下,Amazon Cognito 只會為 VPC 中的 AWS Identity and Access Management (IAM) 使用者提供 OpenSearch Dashboards 的存取權。不過,您可以使用 SSH 通道從 VPC 外部存取 OpenSearch Dashboards。

重要事項:請確保從 VPC 外部存取 OpenSearch Dashboards (第三方工具 Kibana 的繼任者) 符合貴組織的安全性要求。

若要使用 SSH 通道從 VPC 外部存取 Dashboards,請執行下列步驟:

1.    建立 Amazon Cognito 使用者集區和身分集區。

2.    在 OpenSearch Service 網域所在的同一 VPC 的公有子網路中,建立 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體。

3.    使用瀏覽器附加元件 (例如 FoxyProxy) 來設定 SOCKS 代理。

4.    創建從本機電腦到 EC2 執行個體的 SSH 通道。

注意您也可以使用 NGINX 代理或用戶端 VPN,透過 Amazon Cognito 身分驗證從 VPC 外部存取 Dashboards。如需詳細資訊,請參閱如何使用 Amazon Cognito 身分驗證從 VPC 外部存取 OpenSearch Dashboards?

5.    (選用) 如果啟用了精細存取控制 (FGAC),請新增 Amazon Cognito 身分驗證角色。

解決方案

建立 Amazon Cognito 使用者集區和身分集區

1.    建立 Amazon Cognito 使用者集區

2.    設定託管使用者集區網域

3.    在 Amazon Cognito 主控台導覽窗格中,選擇 Users and groups (使用者和群組)。

4.    選擇 Create user (建立使用者),然後完成欄位。請務必輸入電子郵件地址。然後,選取 Mark email as verified (將電子郵件標示為已驗證) 核取方塊。

5.    選擇 Groups (群組) 標籤,然後選擇 Create group (建立群組)。在 Precedence (優先順序) 中輸入 0。如需詳細資訊,請參閱在 AWS 管理主控台中建立新群組

6.    再次開啟 Amazon Cognito 主控台

7.    選擇 Manage Identity Pools (管理身分集區),然後選擇 Create new identity pool (建立新的身分集區)。

8.    輸入身分集區的名稱,選取 Enable access to unauthenticated identities (啟用未驗證身分的存取) 核取方塊,然後選擇 Create Pool (建立集區)。

9.    當系統提示您存取 AWS 資源時,請選擇 Allow (允許) 以建立與您的身分集區相關聯的兩個預設角色,一個屬於未驗證身分的使用者,另一個屬於已驗證身分的使用者。

10.    設定您的 OpenSearch Service 網域,以便在 OpenSearch Dashboards 中使用 Amazon Cognito 身分驗證
Cognito User Pool (Cognito 使用者集區) 中,選擇您在步驟 1 建立的使用者集區。
Cognito Identity Pool (Cognito 身分集區) 中,選擇您在步驟 8 建立的身分集區。

11.    設定您的 OpenSearch Service 網域,以使用類似於下列的存取政策。替換下列數值:
以您的 AWS 帳戶 ID 替換 account-id
以您的 Amazon Cognito 身分集區名稱替換 identity-name
以您的網域名稱替換 domain-name
以網域所在的區域,例如 us-east-1 替換 Region

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:sts::account-id:assumed-role/Cognito_identity-nameAuth_Role/CognitoIdentityCredentials"
      },
      "Action": "es:*",
      "Resource": "arn:aws:es:Region:account-id:domain/domain-name/*"
    }
  ]
}

舉例來說,下列存取政策會使用這些數值:

AWS 帳戶 ID:111122223333
Amazon Cognito 身分集區名稱:MyIdentityPool
網域名稱:MyDomain
地區:us-east-1

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:sts::111122223333:assumed-role/Cognito_MyIdentityPoolAuth_Role/CognitoIdentityCredentials"
      },
      "Action": "es:*",
      "Resource": "arn:aws:es:us-east-1:111122223333:domain/MyDomain/*"
    }
  ]
}

建立 EC2 執行個體和設定安全群組規則

1.    在 OpenSearch Services 網域所在的 VPC 的公有子網路上,啟動 EC2 執行個體。在 Configure Instance Details (設定執行個體詳情) 頁面中,確保將 Auto-assign Public IP (自動指派公有 IP) 設定為 Enable (啟用)。
注意:在下列步驟中,EC2 執行個體稱為 tunnel_ec2

2.    將傳入規則加入tunnel_ec2 執行個體相關聯的安全群組。這些規則必須允許流量從您將會用來存取 OpenSearch Service Dashboard 的本機電腦 IP 地址,傳輸到 8157 和 22 連接埠。

3.    將傳入規則加入與 OpenSearch Service 網域相關聯的安全群組。此規則必須允許流量從 tunnel_ec2 執行個體的私有 IP 地址流入。

設定 SOCKS 代理

1.     將 FoxyProxy 標準加入 Google Chrome

2.    開啟 FoxyProxy,然後選擇 Options (選項)。

3.    在 Proxy mode (代理模式) 的下拉式清單中,選擇 Use proxies based on their pre-defined patterns and priorities (根據預先定義的模式和優先順序使用代理)。

4.    選擇 Add New Proxy (新增代理)。

5.    選取 General (一般) 標籤,然後輸入 Proxy Name (代理名稱),例如 "Dashboards Proxy"。

6.    在 Proxy Details (代理詳情) 標籤中,確定已選取 Manual Proxy Configuration (手動設定代理),然後完成下列欄位:
Host or IP Address (主機或 IP 地址) 中,輸入 localhost
Port (連接埠) 中,輸入 8157
選擇 SOCKS proxy (SOCKS 代理)
選擇 SOCKS v5

7.    選擇 URL Patterns (URL 模式) 標籤。

8.    選擇 Add new pattern (新增模式),然後完成下列欄位:
Pattern Name (模式名稱) 中,輸入適當的名稱,例如 "VPC Endpoint"。
URL pattern (URL 模式) 中,輸入 Dashboards 的 VPC 端點。確定已選取 Whitelist URLs (白名單 URL)。確定已選取 Wildcards (萬用字元)。

9.     選擇 Save (儲存)。

建立 SSH 通道

1.    在您將會用來存取 Dashboards 儀表板的本機電腦上執行下列命令。替換下列項目:
mykeypair.pem:在您啟動 tunnel_ec2 EC2 執行個體時,指定金鑰對的 .pem 檔案名稱。
public_dns_nametunnel_ec2 EC2 執行個體的公有 DNS。如需詳細資訊,請參閱檢視 EC2 執行個體的 DNS 主機名稱

ssh -i "mykeypair.pem"  ec2-user@public_dns_name -ND 8157

2.    在瀏覽器中輸入 Dashboards 端點。螢幕會顯示 Dashboards 的 Amazon Cognito 登入頁面。

(選用) 如果啟用了精細存取控制 (FGAC),請新增 Amazon Cognito 身分驗證角色

如果您在 OpenSearch Service 叢集上啟用了精細存取控制 (FGAC),您可能會遇到「沒有角色」的錯誤。若要解決「沒有角色」的錯誤,請執行下列步驟:

1.    登入 AWS 管理主控台

2.    在 Analytics (分析) 中,選擇 Amazon OpenSearch Service

3.    選擇 Actions (動作)。

4.    選擇 Modify master user (修改主要使用者)。

5.    選擇 Set IAM ARN (設定 IAM ARN) 作為您的主要使用者

6.    在 IAM ARN 欄位中,新增通過 Amazon Cognito 身分驗證的 ARN 角色。

7.    選擇 Submit (提交)。

如需有關精細存取控制的詳細資訊,請參閱教學:IAM 主要使用者和 Amazon Cognito