文档

使用 OpenID 配置 MinIO 身份验证

概述

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

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

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

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

此过程适用于 OIDC 兼容提供商。有关身份验证和 JWT 检索的具体说明或过程,请参阅您选择的 OIDC 提供商的文档。

先决条件

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) 访问 Operator 控制台

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

在浏览器中打开临时 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策略附加到任何已认证的 OIDC 用户,这些用户在配置的声明中包含datareadonly

有关使用 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