使用 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 支持使用 配置 设置
指定 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 以获取参考文档。