配置MinIO以使用OpenID进行身份验证
概述
MinIO 支持使用 OpenID Connect(OIDC)兼容的身份提供者(IDP),如 Okta、KeyCloak、Dex、Google 或 Facebook,以外部管理用户身份。 本页面的流程提供以下操作说明:
配置 MinIO 租户以使用外部 OIDC 提供程序。
使用 OIDC 凭据访问租户控制台。
使用 MinIO
AssumeRoleWithWebIdentity
安全令牌服务(STS)API 为应用程序生成临时凭据。
此过程适用于兼容 OIDC 的提供程序。 有关身份验证和 JWT 检索的具体说明或程序,请参考您选择的 OIDC 提供程序的文档。
先决条件
MinIO Kubernetes Operator
确保您的目标 Kubernetes 集群具有有效且可正常运行的 MinIO Kubernetes Operator 安装. 本文档假定 Operator 为最新稳定版本 7.1.1.
OpenID-Connect (OIDC) 兼容身份提供者。
此过程假定已存在 OIDC 提供程序,如 Okta、KeyCloak、Dex、Google 或 Facebook。 此过程的范围不包括配置这些服务的说明。
对于与 MinIO 租户位于同一 Kubernetes 群集中的 OIDC 服务,您可以使用 Kubernetes 服务名称,以允许 MinIO 租户建立与 OIDC 服务的连接。
对于 Kubernetes 群集外部的 OIDC 服务,您必须确保群集支持在 Kubernetes 服务、Pod 和外部网络之间进行通信的路由。 这可能需要配置或部署其他 Kubernetes 网络组件和/或启用对公共互联网的访问。
确保为打算与 MinIO 一起使用的每个用户身份配置了适当的 claim,以便 MinIO 可以将 policy 与经过身份验证的用户关联起来。 没有分配策略的 OpenID 用户无权访问 MinIO 群集上的任何操作或资源。
MinIO 租户
此过程假定您的 Kubernetes 群集具有足够的资源来 部署新的 MinIO 租户。
您还可以使用此过程作为修改现有 MinIO 租户以启用 OIDC Identity Management 的指南。
部署带有 OpenID Connect 身份管理的 MinIO Tenant
1) 访问 the Operator 控制台
临时转发本地主机和 MinIO 操作员控制台之间的流量并检索操作员部署的 JWT 令牌。 有关说明,请参阅 Configure access to the Operator Console service。
Open your browser to the temporary URL and enter the JWT Token into the login page. 您应该能够看到 Tenants 页面:

单击 + Create Tenant 开始创建 MinIO 租户。
如果您要修改现有的租户,请从列表中选择该租户。 以下步骤引用了现有租户所需的部分和配置设置。
2) 完成 Identity Provider 部分
要使用 OIDC 启用外部身份管理,请选择 Identity Provider 部分。 然后您可以更改单选按钮以显示 OIDC 配置设置。

*
标记必填字段。
下表提供了这些字段的一般指导:
Field |
描述 |
---|---|
Configuration URL |
OpenID 的主机名为 |
Client ID
Secret ID
|
在 OIDC 服务中,当 MinIO 对 OIDC 用户凭证进行身份验证时使用的客户端和密钥 ID。 |
Claim Name |
OIDC 声明,MinIO 用于识别要附加到经过身份验证的用户的 策略。 |
完成此部分后,您可以完成 Tenant 部署 的任何其他必需部分。
3) 分配策略给 OIDC 用户
MinIO 默认不向 OIDC 用户分配任何 策略。 MinIO 使用指定的用户声明来识别一个或多个要附加到经过身份验证的用户的策略。 如果该声明为空或指定了在部署中不存在的策略,则经过身份验证的用户在 Tenant 上没有任何权限。
下面的示例假定已为 MinIO Tenant 配置了现有的 别名。
请考虑以下授权仅在 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访问和连接管理。
4) 使用 MinIO Tenant 控制台使用 OIDC 凭据登录
MinIO 控制台支持完整的工作流程,包括通过 OIDC 提供程序进行身份验证、使用 MinIO minio-sts-assumerolewithldapidentity 安全令牌服务 (STS) 端点生成临时凭据,并将用户登录到 MinIO 部署中。
请参阅 Deploy MinIO Tenant: 连接到租户 获取有关访问租户控制台的更多信息。
如果 OIDC 配置成功,控制台将显示一个使用 OIDC 凭据登录的按钮。
输入用户的 OIDC 凭据并登录以访问控制台。
登录后,您可以执行经过身份验证的用户已获得 授权的 任何操作 。
您还可以为必须在 MinIO 上执行操作的支持应用程序创建 access keys。 访问密钥是长期凭证,其权限继承自父用户。 父用户在创建访问密钥时可以进一步限制这些特权。
5) 使用 OIDC 凭据生成 S3 兼容的临时凭证
应用程序可以使用 minio-sts-assumerolewithwebidentity 安全令牌服务 (STS) API 端点和 OIDC 提供程序返回的 JSON Web Token (JWT),根据需要生成临时访问凭证。
应用程序必须提供一个流程,用于登录到 OIDC 提供商并检索与认证会话相关联的 JSON Web Token(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 租户服务的主机名或 URL。请使用上一步返回的 JWT 令牌替换
TOKEN
。请将
DurationSeconds
替换为临时凭证过期的持续时间(以秒为单位)。上面的示例指定了86400
秒或 24 小时的时间段。请将
Policy
替换为内联 URL 编码的 JSON policy,该策略进一步限制了与临时凭证相关联的权限。请忽略使用与 OpenID 用户 policy claim 相关联的策略。
API 的响应包含一个 XML 文档,其中包括访问密钥、秘钥、会话令牌和过期日期。 应用程序可以使用访问密钥和秘钥来访问并在 MinIO 上执行操作。
有关参考文档,请参见 minio-sts-assumerolewithwebidentity。