使用 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) 访问操作员控制台
临时将本地主机与 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
策略附加到任何已验证的 OIDC 用户,其配置的声明中包含datareadonly
。
请参阅OpenID Connect 访问管理,了解有关使用 OIDC 用户和组进行访问控制的更多信息。
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,了解参考文档。