配置MinIO以使用OpenID进行身份验证
概述
MinIO 支持使用 OpenID Connect(OIDC)兼容的身份提供者(IDP),如 Okta、KeyCloak、Dex、Google 或 Facebook,以外部管理用户身份。 本页面的流程提供以下操作说明:
- 配置 MinIO 集群以使用外部 OIDC 提供程序。 
- 使用 MinIO 控制台和 OIDC 凭据登录集群。 
- 使用 MinIO - AssumeRoleWithWebIdentity安全令牌服务(STS)API 为应用程序生成临时凭据。
此过程适用于兼容 OIDC 的提供程序。 有关身份验证和 JWT 检索的具体说明或程序,请参考您选择的 OIDC 提供程序的文档。
先决条件
OpenID-Connect (OIDC) 兼容身份提供者。
此过程假定已存在 OIDC 提供程序,如 Okta、KeyCloak、Dex、Google 或 Facebook。 此过程的范围不包括配置这些服务的说明。
确保为打算与 MinIO 一起使用的每个用户身份配置了适当的 claim,以便 MinIO 可以将 policy 与经过身份验证的用户关联起来。 没有分配策略的 OpenID 用户无权访问 MinIO 群集上的任何操作或资源。
MinIO 部署
此过程假定存在一个运行 最新稳定版本 的 MinIO 集群。 有关新 MinIO 部署的更完整文档,请参考 安装和部署MinIO。
此过程对于较旧版本的 MinIO 可能 正常工作。
安装和配置 mc ,并拥有访问 MinIO 集群的权限
此过程使用 mc 在 MinIO 集群上执行操作。
在具有网络访问权限的机器上安装 mc 。
请参考 mc Installation Quickstart 获取下载和安装 mc 的指导。
此过程假设已经配置了 MinIO 集群的 alias。
Procedure
1) 设置 OpenID 配置设置
您可以使用环境变量 或 服务器运行时配置设置来配置 OIDC 提供程序。 这两种方法都需要启动/重启 MinIO 部署以应用更改。 f以下选项卡分别提供了所有必需和可选的 的环境变量和配置设置的快速参考:
MinIO 支持使用
环境变量
指定 OIDC(OpenID Connect) 提供程序设置。
minio server 进程将在下一次启动时应用指定的设置。
对于分布式部署,请使用 相同的 值,
始终在部署的所有节点上指定这些设置。
以下示例代码设置了与配置 OIDC(OpenID Connect)
提供程序用于外部身份管理相关的 所有 环境变量。
最低 必需 变量是
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支持使用 配置设置 <identity_openid>`来指定
:abbr:`OIDC(OpenID Connect) 提供程序设置。
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>"
请使用 OIDC 提供程序发现文档
的 URL 端点替换 config_url 。
要了解更完整的有关这些设置的文档,请参见
identity_openid.
2) 重新启动 MinIO 部署
您必须重新启动 MinIO 部署以应用配置更改。
使用 mc admin service restart 命令重新启动部署。
mc admin service restart ALIAS
将 ALIAS 替换为要重新启动的部署的
alias。
3) 使用 MinIO 控制台以 OIDC 凭据登录
控制台支持完整的身份验证工作流程,包括向 OIDC(OpenID Connect) 提供程序进行身份验证、使用 MinIO 的 AssumeRoleWithWebIdentity 安全令牌服务(STS)端点生成临时凭据, 并将用户登录到 MinIO 部署。
从 RELEASE.2021-07-08T01-15-01Z 开始,MinIO 控制台已嵌入到 MinIO 服务器中。
您可以通过打开 MinIO 集群的根 URL 访问控制台。
例如, https://minio.example.net:9000 .
从控制台中,点击 BUTTON 开始 OpenID 身份验证 流程。
登录后,您可以执行经过身份验证的任何操作 用户已获得 授权.
您还可以为需要在 MinIO 上执行操作的支持应用程序创建 access keys 。 访问密钥是长期的凭据,它们继承其权限自父用户。 父用户可以在创建服务帐户时进一步限制这些 权限。
4) 使用 OIDC 凭据生成 S3 兼容的临时凭据
MinIO 要求客户端使用 AWS Signature Version 4协议 支持已弃用的
Signature Version 2 协议。 具体来说,客户必须提供有效的访问权限
用于访问任何 S3 或 MinIO 管理 API 的密钥和秘密密钥,例如
PUT 、 GET 和 DELETE 操作。
应用程序可以根据需要使用以下命令生成临时访问凭据 AssumeRoleWithWebIdentity 安全令牌服务 (STS) API 端点和返回的 JSON Web 令牌 (JWT) OIDC 提供者.
应用程序必须提供一个流程,用于登录到 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
- 请使用前一步骤返回的 JWT 令牌替换 - TOKEN。
- 请使用秒为单位的持续时间替换 - DurationSeconds,直到临时凭证过期。上面的示例指定了- 86400秒或 24 小时的时间段。
- 请使用内联 URL 编码的 JSON policy 替换 - Policy,以进一步限制与临时凭证相关联的权限。- 请勿使用与 OpenID 用户关联的 policy claim. 
API 响应由包含访问密钥、秘密密钥、会话令牌和 过期日期的 XML 文档组成。 应用程序可以使用访问密钥和秘密密钥访问 MinIO 并执行操作。
有关参考文档,请参阅 AssumeRoleWithWebIdentity 。
