本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
OpenSearch Dashboards 的 SAML 身分驗證
OpenSearch Dashboards 的 SAML 身分驗證可讓您使用現有身分提供者,以便在執行 OpenSearch 或 Elasticsearch 6.7 或更新版本的 Amazon OpenSearch Service 網域上提供 Dashboards 的單一登入 (SSO)。若要使用 SAML 身分驗證,您必須啟用精細存取控制。
不是透過 Amazon Cognito 或內部使用者資料庫進行身分驗證,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 組態概觀
本文件假設您擁有現有的身分提供者並且熟悉它。我們無法為您的確切供應商提供詳細的設定步驟,僅適用於您的 OpenSearch Service 網域。
OpenSearch Dashboards 登入流程可採用以下兩種形式之一:
-
服務供應商 (SP) 已啟動:您瀏覽至 Dashboards (例如
https://
),它會將您重新引導到登入畫面。登入後,身分提供者會將您重新引導至 Dashboards。my-domain
.us-east-1
.es.amazonaws.com/_dashboards -
身分提供者 (IdP) 已啟動:瀏覽至身分提供者,登入並從應用程式目錄中選擇 OpenSearch Dashboards。
OpenSearch Service 提供兩個單一登入 URL,即 SP 啟動和 IdP 啟動,但您只需要一個,即符合您想要的 OpenSearch Dashboards 登入流程即可。
無論您使用哪種身分驗證類型,目標是透過身分提供者登入,並接收包含您的使用者名稱 (必要) 和任何後端角色 (選用,但建議使用) 的 SAML 聲明。此資訊允許精細存取控制以便將許可指派給 SAML 使用者。在外部身分提供者中,後端角色通常稱為「角色」或「群組」。
考量事項
設定 SAML 身分驗證時請考量下列事項:
-
由於 IdP 中繼資料檔案的大小,我們強烈建議使用 AWS 主控台來設定 SAML 身分驗證。
-
網域一次只支援一個 Dashboards 身分驗證方法。如果您啟用 OpenSearch Dashboards 的 Amazon Cognito 身分驗證,則必須先將其停用才可啟用 SAML 身分驗證。
-
如果您將網路負載平衡器與 SAML 搭配使用,您必須先建立自訂端點。如需詳細資訊,請參閱為 Amazon OpenSearch Service 建立自訂端點。
-
服務控制政策 (SCP) 在非 IAM 身分 (例如 Amazon OpenSearch Serverless & SAML 中的 SAML 和 Amazon OpenSearch Service 的基本內部使用者授權) 的情況下,將不適用或進行評估。
VPC 網域的 SAML 身分驗證
SAML 不需要身分提供者和服務供應商之間的直接通訊。因此,即使您的 OpenSearch 網域託管在私有 VPC 中,只要您的瀏覽器能夠與您的 OpenSearch 叢集和身分提供者通訊,則您仍可以使用 SAML。您的瀏覽器本質上充當身分提供者和服務供應商之間的媒介。如需有關解釋 SAML 身分驗證流程的實用圖表,請參閱 Okta 文件
修改網域存取政策
在設定 SAML 身分驗證之前,您必須更新網域存取政策,以允許 SAML 使用者存取網域。否則,您將看到存取遭拒錯誤。
我們建議您採用下列網域存取政策,該政策提供對網域上子資源 (/*
) 的完整存取權:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": "es:ESHttp*", "Resource": "domain-arn/*" } ] }
若要讓政策更具限制性,您可以將 IP 地址條件新增至政策。此條件只會限制對指定 IP 地址範圍或子網路的存取。例如,下列政策僅允許從 192.0.2.0/24 子網路存取:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": [ "es:ESHttp*" ], "Condition": { "IpAddress": { "aws:SourceIp": [ "192.0.2.0/24" ] } }, "Resource": "domain-arn/*" } ] }
注意
開放網域存取政策要求在您的網域上啟用精細的存取控制,否則您會看到下列錯誤:
To protect domains with public access, a restrictive policy or fine-grained
access control is required.
如果您的主要使用者或內部使用者已設定強健的密碼,則從安全角度而言,在使用精細存取控制時,保持政策開啟可能是可接受的。如需詳細資訊,請參閱Amazon OpenSearch Service 中的精細存取控制。
設定 SP 或 IdP 啟動的身分驗證
這些步驟說明如何透過 OpenSearch Dashboards 的 SP 啟動的或 IdP 啟動的身分驗證來啟用 SAML 身分驗證。如需了解啟用兩者所需的額外步驟,請參閱同時啟用 SP 和 IdP 啟動的身分驗證。
步驟 1:啟用 SAML 身分驗證
您可以在網域建立期間啟用 SAML 身分驗證,或在現有網域上選擇 Actions (動作)、Edit security configuration (編輯安全組態)來啟用 SAML 身分驗證。根據您選擇的動作,以下步驟略有不同。
在網域組態中,於 SAML authentication for OpenSearch Dashboards/Kibana (OpenSearch Dashboards/Kibana 的 SAML 身分驗證) 下,選取 Enable SAML authentication (啟用 SAML 身分驗證)。
步驟 2:設定身分提供者
根據設定 SAML 身分驗證的時間,執行下列步驟。
如果您正在建立新網域
如果您正在建立新網域,OpenSearch Service 還無法產生服務提供者實體 ID 或 SSO URL。身分提供者需要這些值才能正確啟用 SAML 身分驗證,但只有在建立網域之後才能產生這些值。若要在網域建立期間處理此相互依存性,您可以在 IdP 組態中提供臨時值,以產生必要的中繼資料,然後在網域處於作用中狀態時加以更新。
如果您使用的是自訂端點,則可以推斷 URL 為何。例如,如果自訂端點是 www.
,服務提供者實體 ID 將會是 custom-endpoint
.comwww.
,IdP 起始的 SSO URL 將會是 custom-endpoint
.comwww.
,並且 SP 起始的 SSO URL 將會是 custom-endpoint
.com/_dashboards/_opendistro/_security/saml/acs/idpinitiatedwww.
。在建立網域之前,您可以使用這些值來設定身分提供者。如需範例,請參閱下一區段。custom-endpoint
.com/_dashboards/_opendistro/_security/saml/acs
注意
您不能使用雙堆疊端點登入,因為 HTTP 請求的 FQDN 與 SAML 請求的 FQDN 不同。如果您想要使用雙堆疊端點登入,OpenSearch 管理員將需要設定自訂端點,並將 CNAME 值設定為雙堆疊端點。
如果您未使用自訂端點,可以在 IdP 中輸入臨時值以產生所需的中繼資料,然後在網域處於作用中後加以更新。
例如,在 Okta 中,您可以將 https://
輸入 Single sign on URL (單一登入 URL) 和 Audience URI (SP Entity ID) (對象 URI (SP 實體 ID)) 欄位,如此可產生中繼資料。然後,在網域處於作用中狀態後,您可以從 OpenSearch Service 中擷取正確的值並在 Okta 中加以更新。如需說明,請參閱 步驟 6:更新 IdP URL。temp-endpoint
.amazonaws.com
如果您正在編輯現有網域
如果您要在現有網域上啟用 SAML 身分驗證,請複製服務提供者實體 ID 和其中一個 SSO URL。如需有關使用哪個 URL 的指引,請參閱 SAML 組態概觀。

使用這些值來設定身分提供者。這是程序中最複雜的部分,不幸的是,術語和步驟因供應商而千差萬別。請咨詢供應商文件。
例如,在 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 受眾。您也需要指定下列屬性映射: Subject=${user:subject}:format=unspecified
和 Role=${user:groups}:format=uri
。
在 Auth0 中,您可以建立一般 Web 應用程式並啟用 SAML 2.0 附加元件。在 Keycloak 中,您可以建立用戶端。
步驟 3:匯入 IdP 中繼資料
設定身分提供者之後,它會產生 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 欄位
輸入 IdP 中繼資料之後,請在 OpenSearch Service 主控台中設定下列其他欄位:
-
IdP entity ID (IdP 實體 ID) – 從中繼資料檔案中複製
entityID
屬性的值,然後貼至此欄位。許多身分提供者也會將此值顯示為組態後摘要的一部分。有些供應商稱之為「發行者」。 -
SAML master username (SAML 主要使用者名稱) 和 SAML master backend role (SAML 主要後端角色) – 您指定的使用者和/或後端角色會收到叢集完整許可,相當於新主要使用者,但只能在 OpenSearch Dashboards 中使用這些許可。
例如,在 Okta 中,您可能擁有屬於群組
admins
的使用者jdoe
。如果您將jdoe
新增到 SAML 主要使用者名稱欄位,只有該使用者會收到完整許可。如果您將admins
新增到 SAML 主要後端角色欄位中,屬於admins
群組的任何使用者都會收到完整許可。注意
SAML 聲明的內容必須完全符合您用於 SAML 主要使用者名稱和 SAML 主要角色的字串。某些身分供應商會在其使用者名稱之前新增字首,這可能會導致難以診斷的不相符。在身分提供者使用者介面中,您可能會看到
jdoe
,但 SAML 聲明可能包含auth0|jdoe
。永遠使用 SAML 聲明中的字串。
許多身分提供者可讓您在設定程序期間檢視範例聲明,諸如 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:(選用) 設定其他設定
在 Additional settings (其他設定) 下,設定下列選用欄位:
-
Subject key (主體金鑰)– 您可以將此欄位留空,將 SAML 聲明的
NameID
元素用於使用者名稱。如果您的聲明不使用此標準元素,而是將使用者名稱作為自訂屬性,請在此處指定該屬性。 -
Roles key (角色金鑰)– 如果您想要使用後端角色 (建議使用),請在此欄位中從聲明中指定屬性,例如
role
或group
。這是 SAML-tracer等工具可以提供協助的另一種情況。 -
Session time to live (工作階段存留時間) – 依預設,OpenSearch Dashboards 會在 24 小時後將使用者登出。您可以透過指定新值,將此值設定為 60 至 1,440 分鐘 (24 小時) 之間的任何數字。
如果您對於組態感到滿意,請儲存網域。
步驟 6:更新 IdP URL
如果您在建立網域時啟用 SAML 身分驗證,則必須在 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 使用者映射至角色
當網域狀態為作用中且 IdP 的設定都正確無誤後,請瀏覽至 OpenSearch Dashboards。
-
如果您選擇 SP 啟動的 URL,請導覽至
。若要直接登入特定租用戶,您可以將domain-endpoint
/_dashboards?security_tenant=
附加至 URL。tenant-name
-
如果您選擇 IdP 啟動的 URL,請導覽至身分提供者的應用程式目錄。
在這兩種情況下,請以 SAML 主要使用者或屬於 SAML 主要後端角色的使用者身分登入。若要繼續步驟 7 的範例,請以 jdoe
或 admins
群組成員身分登入。
OpenSearch Dashboards 載入後,選擇 Security (安全性) 和 Roles (角色)。接著,映射角色以允許其他使用者存取 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 啟動的身分驗證
如果您要設定 SP 和 IdP 啟動的身分驗證,則必須透過身分提供者進行設定。例如,在 Okta 中,您可以執行下列步驟:
-
在您的 SAML 應用程式中,移至 General (一般)、SAML settings (SAML 設定)。
-
對於 Single sign on URL (單一登入 URL),提供 IdP 啟動的 SSO URL。例如:
https://search-
。domain-hash
/_dashboards/_opendistro/_security/saml/acs/idpinitiated
-
啟用 Allow this app to request other SSO URLs (允許此應用程式請求其他 SSO URL)。
-
在 Requestable SSO URLs (可請求的 SSO URL) 中,新增一個或多個 SP 啟動的 SSO URL。例如:
https://search-
。domain-hash
/_dashboards/_opendistro/_security/saml/acs
設定 SAML 身分驗證 (AWS CLI)
下列 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 命令參考。
設定 SAML 身分驗證 (組態 API)
下列對組態 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 (OpenSearch Service API 參考)。
SAML 疑難排解
錯誤 | 詳細資訊 |
---|---|
|
確認您為身分提供者提供了正確的 SSO URL (步驟 3)。 |
|
您的 IdP 中繼資料檔案不符合 SAML 2.0 標準。使用驗證工具檢查錯誤。 |
SAML 組態選項在主控台中不可見。 |
更新至最新服務軟體。 |
|
此一般性錯誤的發生原因很多。
|
|
您已成功進行身分驗證,但 SAML 聲明中的使用者名稱和任何後端角色未映射至任何角色,因此沒有許可。這些映射區分大小寫。 您的系統管理員可以使用 SAML-tracer 等工具驗證 SAML
|
當您嘗試存取 OpenSearch Dashboards 時,您的瀏覽器會持續重新引導或收到 HTTP 500 錯誤。 |
如果您的 SAML 聲明包含大量的角色,總計約 1,500 個字元,就會發生這些錯誤。例如,如果您傳遞 80 個角色,平均長度為 20 個字元,您可能會超過 web 瀏覽器中 Cookie 的大小限制。從 OpenSearch 2.7 版開始,SAML 聲明支援最多 5000 個字元的角色。 |
您無法登出 ADFS。 |
ADFS 要求簽署所有登出請求,而 OpenSearch Service 不支援這些請求。從 IdP 中繼資料檔案中移除 |
|
中繼資料 XML 中提供給 OpenSearch Service 的 IdP 實體 ID 與 SAML 回應中的實體 ID 不同。若要修正此問題,請確定它們相符。在您的網域上啟用 CW 應用程式錯誤日誌,尋找錯誤訊息以偵錯 SAML 整合問題。 |
|
OpenSearch Service 無法使用中繼資料 XML 中提供的 IdP 憑證來驗證 SAML 回應中的簽章。這可能是手動錯誤,或者您的 IdP 已輪換其憑證。在透過 提供給 OpenSearch Service 的中繼資料 XML 中,從 IdP 更新最新的憑證 AWS Management Console。 |
|
SAML 回應中的對象欄位與網域端點不相符。若要修正此錯誤,請更新 SP 對象欄位以符合您的網域端點。如果您已啟用自訂端點,對象欄位應與您的自訂端點相符。在您的網域上啟用 CW 應用程式錯誤日誌,尋找錯誤訊息以偵錯 SAML 整合問題。 |
您的瀏覽器在回應 |
如果您已使用 格式設定 IdP 起始的 URL,則通常會發生此錯誤 |
已收到回應, |
SAML 回應中的目的地欄位不符合下列其中一個 URL 格式:
根據您使用的登入流程 (SP 啟動或 IdP 啟動),在符合其中一個 OpenSearch URLs目的地欄位中輸入 。 |
回應具有 |
您使用 IdP 啟動的 URL 進行 SP 啟動的登入流程。請改用 SP 啟動的 URL。 |
停用 SAML 身分驗證
若要停用 OpenSearch Dashboards (主控台) 的 SAML 身分驗證
-
選擇網域、Actions (動作) 和 Edit security configuration (編輯安全組態)。
-
取消勾選 Enable SAML authentication (啟用 SAML 身分驗證)。
-
選擇 Save changes (儲存變更)。
-
網域完成處理之後,請使用下列請求確認精細存取控制角色映射:
GET _plugins/_security/api/rolesmapping
停用 Dashboards 的 SAML 身分驗證不會移除 SAML 主要使用者名稱和/或 SAML 主要後端角色的映射。如果您要移除這些映射,請使用內部使用者資料庫 (如果已啟用) 登入 Dashboards,或使用 API 將其移除:
PUT _plugins/_security/api/rolesmapping/
all_access
{ "users": [ "master-user
" ] }