配置 MinIO 使用 OpenID 进行身份验证
概述
MinIO 支持使用 Okta、KeyCloak、Dex、Google 或 Facebook 等兼容 OpenID Connect (OIDC) 的身份提供者 (IDP) 来进行用户身份的外部管理。本页上的步骤提供以下操作的说明:
为外部 OIDC 提供者配置 MinIO 集群。
使用 MinIO 控制台和 OIDC 凭据登录集群。
使用 MinIO 的
AssumeRoleWithWebIdentity
安全令牌服务 (STS) API 生成供应用程序使用的临时凭据。
此步骤对于兼容 OIDC 的提供者来说是通用的。有关身份验证和 JWT 检索的特定说明或步骤,请参考您选择的 OIDC 提供者的文档。
先决条件
兼容 OpenID-Connect (OIDC) 的身份提供者
此步骤假设存在 Okta、KeyCloak、Dex、Google 或 Facebook 等现有 OIDC 提供者。有关配置这些服务的说明不在此步骤的范围之内。
确保要与 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,例如 PUT
、GET
和 DELETE
操作。
应用程序可以使用 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 获取参考文档。