文档

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