文档

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

概述

MinIO 支持使用兼容 OpenID Connect (OIDC) 的身份提供商 (IDP),例如 Okta、KeyCloak、Dex、Google 或 Facebook,来外部管理用户身份。此页面上的步骤提供了以下方面的说明:

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

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

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

此过程适用于 OIDC 兼容提供商。请参考您选择的 OIDC 提供商的文档,获取有关身份验证和 JWT 检索的具体说明或步骤。

先决条件

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

此过程假定存在一个现有的 OIDC 提供商,例如 Okta、KeyCloak、Dex、Google 或 Facebook。有关配置这些服务的说明不在本过程的范围内。

确保打算与 MinIO 一起使用的每个用户身份都具有适当的 声明 配置,以便 MinIO 可以将 策略 与经过身份验证的用户关联。未分配策略的 OpenID 用户无权访问 MinIO 集群上的任何操作或资源。

MinIO 部署

此流程假定您已有一个运行最新稳定版 MinIO 的 MinIO 集群。有关最新 MinIO 部署的完整文档,请参考[安装和部署 MinIO](../installation.html#minio-installation)。

此流程可能适用于旧版本的 MinIO。

[安装并配置 mc 以访问 MinIO 集群](#install-and-configure-mc-with-access-to-the-minio-cluster)

此流程使用[mc](http://min-io.cn/docs/minio/linux/reference/minio-mc.html#command-mc) 来执行 MinIO 集群上的操作。在可以访问集群网络的机器上安装 mc。有关下载和安装 mc 的说明,请参阅 mc [安装快速入门](http://min-io.cn/docs/minio/linux/reference/minio-mc.html#mc-install)。

此流程假定已为 MinIO 集群配置了[别名](http://min-io.cn/docs/minio/linux/reference/minio-mc/mc-alias.html#command-mc.alias)。

[流程](#procedure)

[1) 设置 OpenID 配置](#set-the-openid-configuration-settings)

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

MinIO 支持使用[环境变量](http://min-io.cn/docs/minio/linux/reference/minio-server/settings/iam/openid.html#minio-server-envvar-external-identity-management-openid) 指定 OIDC 提供程序设置。minio server 进程会在下次启动时应用指定的设置。对于分布式部署,请在部署中的所有节点上使用相同的值一致地指定这些设置。

以下示例代码设置了与为外部身份管理配置 OIDC 提供程序相关的所有环境变量。最小必需变量是[MINIO_IDENTITY_OPENID_CONFIG_URL](http://min-io.cn/docs/minio/linux/reference/minio-server/settings/iam/openid.html#envvar.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 身份管理设置](http://min-io.cn/docs/minio/linux/reference/minio-server/settings/iam/openid.html#minio-server-envvar-external-identity-management-openid)。

MinIO 支持使用[配置设置](http://min-io.cn/docs/minio/linux/reference/minio-server/settings/iam/openid.html#mc-conf.identity_openid) 指定 OIDC 提供程序设置。minio server 进程会在下次启动时应用指定的设置。对于分布式部署,mc admin config 命令会将配置应用到部署中的所有节点。

以下示例代码设置了与为外部身份管理配置 OIDC 提供程序相关的所有配置设置。最小必需设置是[identity_openid config_url](http://min-io.cn/docs/minio/linux/reference/minio-server/settings/iam/openid.html#mc-conf.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](http://min-io.cn/docs/minio/linux/reference/minio-server/settings/iam/openid.html#mc-conf.identity_openid)。

[2) 重启 MinIO 部署](#restart-the-minio-deployment)

您必须重启 MinIO 部署才能应用配置更改。使用[mc admin service restart](http://min-io.cn/docs/minio/linux/reference/minio-mc-admin/mc-admin-service.html#mc.admin.service.restart) 命令重启部署。

mc admin service restart ALIAS

将 ALIAS 替换为要重启的部署的[别名](http://min-io.cn/docs/minio/linux/reference/minio-mc/mc-alias-set.html#alias)。

[3) 使用 MinIO 控制台使用 OIDC 凭据登录](#use-the-minio-console-to-log-in-with-oidc-credentials)

MinIO 控制台支持对 OIDC 提供程序进行身份验证的完整工作流,使用 MinIO [AssumeRoleWithWebIdentity](http://min-io.cn/docs/minio/linux/developers/security-token-service/AssumeRoleWithWebIdentity.html#minio-sts-assumerolewithwebidentity) 安全令牌服务 (STS) 终结点生成临时凭据,以及将用户登录到 MinIO 部署。

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

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

登录后,您可以执行经过身份验证的用户[授权](../../administration/identity-access-management/oidc-access-management.html#minio-external-identity-management-openid-access-control) 的任何操作。

您还可以为必须在 MinIO 上执行操作的支持应用程序创建[访问密钥](../../administration/identity-access-management/minio-user-management.html#minio-idp-service-account)。访问密钥是长期有效的凭据,它们继承自父用户的权限。父用户在创建服务帐户时可以进一步限制这些权限。

[4) 使用 OIDC 凭据生成与 S3 兼容的临时凭据](#generate-s3-compatible-temporary-credentials-using-oidc-credentials)

MinIO 要求客户端使用[AWS 签名版本 4 协议](https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authenticating-requests.html) 进行身份验证,并支持已弃用的签名版本 2 协议。具体来说,客户端必须提供有效的访问密钥和密钥才能访问任何 S3 或 MinIO 管理 API,例如 PUT、GET 和 DELETE 操作。

应用程序可以使用[AssumeRoleWithWebIdentity](http://min-io.cn/docs/minio/linux/developers/security-token-service/AssumeRoleWithWebIdentity.html#minio-sts-assumerolewithwebidentity) 安全令牌服务 (STS) API 终结点和 OIDC 提供程序返回的 JSON Web 令牌 (JWT) 按需生成临时访问凭据。

应用程序必须提供一个登录 OIDC 提供程序并检索与身份验证会话关联的 JSON Web 令牌 (JWT) 的工作流。有关在成功身份验证后获取和解析 JWT 令牌,请参考提供程序文档。MinIO 提供了一个 Go 示例应用程序[web-identity.go](https://github.com/minio/minio/blob/master/docs/sts/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 [策略](../../administration/identity-access-management/policy-based-access-control.html#minio-policy),以进一步限制与临时凭据关联的权限。

    省略使用与 OpenID 用户[策略声明](../../administration/identity-access-management/oidc-access-management.html#minio-external-identity-management-openid-access-control) 关联的策略。

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

请参阅AssumeRoleWithWebIdentity 获取参考文档。