在 Azure、Google 或 Okta 上设置 OpenID Connect
本页面介绍了如何实现 OIDC,从 OAuth 客户端凭据生成到针对 Elasticsearch 和 Kibana 的域(realm)配置,涵盖以下 OpenID Connect 提供商(OP)
有关配置 OIDC 的更多详细信息,请参考 OpenID Connect 身份验证
请按照以下步骤在 Elasticsearch 中使用 Azure OP 配置 OpenID Connect 单点登录。
有关 Azure 中 OpenID Connect 的更多信息,请参考 Azure OAuth 2.0 和 OpenID 文档。
配置 OAuth 客户端 ID。
创建新应用程序
登录到 Azure 门户并转到 Entra(原 Azure Active Directory)。在此处,选择 应用注册 (App registrations) > 新注册 (New registration) 以注册新应用程序。
为您的应用程序输入一个名称 (Name),例如
ec-oauth2。根据您的偏好选择支持的账户类型 (Supported Account Type)。
设置重定向 URI (Redirect URI)。
通常为
<KIBANA_ENDPOINT_URL>/api/security/oidc/callback,其中<KIBANA_ENDPOINT_URL>是您的 Kibana 实例的基本 URL。如果您使用的是 Elastic Cloud 托管服务,则将此值设置为
<KIBANA_ENDPOINT_URL>/api/security/oidc/callback。选择 注册。
确认您的新应用程序(客户端) ID (Application (client) ID)显示在应用详情中。
创建客户端 ID 和密钥
将您的客户端密码添加到 Elasticsearch 密钥库 (keystore)。
对于 OIDC,密钥库中的客户端密码设置名称应为
xpack.security.authc.realms.oidc.<oidc-realm-name>.rp.client_secret格式。使用 OIDC 域配置 Elasticsearch。
要详细了解 Microsoft Azure 提供的可用端点,请参考您配置的应用程序中的端点 (Endpoints) 详情。
要为 OIDC 配置 Elasticsearch,请使用以下配置更新您的 Elasticsearch 用户设置
xpack.security.authc.realms.oidc.oidc1: order: 2 rp.client_id: "<Application (client) ID>" rp.response_type: "code" rp.requested_scopes: ["openid", "email"] rp.redirect_uri: "KIBANA_ENDPOINT_URL/api/security/oidc/callback" op.issuer: "https://login.microsoftonline.com/<Directory (tenant) ID>/v2.0" op.authorization_endpoint: "https://login.microsoftonline.com/<Directory (tenant) ID>/oauth2/v2.0/authorize" op.token_endpoint: "https://login.microsoftonline.com/<Directory (tenant) ID>/oauth2/v2.0/token" op.userinfo_endpoint: "https://graph.microsoft.com/oidc/userinfo" op.endsession_endpoint: "https://login.microsoftonline.com/<Directory (tenant) ID>/oauth2/v2.0/logout" rp.post_logout_redirect_uri: "KIBANA_ENDPOINT_URL/security/logged_out" op.jwkset_path: "https://login.microsoftonline.com/<Directory (tenant) ID>/discovery/v2.0/keys" claims.principal: email claim_patterns.principal: "^([^@]+)@YOUR_DOMAIN\\.TLD$"其中
<Application (client) ID>是您的客户端 ID,可在 Azure 的应用程序详情中找到。<Directory (tenant) ID>是您的目录 ID,可在 Azure 的应用程序详情中找到。KIBANA_ENDPOINT_URL是您的 Kibana 端点。claim_patterns.principal正则表达式中的YOUR_DOMAIN和TLD是您的组织电子邮件域名和顶级域。
对于拥有大量组成员身份的组织如果您配置
claims.groups从 ID 令牌中读取 Azure AD 组列表,请注意,属于许多组的用户可能会超出 Azure AD 的令牌大小限制。在这种情况下,将省略groups声明。为避免这种情况,请在 Azure Entra 中启用分配给应用程序的组 (Groups assigned to the application) 选项(应用注册 > 令牌配置 > 编辑组成员身份声明)。此设置将
groups声明限制为仅分配给该应用程序的组。替代方案:如果无法将组限制为应用程序分配的组,请使用 Elasticsearch 的 Microsoft Graph Authz 插件。它在授权期间通过 Microsoft Graph 查找组成员身份,因此即使由于超出大小限制而省略了
groups声明,它也能继续正常工作。有关更多信息,请参考 Microsoft 安全文档中的 组超量 (Group overages)。
如果您使用的是 Elastic Cloud Enterprise 或 Elastic Cloud 托管版,并且使用了机器学习或具有冷热架构的部署,则必须将此配置包含在每个节点类型的用户设置部分中。
创建角色映射。
以下针对 OIDC 的角色映射根据
claim_patterns.principal电子邮件地址将访问权限限制为特定用户(firstname.lastname)。这可以防止同一域上的其他用户访问您的部署。您可以根据需要随时删除或调整此规则。更多详情可在我们的配置角色映射文档中找到。
POST /_security/role_mapping/oidc_kibana { "enabled": true, "roles": [ "superuser" ], "rules" : { "all" : [ { "field" : { "realm.name" : "oidc1" } }, { "field" : { "username" : [ "<firstname.lastname>" ] } } ] }, "metadata": { "version": 1 } }如果您在
claim_patterns.principal中使用了电子邮件,则无需在 role_mapping 中添加域名(例如,firstname.lastname@your_domain.tld应写作firstname.lastname)。使用 OIDC 域配置 Kibana。使用以下配置更新您的 Kibana 用户设置
xpack.security.authc.providers: oidc.oidc1: order: 0 realm: oidc1 description: "Log in with Azure" basic.basic1: order: 1
请按照以下步骤在 Elasticsearch 中使用 Google OP 配置 OpenID Connect 单点登录。
有关 Google 中 OpenID Connect 的更多信息,请参考 Google OpenID Connect 文档。
配置 OAuth 客户端 ID。
创建新项目
- 登录到 Google Cloud 并打开新项目页面。创建一个新项目。
创建客户端 ID 和密钥
导航到API 和服务 (APIs & Services) 并打开凭据 (Credentials) 选项卡以创建您的 OAuth 客户端 ID。
对于应用程序类型 (Application Type),选择
Web application。为您的 OAuth 2 客户端选择一个名称 (Name),例如
ec-oauth2。添加已授权的重定向 URI (Authorized redirect URI)。
通常为
<KIBANA_ENDPOINT_URL>/api/security/oidc/callback,其中<KIBANA_ENDPOINT_URL>是您的 Kibana 实例的基本 URL。如果您使用的是 Elastic Cloud 托管服务,则将此值设置为
<KIBANA_ENDPOINT_URL>/api/security/oidc/callback。选择创建 (Create) 并复制您的客户端 ID 和客户端密码以供后续使用。
将您的客户端密码添加到 Elasticsearch 密钥库 (keystore)。
对于 OIDC,密钥库中的客户端密码设置名称应为
xpack.security.authc.realms.oidc.<oidc-realm-name>.rp.client_secret格式。使用 OIDC 域配置 Elasticsearch。
要详细了解 Google 提供的端点,请参考此 OpenID 配置。
要为 OIDC 配置 Elasticsearch,请使用以下配置更新您的 Elasticsearch 用户设置
xpack.security.authc.realms.oidc.oidc1: order: 2 rp.client_id: "YOUR_CLIENT_ID" rp.response_type: "code" rp.requested_scopes: ["openid", "email"] rp.redirect_uri: "<KIBANA_ENDPOINT_URL>/api/security/oidc/callback" op.issuer: "https://#" op.authorization_endpoint: "https://#/o/oauth2/v2/auth" op.token_endpoint: "https://oauth2.googleapis.com/token" op.userinfo_endpoint: "https://openidconnect.googleapis.com/v1/userinfo" op.jwkset_path: "https://www.googleapis.com/oauth2/v3/certs" claims.principal: email claim_patterns.principal: "^([^@]+)@YOUR_DOMAIN\\.TLD$"其中
YOUR_CLIENT_ID是您的客户端 ID。<KIBANA_ENDPOINT_URL>/api/security/oidc/callback是您的 Kibana 端点。通常为
<KIBANA_ENDPOINT_URL>/api/security/oidc/callback,其中<KIBANA_ENDPOINT_URL>是您的 Kibana 实例的基本 URL。如果您使用的是 Elastic Cloud 托管服务,则将此值设置为
<KIBANA_ENDPOINT_URL>/api/security/oidc/callback。claim_patterns.principal正则表达式中的YOUR_DOMAIN和TLD是您的组织电子邮件域名和顶级域。
如果您使用的是 Elastic Cloud Enterprise 或 Elastic Cloud 托管版,并且使用了机器学习或具有冷热架构的部署,则必须将此配置包含在每个节点类型的用户设置部分中。
创建角色映射。
以下针对 OIDC 的角色映射根据
claim_patterns.principal电子邮件地址将访问权限限制为特定用户(firstname.lastname)。这可以防止同一域上的其他用户访问您的部署。您可以根据需要随时删除或调整此规则。更多详情可在我们的配置角色映射文档中找到。
POST /_security/role_mapping/oidc_kibana { "enabled": true, "roles": [ "superuser" ], "rules" : { "all" : [ { "field" : { "realm.name" : "oidc1" } }, { "field" : { "username" : [ "<firstname.lastname>" ] } } ] }, "metadata": { "version": 1 } }如果您在
claim_patterns.principal中使用了电子邮件,则无需在 role_mapping 中添加域名(例如,firstname.lastname@your_domain.tld应写作firstname.lastname)。使用 OIDC 域配置 Kibana。使用以下配置更新您的 Kibana 用户设置
xpack.security.authc.providers: oidc.oidc1: order: 0 realm: oidc1 description: "Log in with Google" basic.basic1: order: 1
请按照以下步骤为 Elasticsearch 使用 Okta OP 配置 OpenID Connect 单点登录。
有关 Okta 中 OpenID Connect 的更多信息,请参考 Okta OAuth 2.0 文档。
配置 OAuth 客户端 ID。
创建新应用程序
转到应用程序 (Applications) > 添加应用程序 (Add Application)。
对于平台 (Platform) 页面设置,选择网页 (Web),然后选择下一步 (Next)。
在应用程序设置 (Application settings) 中为您的应用程序选择一个名称 (Name),例如 Kibana OIDC。
将基本 URI (Base URI) 设置为
KIBANA_ENDPOINT_URL。设置登录重定向 URI (Login redirect URI)。
通常为
<KIBANA_ENDPOINT_URL>/api/security/oidc/callback。如果您使用的是 Elastic Cloud 托管服务,则将此值设置为
<KIBANA_ENDPOINT_URL>/api/security/oidc/callback。将注销重定向 URI (Logout redirect URI) 设置为
KIBANA_ENDPOINT_URL/security/logged_out。选择完成 (Done) 并复制您的客户端 ID 和客户端密码值以供后续使用。
将您的客户端密码添加到 Elasticsearch 密钥库 (keystore)。
对于 OIDC,密钥库中的客户端密码设置名称应为
xpack.security.authc.realms.oidc.<oidc-realm-name>.rp.client_secret格式。使用 OIDC 域配置 Elasticsearch。
要了解有关 Okta 提供的可用端点的更多信息,请参考以下 OpenID 配置:
https://{{yourOktadomain}}/.well-known/openid-configuration要为 OIDC 配置 Elasticsearch,请使用以下配置更新您的 Elasticsearch 用户设置
xpack.security.authc.realms.oidc.oidc1: order: 2 rp.client_id: "YOUR_CLIENT_ID" rp.response_type: "code" rp.requested_scopes: ["openid", "email"] rp.redirect_uri: "KIBANA_ENDPOINT_URL/api/security/oidc/callback" op.issuer: "https://<YOUR_OKTA_DOMAIN>" op.authorization_endpoint: "https://<YOUR_OKTA_DOMAIN>/oauth2/v1/authorize" op.token_endpoint: "https://<YOUR_OKTA_DOMAIN>/oauth2/v1/token" op.userinfo_endpoint: "https://<YOUR_OKTA_DOMAIN>/oauth2/v1/userinfo" op.endsession_endpoint: "https://<YOUR_OKTA_DOMAIN>/oauth2/v1/logout" op.jwkset_path: "https://<YOUR_OKTA_DOMAIN>/oauth2/v1/keys" claims.principal: email claim_patterns.principal: "^([^@]+)@YOUR_DOMAIN\\.TLD$"其中
YOUR_CLIENT_ID是您在前面步骤中设置的客户端 ID。KIBANA_ENDPOINT_URL是您的 Kibana 端点,可在 Elastic Cloud 控制台中获取。<YOUR_OKTA_DOMAIN>是您的 Okta 仪表板上显示的 Okta 域名 URL。claim_patterns.principal正则表达式中的YOUR_DOMAIN和TLD是您的组织电子邮件域名和顶级域。
如果您根据部署架构使用了多种节点类型(专用主节点、高 IO 和/或高存储),请记住在用户设置中为每种节点类型添加此配置。
创建角色映射。
以下针对 OIDC 的角色映射根据
claim_patterns.principal电子邮件地址将访问权限限制为特定用户(firstname.lastname)。这可以防止同一域上的其他用户访问您的部署。您可以根据需要随时删除或调整此规则。更多详情可在我们的配置角色映射文档中找到。
POST /_security/role_mapping/oidc_kibana { "enabled": true, "roles": [ "superuser" ], "rules" : { "all" : [ { "field" : { "realm.name" : "oidc1" } }, { "field" : { "username" : [ "<firstname.lastname>" ] } } ] }, "metadata": { "version": 1 } }如果您在
claim_patterns.principal中使用了电子邮件,则无需在 role_mapping 中添加域名(例如,firstname.lastname@your_domain.tld应写作firstname.lastname)。使用 OIDC 域配置 Kibana。使用以下配置更新您的 Kibana 用户设置
xpack.security.authc.providers: oidc.oidc1: order: 0 realm: oidc1 description: "Log in with Okta" basic.basic1: order: 1