如何針對 OpenSearch Service 叢集中的精細分級存取控制問題進行疑難排解?
我在 Amazon OpenSearch Service 叢集中遇到存取控制錯誤或精細分級存取控制問題。
解決方法
先決條件:
- 若要將其他 AWS 服務與 OpenSearch Service 搭配使用,請確定您已為服務 AWS Identity and Access Management (IAM) 角色提供所需的權限。
- 若要為特定索引或儀表板提供精細分級存取控制,請將使用者對映至具備租用戶 Kibana 索引下列權限的角色:
注意: 請將 tenant_name 替換為您的租用戶名稱。OpenSearch 會自動為雜湊產生一個值。.kibana_hash_tenant_name - 若要在欄位層級使用精細分級存取控制,請設定具有所需欄位層級安全性的角色。如需說明,請參閱 OpenSearch 網站上的 Defining roles (定義角色)。接著,若要將使用者對映至角色,請參閱 OpenSearch 網站的Mapping users to roles (將使用者對映至角色)。如需更多資訊,請參閱 OpenSearch 網站的 Field-level security (欄位層級安全性)。
- 若要在文件層級使用精細分級存取控制,請建立具有所需文件層級安全性的 OpenSearch 安全性角色。接著,若要將使用者對映至角色,請參閱 OpenSearch 網站的Mapping users to roles (將使用者對映至角色)。如需更多資訊,請參閱 OpenSearch 網站的 Document-level security (文件層級安全性)。
如果您使用精細分級存取控制並收到錯誤,請根據收到的錯誤採取以下疑難排解動作。
注意: 您無法在 OpenSearch Service 中使用匿名存取。
"security_exception","reason":"no permissions for [action]" 403 錯誤
若要解決此錯誤,請確保 OpenSearch Service 叢集中的使用者或後端角色是否擁有必要的權限。如需必要權限的相關資訊,請參閱 OpenSearch 網站的Permissions (權限)。接著,請確保您已將使用者或後端角色對映至 OpenSearch 安全性角色。如需說明,請參閱 OpenSearch 網站上的 Mapping users to roles (將使用者對映至角色)。
"security_exception","reason":"no permissions for [action]" 錯誤
您必須從還原請求中排除系統索引。如果不這麼做,在還原快照時可能會遇到此錯誤,即使您具備必要權限亦然。
若要解決此問題,請執行下列命令,從還原請求中排除系統索引:
curl -XPOST 'domain-endpoint/_snapshot/snapshot-repository/snapshot-name/_restore' \ -d '{"indices": "-.kibana*,-.opendistro*"}' \ -H 'Content-Type: application/json'
注意: 請將 domain-endpoint 替換為您的網域端點,將 snapshot-repository 替換為您的快照儲存庫,並將 snapshot-name 替換為您的快照名稱。
"Missing role" 錯誤
若要登入 OpenSearch Dashboard,您必須將使用者或後端角色對映到至少一個 OpenSearch 安全性角色。如果不這麼做,在登入 OpenSearch Dashboard 時可能會收到以下錯誤訊息:
"Missing role.No roles available for this user, please contact your system administrator."
如要解決此問題,請參閱 OpenSearch 網站上的 Mapping users to roles (將使用者對映至角色)。
"User: anonymous is not authorized to perform: iam:PassRole" 錯誤
您必須將 manage_snapshots 角色對映至用來註冊手動快照的 IAM 角色。如果不這麼做,當您嘗試註冊手動快照儲存庫時,可能會收到這個錯誤。
若要解決此問題,請完成下列步驟:
- 以管理員使用者身分登入您的 OpenSearch Dashboard。
- 從導覽窗格中,選擇 Security (安全性)。
- 選擇 Roles (角色)。
- 選取 manage_snapshots。
- 選擇 Mapped Users (已對映使用者),然後選擇 Manage Mapping (管理映射)。
- 在 Backend Roles (後端角色) 中,輸入 IAM 角色的 Amazon Resource Name (ARN)。
- 按 Enter 鍵。
- 選擇 Map (對映)。
"User: anonymous is not authorized to perform: es:ESHttp HTTP_Method" 錯誤
請求者必須遵守網域存取政策要求。若未遵守,請求者將會收到 "not authorized to perform" 的錯誤訊息。
若要解決此錯誤,請更新網域存取政策以允許您所傳送的請求類型。若要允許未簽署的請求,請將 Principal (主體) 設為 "AWS": "*"。
然後,根據政策的要求採取下列動作。
政策包含 IAM 主體
如果網域存取政策包含 IAM 主體,則 IAM 主體必須根據 AWS 第 4 版簽署程序簽署請求。在這種情況下,OpenSearch Service 會拒絕未簽署的請求,例如基本授權或匿名存取。
下列命令範例顯示 IAM 角色簽署的請求:
curl -X GET "opensearch_endpoint" \ --user "AWS_ACCESS_KEY_ID":"AWS_SECRET_ACCESS_KEY" \ -H "x-amz-security-token: AWS_SESSION_TOKEN" \ --aws-sigv4 "aws:amz:region:es"
注意: 請將 opensearch_endpoint 替換為您的端點、AWS_ACCESS_KEY_ID 替換為您的存取金鑰、AWS_SECRET_ACCESS_KEY 替換為您的私密存取金鑰、AWS_SESSION_TOKEN 替換為您的工作階段權杖,並將 region 替換為您的 AWS 區域。對於來自 IAM 使用者的請求,請移除 -H "x-amz-security-token: AWS_SESSION_TOKEN" \。
政策僅允許來自特定 IP 位址的請求
如果政策包含 IP 位址條件,並使用 "Principal": { "AWS": "*" } 的開放主體,則您可以使用未簽署的請求來存取 OpenSearch Service。不過,請求必須來自允許的 IP 位址。
**注意:**如果策略包含 IAM 主體且僅允許特定 IP 位址,則 IAM 主體必須簽署請求。此外,請求必須來自允許的 IP 位址。
政策會封鎖特定的 HTTP 動作
請確保網域存取政策允許您請求的 HTTP 方法。例如,如果您傳送 POST 請求,請確保政策中包含 es:ESHttpPost 動作。
"Couldn't find any Elasticsearch data" 錯誤
升級至 OpenSearch Service 7.9 版本後,在具備精細分級存取控制的叢集中建立索引模式時,您可能會收到此錯誤。請確保指派給使用者的角色在相關索引和別名上具備 indices:admin/resolve/index 權限。如需更多資訊,請參閱 OpenSearch 網站上的 Resolve Index API (解決索引 API)。
"401 unauthorized" 錯誤
若要存取具有精細分級存取控制的叢集,您必須使用 **-u ** 旗標進行驗證。例如,下列命令會失敗並顯示 "401 unauthorized" 錯誤訊息:
curl Domain_Endpoint
若要存取您的叢集,請執行下列命令,並使用 **-u ** 旗標以包含您的使用者名稱和密碼:
curl -u 'username:password' Domain_Endpoint
注意: 請將 username 替換為您的使用者名稱、password 替換為您的密碼,並將 Domain_Endpoint 替換為您的網域端點。
執行 curl 命令時,必須使用有效字元。如果您在 curl 命令中將 $ 或 ! 字元與 -u 旗標一起用於主要憑證,則可能會收到 "401 unauthorized" 錯誤。此外,請務必將憑證置於單引號中。
命令範例:
curl -u 'username' Domain_Endpoint
注意: 請將 username 替換為您的使用者名稱,並將 Domain_Endpoint 替換為您的網域端點。
"Authentication finally failed" 錯誤
**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤訊息,請參閱 Troubleshooting errors for the AWS CLI (對 AWS CLI 錯誤進行疑難排解)。此外,請務必使用最新版 AWS CLI。
您必須傳送與網域的使用者類型相符的請求。如果您傳送基本 (使用者名稱/密碼) 驗證要求,但您將網域的主要使用者類型設為 IAM 主體,則會收到此錯誤。如果是主要使用者,您的用戶端必須向網域傳送由 AWS 第 4 版簽署程序簽署的請求。
若要使用 HTTP 基本驗證,請執行以下 update-domain-config AWS CLI 命令,將主要使用者類型變更為內部使用者資料庫:
aws opensearch update-domain-config --domain-name domain-name --advanced-security-options InternalUserDatabaseEnabled=true
注意: 請將 domain-name 替換為您的網域名稱。
相關資訊
OpenSearch 網站上的 Index Managemen (索引管理)
- 語言
- 中文 (繁體)
