文档

使用 OpenID 配置 MinIO 进行身份验证

概述

MinIO 支持使用与 OpenID Connect (OIDC) 兼容的身份提供者 (IDP),例如 Okta、KeyCloak、Dex、Google 或 Facebook 来外部管理用户身份。此页面上的步骤提供了以下方面的说明

  • 配置 MinIO 租户以使用外部 OIDC 提供者。

  • 使用 OIDC 凭据访问租户控制台。

  • 使用 MinIO AssumeRoleWithWebIdentity 安全令牌服务 (STS) API 为应用程序生成临时凭据。

此步骤对 OIDC 兼容提供者来说是通用的。请参考您选择的 OIDC 提供者的文档以获取有关身份验证和 JWT 检索的具体说明或步骤。

先决条件

MinIO Kubernetes 运算符

确保您的目标 Kubernetes 集群具有 MinIO Kubernetes 运算符的有效且正常工作的安装。本文档假定使用最新的稳定运算符版本 6.0.4。

与 OpenID Connect (OIDC) 兼容的身份提供者

此步骤假定存在一个 OIDC 提供者,例如 Okta、KeyCloak、Dex、Google 或 Facebook。配置这些服务的说明不在本步骤的范围之内。

  • 对于与 MinIO 租户位于同一 Kubernetes 集群内的 OIDC 服务,您可以使用 Kubernetes 服务名称来允许 MinIO 租户建立与 OIDC 服务的连接。

  • 对于 Kubernetes 集群外部的 OIDC 服务,您必须确保集群支持在 Kubernetes 服务和 Pod 与外部网络之间路由通信。这可能需要配置或部署其他 Kubernetes 网络组件,或启用对公共互联网的访问。

确保每个打算与 MinIO 一起使用的用户身份都已配置了适当的 声明,以便 MinIO 可以将 策略 与经过身份验证的用户关联。没有分配策略的 OpenID 用户无权访问 MinIO 集群上的任何操作或资源。

MinIO 租户

本步骤假定您的 Kubernetes 集群具有足够的资源来 部署新的 MinIO 租户.

您也可以使用本步骤作为修改现有 MinIO 租户以启用 OIDC 身份管理的指导。

使用 OpenID Connect 身份管理部署 MinIO 租户

1) 访问操作员控制台

临时转发本地主机与 MinIO 操作员控制台之间的流量,并检索操作员部署的 JWT 令牌。有关说明,请参阅 配置对操作员控制台服务的访问.

在浏览器中打开临时 URL,并在登录页面中输入 JWT 令牌。您应该看到 租户 页面。

MinIO Operator Console

点击 + 创建租户 开始创建 MinIO 租户。

如果您要修改现有租户,请从列表中选择该租户。以下步骤引用了现有租户的必要部分和配置设置。

2) 完成 身份提供商 部分

要使用 OIDC 启用外部身份管理,请选择 身份提供商 部分。然后,您可以将单选按钮更改为 OIDC 以显示配置设置。

MinIO Operator Console - Create a Tenant - External Identity Provider Section - OpenID

星号 * 表示必填字段。下表提供了这些字段的常规指南。

字段

描述

配置 URL

OpenID .well-known/openid-configuration 文件的主机名。

客户端 ID
密钥 ID

MinIO 在对 OIDC 服务验证 OIDC 用户凭据时使用的客户端和密钥 ID。

声明名称

MinIO 用于识别要附加到已验证用户的 策略 的 OIDC 声明。

完成该部分后,您可以完成 租户部署 中的其他所有必需部分。

3) 将策略分配给 OIDC 用户

默认情况下,MinIO 不会将任何 策略 分配给 OIDC 用户。MinIO 使用指定的用户声明来识别要附加到已验证用户的策略。如果声明为空或指定了部署中不存在的策略,则已验证用户对租户没有权限。

以下示例假设为 MinIO 租户配置了现有的 别名.

考虑以下示例策略,该策略仅在 data 桶中授予对一般 S3 API 的访问权限。

{
   "Version": "2012-10-17",
   "Statement": [
      {
         "Effect": "Allow",
         "Action": [
            "s3:*"
         ],
         "Resource": [
            "arn:aws:s3:::data",
            "arn:aws:s3:::data/*"
         ]
      }
   ]
}

使用 mc admin policy create 命令创建供 OIDC 用户使用的策略。

mc admin policy create minio-tenant datareadonly /path/to/datareadonly.json

MinIO 将 datareadonly 策略附加到任何配置的声明中包含 datareadonly 的已验证 OIDC 用户。

有关使用 OIDC 用户和组进行访问控制的更多信息,请参阅 OpenID Connect 访问管理.

4) 使用 MinIO 租户控制台使用 OIDC 凭据登录

MinIO 控制台支持对 OIDC 提供商进行身份验证的完整工作流程,使用 MinIO AssumeRoleWithLDAPIdentity 安全令牌服务 (STS) 端点生成临时凭据,并将用户登录到 MinIO 部署。

有关访问租户控制台的更多信息,请参阅 部署 MinIO 租户:连接到租户.

如果 OIDC 配置成功,控制台将显示一个使用 OIDC 凭据登录的按钮。

输入用户的 OIDC 凭据并登录以访问控制台。

登录后,您可以执行已验证用户 授权 的任何操作。

您还可以为必须对 MinIO 执行操作的支持应用程序创建 访问密钥。访问密钥是长期凭据,它们继承自父用户的权限。父用户可以在创建访问密钥时进一步限制这些权限。

5) 使用 OIDC 凭据生成与 S3 兼容的临时凭据

应用程序可以使用 AssumeRoleWithWebIdentity 安全令牌服务 (STS) API 端点和 OIDC 提供商返回的 JSON Web 令牌 (JWT) 按需生成临时访问凭据。

应用程序必须提供一个登录 OIDC 提供商并检索与身份验证会话关联的 JSON Web 令牌 (JWT) 的工作流程。请参阅提供商文档以获取成功身份验证后获取和解析 JWT 令牌的信息。MinIO 提供了一个 Go 应用程序示例 web-identity.go,其中包含管理此工作流程的示例。

应用程序检索到 JWT 令牌后,请使用 AssumeRoleWithWebIdentity 端点生成临时凭据。

POST https://minio.example.net?Action=AssumeRoleWithWebIdentity
&WebIdentityToken=TOKEN
&Version=2011-06-15
&DurationSeconds=86400
&Policy=Policy
  • minio.example.net 替换为 MinIO 租户服务的 hostname 或 URL。

  • TOKEN 替换为上一步返回的 JWT 令牌。

  • DurationSeconds 替换为临时凭据过期之前的秒数。上面的示例指定了 86400 秒,即 24 小时。

  • Policy 替换为一个内联 URL 编码的 JSON 策略,它进一步限制了与临时凭据关联的权限。

    省略以使用与 OpenID 用户 策略声明 关联的策略。

API 响应包含一个 XML 文档,其中包含访问密钥、密钥、会话令牌和过期日期。应用程序可以使用访问密钥和密钥来访问和对 MinIO 执行操作。

有关参考文档,请参阅 AssumeRoleWithWebIdentity.