使用 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) 的身份提供者
此过程假设存在 Okta、KeyCloak、Dex、Google 或 Facebook 等现有 OIDC 提供者。有关配置这些服务的说明超出了本过程的范围。
对于与 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 租户。
如果您要修改现有租户,请从列表中选择该租户。以下步骤将参考现有租户的必要部分和配置设置。
2) 完成身份提供者部分
要使用 OIDC 启用外部身份管理,请选择身份提供者部分。然后,您可以将单选按钮更改为OIDC以显示配置设置。
星号*
标记必填字段。下表提供了这些字段的一般指南
字段 |
描述 |
---|---|
配置 URL |
OpenID |
客户端 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。