文档

使用 OpenID 配置 MinIO 进行身份验证

概述

MinIO 支持使用兼容 OpenID Connect (OIDC) 的身份提供者 (IDP)(如 Okta、KeyCloak、Dex、Google 或 Facebook)来外部管理用户身份。本页面的步骤提供以下操作的说明:

  • 为外部 OIDC 提供者配置 MinIO 集群。

  • 使用 MinIO 控制台和 OIDC 凭据登录集群。

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

此步骤对兼容 OIDC 的提供者通用。有关身份验证和 JWT 检索的特定说明或步骤,请参考您选择的 OIDC 提供者的文档。

先决条件

兼容 OpenID Connect (OIDC) 的身份提供者

此步骤假设存在一个现有的 OIDC 提供者,例如 Okta、KeyCloak、Dex、Google 或 Facebook。有关配置这些服务的说明超出了本步骤的范围。

确保打算与 MinIO 一起使用的每个用户身份都配置了相应的声明,以便 MinIO 可以将策略与已验证的用户关联起来。没有分配策略的 OpenID 用户没有权限访问 MinIO 集群上的任何操作或资源。

MinIO 部署

此步骤假设存在运行最新稳定版 MinIO 版本的 MinIO 集群。有关新 MinIO 部署的更完整文档,请参考安装和部署 MinIO

此步骤可能适用于旧版本的 MinIO。

安装和配置 mc 以访问 MinIO 集群

此步骤使用mc 来对 MinIO 集群执行操作。在具有访问集群网络的机器上安装 mc。有关下载和安装 mc 的说明,请参见 mc 安装快速入门

此步骤假设为 MinIO 集群配置了已配置的alias

步骤

1) 设置 OpenID 配置设置

您可以使用环境变量服务器运行时配置设置来配置 OIDC 提供程序。两种方法都需要启动/重启 MinIO 部署才能应用更改。以下选项卡分别提供所有必需和可选环境变量以及配置设置的快速参考。

MinIO 支持使用 环境变量 指定 OIDC 提供程序设置。 minio server 进程将在下次启动时应用指定的设置。对于分布式部署,请使用相同的值在部署中的所有节点上指定这些设置。

以下示例代码设置了与为外部身份管理配置 OIDC 提供程序相关的所有环境变量。必需的最小变量是 MINIO_IDENTITY_OPENID_CONFIG_URL

export MINIO_IDENTITY_OPENID_CONFIG_URL="https://openid-provider.example.net/.well-known/openid-configuration"
export MINIO_IDENTITY_OPENID_CLIENT_ID="<string>"
export MINIO_IDENTITY_OPENID_CLIENT_SECRET="<string>"
export MINIO_IDENTITY_OPENID_CLAIM_NAME="<string>"
export MINIO_IDENTITY_OPENID_CLAIM_PREFIX="<string>"
export MINIO_IDENTITY_OPENID_SCOPES="<string>"
export MINIO_IDENTITY_OPENID_REDIRECT_URI="<string>"
export MINIO_IDENTITY_OPENID_COMMENT="<string>"

MINIO_IDENTITY_OPENID_CONFIG_URL 替换为 OIDC 提供程序发现文档的 URL 端点。

有关这些变量的完整文档,请参阅 OpenID 身份管理设置

MinIO 支持使用 configuration settings 指定 OIDC 提供程序设置。 minio server 进程将在下次启动时应用指定的设置。对于分布式部署, mc admin config 命令将配置应用于部署中的所有节点。

以下示例代码设置了与为外部身份管理配置 OIDC 提供程序相关的所有配置设置。必需的最小设置是 identity_openid config_url

mc admin config set ALIAS/ identity_openid \
   config_url="https://openid-provider.example.net/.well-known/openid-configuration" \
   client_id="<string>" \
   client_secret="<string>" \
   claim_name="<string>" \
   claim_prefix="<string>" \
   scopes="<string>" \
   redirect_uri="<string>" \
   comment="<string>"

config_url 替换为 OIDC 提供程序发现文档的 URL 端点。

有关这些设置的更完整文档,请参阅 identity_openid

2) 重启 MinIO 部署

您必须重启 MinIO 部署才能应用配置更改。使用 mc admin service restart 命令重启部署。

mc admin service restart ALIAS

ALIAS 替换为要重启的部署的 别名

3) 使用 MinIO 控制台使用 OIDC 凭据登录

MinIO 控制台支持对 OIDC 提供程序进行身份验证的完整工作流程,使用 MinIO AssumeRoleWithWebIdentity 安全令牌服务 (STS) 端点生成临时凭据,并将用户登录到 MinIO 部署。

RELEASE.2021-07-08T01-15-01Z 开始,MinIO 控制台已嵌入 MinIO 服务器中。您可以通过打开 MinIO 集群的根 URL 来访问控制台。例如, https://minio.example.net:9000

在控制台中,单击 BUTTON 开始 OpenID 身份验证流程。

登录后,您可以执行任何已验证用户有 授权 的操作。

您还可以为必须在 MinIO 上执行操作的支持应用程序创建 访问密钥。访问密钥是继承其权限的父用户的长期凭据。父用户可以在创建服务帐户时进一步限制这些权限。

4) 使用 OIDC 凭据生成与 S3 兼容的临时凭据

MinIO 要求客户端使用 AWS 签名版本 4 协议 进行身份验证,并支持已弃用的签名版本 2 协议。具体来说,客户端必须提供有效的访问密钥和密钥才能访问任何 S3 或 MinIO 管理 API,例如 PUTGETDELETE 操作。

应用程序可以使用 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
  • TOKEN 替换为上一步返回的 JWT 令牌。

  • DurationSeconds 替换为临时凭据过期前的秒数。上面的示例指定了 86400 秒,或 24 小时的时间段。

  • Policy 替换为内联 URL 编码的 JSON 策略,该策略进一步限制了与临时凭据相关的权限。

    省略使用与 OpenID 用户关联的策略 策略声明

API 响应包含一个包含访问密钥、密钥、会话令牌和过期日期的 XML 文档。应用程序可以使用访问密钥和密钥来访问 MinIO 并对其执行操作。

请参阅 AssumeRoleWithWebIdentity 获取参考文档。