加载中

在 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 文档

  1. 配置 OAuth 客户端 ID。

    1. 创建新应用程序

      1. 登录到 Azure 门户并转到 Entra(原 Azure Active Directory)。在此处,选择 应用注册 (App registrations) > 新注册 (New registration) 以注册新应用程序。

        A screenshot of the Azure Owned Applications tab on the New Registration page
      2. 为您的应用程序输入一个名称 (Name),例如 ec-oauth2

      3. 根据您的偏好选择支持的账户类型 (Supported Account Type)

      4. 设置重定向 URI (Redirect URI)

        通常为 <KIBANA_ENDPOINT_URL>/api/security/oidc/callback,其中 <KIBANA_ENDPOINT_URL> 是您的 Kibana 实例的基本 URL。

        如果您使用的是 Elastic Cloud 托管服务,则将此值设置为 <KIBANA_ENDPOINT_URL>/api/security/oidc/callback

      5. 选择 注册

      6. 确认您的新应用程序(客户端) ID (Application (client) ID)显示在应用详情中。

    2. 创建客户端 ID 和密钥

      1. 在您创建的应用程序中,转到证书和密码 (Certificates & secrets),并在客户端密码 (Client secrets) > 新客户端密码 (New client secret) 下创建一个新密码。

        A screenshot of the Azure Add a Client Secret dialog
      2. 提供一个描述 (Description),例如 Kibana

      3. 选择密码的过期时间。

      4. 选择添加 (Add) 并复制您刚创建的客户端密码以供后续使用。

  2. 将您的客户端密码添加到 Elasticsearch 密钥库 (keystore)

    对于 OIDC,密钥库中的客户端密码设置名称应为 xpack.security.authc.realms.oidc.<oidc-realm-name>.rp.client_secret 格式。

  3. 使用 OIDC 域配置 Elasticsearch。

    要详细了解 Microsoft Azure 提供的可用端点,请参考您配置的应用程序中的端点 (Endpoints) 详情。

    A screenshot of the Azure Endpoints dialog with fields for Display Name

    要为 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_DOMAINTLD 是您的组织电子邮件域名和顶级域。
    对于拥有大量组成员身份的组织

    如果您配置 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 托管版,并且使用了机器学习或具有冷热架构的部署,则必须将此配置包含在每个节点类型的用户设置部分中。

  4. 创建角色映射。

    以下针对 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)。

  5. 使用 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 文档

  1. 配置 OAuth 客户端 ID。

    1. 创建新项目

      1. 登录到 Google Cloud 并打开新项目页面。创建一个新项目。
    2. 创建客户端 ID 和密钥

      1. 导航到API 和服务 (APIs & Services) 并打开凭据 (Credentials) 选项卡以创建您的 OAuth 客户端 ID。

        A screenshot of the Google  Cloud console Create Credentials dialog with the OAuth client ID field highlighted
      2. 对于应用程序类型 (Application Type),选择 Web application

      3. 为您的 OAuth 2 客户端选择一个名称 (Name),例如 ec-oauth2

      4. 添加已授权的重定向 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

      5. 选择创建 (Create) 并复制您的客户端 ID 和客户端密码以供后续使用。

  2. 将您的客户端密码添加到 Elasticsearch 密钥库 (keystore)

    对于 OIDC,密钥库中的客户端密码设置名称应为 xpack.security.authc.realms.oidc.<oidc-realm-name>.rp.client_secret 格式。

  3. 使用 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_DOMAINTLD 是您的组织电子邮件域名和顶级域。

    如果您使用的是 Elastic Cloud Enterprise 或 Elastic Cloud 托管版,并且使用了机器学习或具有冷热架构的部署,则必须将此配置包含在每个节点类型的用户设置部分中。

  4. 创建角色映射。

    以下针对 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)。

  5. 使用 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 文档

  1. 配置 OAuth 客户端 ID。

    1. 创建新应用程序

      1. 转到应用程序 (Applications) > 添加应用程序 (Add Application)

        A screenshot of the Get Started tab on the Okta Create A New Application page
      2. 对于平台 (Platform) 页面设置,选择网页 (Web),然后选择下一步 (Next)

      3. 应用程序设置 (Application settings) 中为您的应用程序选择一个名称 (Name),例如 Kibana OIDC

      4. 基本 URI (Base URI) 设置为 KIBANA_ENDPOINT_URL

      5. 设置登录重定向 URI (Login redirect URI)

        通常为 <KIBANA_ENDPOINT_URL>/api/security/oidc/callback

        如果您使用的是 Elastic Cloud 托管服务,则将此值设置为 <KIBANA_ENDPOINT_URL>/api/security/oidc/callback

      6. 注销重定向 URI (Logout redirect URI) 设置为 KIBANA_ENDPOINT_URL/security/logged_out

      7. 选择完成 (Done) 并复制您的客户端 ID 和客户端密码值以供后续使用。

  2. 将您的客户端密码添加到 Elasticsearch 密钥库 (keystore)

    对于 OIDC,密钥库中的客户端密码设置名称应为 xpack.security.authc.realms.oidc.<oidc-realm-name>.rp.client_secret 格式。

  3. 使用 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_DOMAINTLD 是您的组织电子邮件域名和顶级域。

如果您根据部署架构使用了多种节点类型(专用主节点、高 IO 和/或高存储),请记住在用户设置中为每种节点类型添加此配置。

  1. 创建角色映射。

    以下针对 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)。

  2. 使用 OIDC 域配置 Kibana。使用以下配置更新您的 Kibana 用户设置

    xpack.security.authc.providers:
      oidc.oidc1:
        order: 0
        realm: oidc1
        description: "Log in with Okta"
      basic.basic1:
        order: 1
    		
© . This website operates independently and is not affiliated with or endorsed by Elasticsearch B.V. All brand names, logos, and trademarks are the property of their respective owners.