配置 MinIO 使用 Keycloak 进行认证
概览
本流程将 MinIO 配置为通过 OpenID Connect (OIDC) 协议,使用 Keycloak 作为外部 Identity Provider (IDP) 来认证用户。
本页提供了在 Kubernetes 和 Baremetal 基础设施上的 MinIO 部署中配置 OIDC 的流程。
请选择与你基础设施对应的标签页,在不同说明集之间切换。
对于使用 MinIO Kubernetes Operator 部署的 MinIO Tenant,本流程包括:
配置 Keycloak 以配合 MinIO 认证与授权
配置新的或现有的 MinIO Tenant,使其使用 Keycloak 作为 OIDC 提供方
创建用于控制 Keycloak 认证用户访问权限的策略
使用 SSO 和 Keycloak 托管身份登录 MinIO Tenant Console
使用
AssumeRoleWithWebIdentitySecurity Token Service (STS) API 生成临时 S3 访问凭证
对于部署在裸金属基础设施上的 MinIO,本流程包括:
配置 Keycloak 以配合 MinIO 认证与授权
配置新的或现有的 MinIO 集群,使其使用 Keycloak 作为 OIDC 提供方
创建用于控制 Keycloak 认证用户访问权限的策略
使用 SSO 和 Keycloak 托管身份登录 MinIO Console
使用
AssumeRoleWithWebIdentitySecurity Token Service (STS) API 生成临时 S3 访问凭证
本流程基于 Keycloak 21.0.0 编写并完成测试。
这些说明也可能适用于其他 Keycloak 版本。
本流程假定你已经具备 Keycloak 的使用经验,并已阅读 其文档,以获取部署、配置和管理该服务的指导和最佳实践。
前提条件
Keycloak 部署与 Realm 配置
本流程假定你已经拥有一个现成的 Keycloak 部署,并且具备其管理访问权限。 具体来说,你必须拥有在该 Keycloak 部署上创建和配置 Realms、Clients、Client Scopes、Realm Roles、Users 和 Groups 的权限。
对于与 MinIO Tenant 位于同一 Kubernetes 集群内的 Keycloak 部署,本流程假定 Keycloak 与 MinIO 的 pods/services 之间具备双向访问能力。 对于位于 Kubernetes 集群外部的 Keycloak 部署,本流程假定已经存在用于管理 MinIO Tenant 入站和出站访问的 Ingress、Load Balancer 或类似 Kubernetes 网络控制组件。
MinIO 部署必须与目标 OIDC 服务保持双向访问。
请确保每个打算与 MinIO 配合使用的用户身份,都配置了合适的 claim,以便 MinIO 能将认证用户关联到某个 策略。 未分配任何策略的 OpenID 用户,无权访问 MinIO 集群中的任何操作或资源。
访问 MinIO 集群
为 MinIO 配置 Keycloak 身份管理
配置或创建用于访问 Keycloak 的 Client
认证到 Keycloak Administrative Console,然后进入 Clients。
选择 Create client,按照提示为 MinIO 创建一个新的 Keycloak client。 按如下方式填写指定输入项:
Client ID
设置为 MinIO 的唯一标识符(
minio)Client type
设置为
OpenID ConnectAlways display in console
切换为
OnClient authentication
切换为
OnAuthentication flow
打开
Standard flow(可选):guilabel:Authentication flow
打开
Direct access grants(API 测试)Keycloak 会以一组默认配置值部署该 client。 请根据你的 Keycloak 环境和期望行为按需修改这些值。 下表提供了一组可用于配置的基线设置和值:
Root URL
设置为
${authBaseUrl}Home URL
设置为 MinIO 要使用的 Realm(
/realms/master/account/)Valid Redirect URI
设置为
*Keys -> Use JWKS URL
切换为
OnAdvanced -> Advanced Settings -> Access Token Lifespan
设置为
1 Hour。为 MinIO Client 创建 Client Scope
Client scope 允许 Keycloak 在认证请求返回的 JSON Web Token(JWT)中映射用户属性。 这样 MinIO 就可以在向用户分配策略时引用这些属性。 这一步会创建在 Keycloak 认证成功后支持 MinIO 授权所需的 client scope。
进入 Client scopes 视图,为 MinIO 授权创建一个新的 client scope:
Name
设置为任意易识别的策略名称(
minio-authorization)Include in token scope
切换为
On创建完成后,从列表中选中该 scope,并进入 Mappers。
选择 Configure a new mapper 创建新的映射:
User Attribute
选择 Mapper Type
Name
设置为任意易识别的映射名称(
minio-policy-mapper)User Attribute
设置为
policyToken Claim Name
设置为
policyAdd to ID token
设置为
OnClaim JSON Type
设置为
StringMultivalued
设置为
On这样可以在单个 claim 中设置多个
policy值。Aggregate attribute values
设置为
On这样用户就可以继承其所属 Group 中设置的任意
policy。创建完成后,将该 Client Scope 分配给 MinIO client。
进入 Clients 并选择 MinIO client。
选择 Client scopes,然后选择 Add client scope。
选择先前创建的 scope,并将 Assigned type 设置为
default。
将所需属性应用到 Keycloak Users/Groups
你必须为 Keycloak Users 或 Groups 分配一个名为
policy的属性。 将其值设置为 MinIO 部署上的任意 policy。对于 Users,进入 Users 并选择或创建 User:
Credentials
如果尚未设置,将用户密码设置为永久值
Attributes
创建一个新属性,键为
policy,值为 MinIO 部署上的任意 policy (consoleAdmin)对于 Groups,进入 Groups 并选择或创建 Group:
Attributes
创建一个新属性,键为
policy,值为 MinIO 部署上的任意 policy (consoleAdmin)你可以将用户加入组,使其继承指定的
policy属性。 如果 Mapper 设置中启用了 Aggregate attribute values, Keycloak 会在已认证用户的 JWT token 中包含聚合后的策略数组。 MinIO 可以在为用户授权时使用这份策略列表。你可以使用 Keycloak API 测试某个用户配置的策略:
curl -d "client_id=minio" \ -d "client_secret=secretvalue" \ -d "grant_type=password" \ -d "username=minio-user-1" \ -d "password=minio-user-1-password" \ http://keycloak-service.keycloak-namespace.svc.cluster-domain.example/realms/REALM/protocol/openid-connect/token
如果成功,
access_token中会包含调用 MinIO AssumeRoleWithWebIdentity STS API 并生成 S3 凭证所需的 JWT。你可以使用 JWT 解码器检查其载荷,确认其中包含
policy键, 且列出了一个或多个 MinIO policy。为 Keycloak 认证配置 MinIO
你可以使用 mc idp openid add 命令为 Keycloak 服务创建新配置。
该命令接受所有受支持的
OpenID Configuration Settings:
mc idp openid add ALIAS PRIMARY_IAM \
client_id=MINIO_CLIENT \
client_secret=MINIO_CLIENT_SECRET \
config_url="https://keycloak-service.keycloak-namespace.svc.cluster-domain.example/realms/REALM/.well-known/openid-configuration" \
display_name="SSO_IDENTIFIER"
scopes="openid,email,preferred_username" \
redirect_uri_dynamic="on"
|
设置为该 Keycloak 服务的唯一标识符,例如 |
|---|---|
MINIO_CLIENTMINIO_CLIENT_SECRET |
设置为步骤 1 中配置的 Keycloak client ID 和 secret |
|
设置为 Keycloak OpenID 配置文档的地址(keycloak-service.keycloak-namespace.svc.cluster-domain.example) |
|
设置为 MinIO Console 在单点登录(SSO)流程中向用户显示的该 Keycloak 服务名称 |
|
设置为你希望包含在 JWT 中的 OpenID scope 列表,例如 |
|
设置为 这会将客户端所使用的 MinIO Console 地址替换到 Keycloak 重定向 URI 中。 Keycloak 会使用提供的 URI 将已认证用户返回到 Console。 对于位于反向代理、负载均衡器或类似网络控制平面之后的 MinIO Console 部署,
你也可以使用 |
重启 MinIO 部署以应用这些更改。
检查 MinIO 日志,确认启动成功,且没有与 OIDC 配置相关的错误。
使用 Security Token Service(STS)生成应用程序凭证
使用 S3 兼容 SDK 的应用程序必须以 Access Key 和 Secret Key 的形式提供凭证。 MinIO AssumeRoleWithWebIdentity API 会使用 Keycloak 在认证后返回的 JWT 返回所需的临时凭证, 其中包括必须提供的 session token。
你可以使用以下 HTTP 调用序列和
curl工具测试这一工作流:以 Keycloak 用户身份认证并获取 JWT token
curl -X POST "https://keycloak-service.keycloak-namespace.svc.cluster-domain.example/realms/REALM/protocol/openid-connect/token" \ -H "Content-Type: application/x-www-form-urlencoded" \ -d "username=USER" \ -d "password=PASSWORD" \ -d "grant_type=password" \ -d "client_id=CLIENT" \ -d "client_secret=SECRET"
将
USER和PASSWORD替换为REALM中某个 Keycloak 用户的凭证。将
CLIENT和SECRET替换为该REALM中 MinIO 专用 Keycloak client 的 ID 和 secret。
你可以使用
jq或类似的 JSON 格式化工具处理返回结果。 提取access_token字段以获取所需的访问 token。 同时关注expires_in字段,以了解 token 过期前还剩多少秒。使用
AssumeRoleWithWebIdentityAPI 生成 MinIO 凭证curl -X POST "https://minio.minio-tenant.svc.cluster-domain.example" \ -H "Content-Type: application/x-www-form-urlencoded" \ -d "Action=AssumeRoleWithWebIdentity" \ -d "Version=2011-06-15" \ -d "DurationSeconds=86000" \ -d "WebIdentityToken=TOKEN"
将
TOKEN替换为 Keycloak 返回的access_token值。API 成功时会返回一个 XML 文档,其中包含以下键:
Credentials.AccessKeyId- Keycloak 用户的 Access KeyCredentials.SecretAccessKey- Keycloak 用户的 Secret KeyCredentials.SessionToken- Keycloak 用户的 Session TokenCredentials.Expiration- 生成凭证的过期时间
测试这些凭证
使用你偏好的 S3 兼容 SDK,利用生成的凭证连接到 MinIO。
例如,下面的 Python 代码使用 MinIO Python SDK 连接到 MinIO 部署并返回存储桶列表:
from minio import Minio client = MinIO( "minio.minio-tenant.svc.cluster-domain.example", access_key = "ACCESS_KEY", secret_key = "SECRET_KEY", session_token = "SESSION_TOKEN" secure = True ) client.list_buckets()
后续步骤
应用程序应使用其选择的 SDK 实现 STS AssumeRoleWithWebIdentity 流程。 当 STS 凭证过期时,应用程序应具备在重试并继续操作之前重新生成 JWT token、 STS token 和 MinIO 凭证的逻辑。
或者,用户也可以通过 MinIO Console 使用其 Keycloak 凭证生成 access keys, 以创建类似长期 API key 的访问方式。
配置或创建用于访问 Keycloak 的 Client
认证到 Keycloak Administrative Console,然后进入 Clients。
选择 Create client,按照提示为 MinIO 创建一个新的 Keycloak client。 按如下方式填写指定输入项:
Client ID
设置为 MinIO 的唯一标识符(
minio)Client type
设置为
OpenID ConnectAlways display in console
切换为
OnClient authentication
切换为
OnAuthentication flow
打开
Standard flow(可选):guilabel:Authentication flow
打开
Direct access grants(API 测试)Keycloak 会以一组默认配置值部署该 client。 请根据你的 Keycloak 环境和期望行为按需修改这些值。 下表提供了一组可用于配置的基线设置和值:
Root URL
设置为
${authBaseUrl}Home URL
设置为 MinIO 要使用的 Realm(
/realms/master/account/)Valid Redirect URI
设置为
*Keys -> Use JWKS URL
切换为
OnAdvanced -> Advanced Settings -> Access Token Lifespan
设置为
1 Hour。为 MinIO Client 创建 Client Scope
Client Scope 允许 Keycloak 在认证请求返回的 JSON Web Token(JWT)中映射用户属性。 这样 MinIO 就可以在向用户分配策略时引用这些属性。 此步骤会创建在 Keycloak 认证成功后支持 MinIO 授权所需的 Client Scope。
进入 Client scopes 视图,为 MinIO 授权创建一个新的 client scope:
Name
设置为任意易识别的策略名称(
minio-authorization)Include in token scope
切换为
On创建完成后,从列表中选中该 scope,并进入 Mappers。
选择 Configure a new mapper 创建新的映射:
User Attribute
选择 Mapper Type
Name
设置为任意易识别的映射名称(
minio-policy-mapper)User Attribute
设置为
policyToken Claim Name
设置为
policyAdd to ID token
设置为
OnClaim JSON Type
设置为
StringMultivalued
设置为
On这样可以在单个 claim 中设置多个
policy值。Aggregate attribute values
设置为
On这样用户就可以继承其所属 Group 中设置的任意
policy。创建完成后,将该 Client Scope 分配给 MinIO client。
进入 Clients 并选择 MinIO client。
选择 Client scopes,然后选择 Add client scope。
选择先前创建的 scope,并将 Assigned type 设置为
default。
将所需属性应用到 Keycloak Users/Groups
必须为 Keycloak Users 或 Groups 分配一个名为
policy的属性。 将其值设置为 MinIO 部署上的任意 policy。对于 Users,进入 Users 并选择或创建 User:
Credentials
如果尚未设置,将用户密码设置为永久值
Attributes
创建一个新属性,键为
policy,值为 MinIO 部署上的任意 policy (consoleAdmin)对于 Groups,进入 Groups 并选择或创建 Group:
Attributes
创建一个新属性,键为
policy,值为 MinIO 部署上的任意 policy (consoleAdmin)你可以将用户加入组,使其继承指定的
policy属性。 如果 Mapper 设置中启用了 Aggregate attribute values, Keycloak 会在已认证用户的 JWT token 中包含聚合后的策略数组。 MinIO 可以在为用户授权时使用这份策略列表。你可以使用 Keycloak API 测试某个用户配置的策略:
curl -d "client_id=minio" \ -d "client_secret=secretvalue" \ -d "grant_type=password" \ -d "username=minio-user-1" \ -d "password=minio-user-1-password" \ http://keycloak-url.example.net:8080/realms/REALM/protocol/openid-connect/token
如果成功,
access_token中会包含调用 MinIO AssumeRoleWithWebIdentity STS API 并生成 S3 凭证所需的 JWT。你可以使用 JWT 解码器检查其载荷,确认其中包含
policy键, 且列出了一个或多个 MinIO policy。为 Keycloak 认证配置 MinIO
MinIO 支持多种配置 Keycloak 认证的方法:
使用终端/shell 以及
mc idp openid命令使用在启动 MinIO 之前设置的环境变量
你可以使用
mc idp openid add命令为 Keycloak 服务创建新配置。 该命令接受所有受支持的 OpenID Configuration Settings:mc idp openid add ALIAS PRIMARY_IAM \ client_id=MINIO_CLIENT \ client_secret=MINIO_CLIENT_SECRET \ config_url="https://keycloak-url.example.net:8080/realms/REALM/.well-known/openid-configuration" \ display_name="SSO_IDENTIFIER" scopes="openid,email,preferred_username" \ redirect_uri_dynamic="on"
PRIMARY_IAM设置为该 Keycloak 服务的唯一标识符,例如
keycloak_primaryMINIO_CLIENTMINIO_CLIENT_SECRET设置为步骤 1 中配置的 Keycloak client ID 和 secret
config_url设置为 Keycloak OpenID 配置文档的地址(keycloak-url.example.net:8080)
display_name设置为 MinIO Console 在单点登录(SSO)流程中向用户显示的该 Keycloak 服务名称
scopes设置为你希望包含在 JWT 中的 OpenID scope 列表,例如
preferred_username或emailredirect_uri_dynamic设置为
on这会将客户端所使用的 MinIO Console 地址替换到 Keycloak 重定向 URI 中。 Keycloak 会使用提供的 URI 将已认证用户返回到 Console。
对于位于反向代理、负载均衡器或类似网络控制平面之后的 MinIO Console 部署, 你也可以使用
MINIO_BROWSER_REDIRECT_URL变量设置 Keycloak 应使用的重定向地址。在使用
-e ENVVAR=VALUE标志启动容器之前, 设置以下 环境变量。下面的示例代码设置了将 Keycloak 配置为外部身份管理提供者所需的最小环境变量集合。
MINIO_IDENTITY_OPENID_CONFIG_URL_PRIMARY_IAM="https://keycloak-url.example.net:8080/realms/REALM/.well-known/openid-configuration" MINIO_IDENTITY_OPENID_CLIENT_ID_PRIMARY_IAM="MINIO_CLIENT" MINIO_IDENTITY_OPENID_CLIENT_SECRET_PRIMARY_IAM="MINIO_CLIENT_SECRET" MINIO_IDENTITY_OPENID_DISPLAY_NAME_PRIMARY_IAM="SSO_IDENTIFIER" MINIO_IDENTITY_OPENID_SCOPES_PRIMARY_IAM="openid,email,preferred_username" MINIO_IDENTITY_OPENID_REDIRECT_URI_DYNAMIC_PRIMARY_IAM="on"
_PRIMARY_IAM将后缀
_PRIMARY_IAM替换为该 Keycloak 配置的唯一标识符。 例如,MINIO_IDENTITY_OPENID_CONFIG_URL_KEYCLOAK_PRIMARY。如果你只打算为该部署配置单个 OIDC 提供者,也可以省略该后缀。
指定 Keycloak OpenID 配置文档的地址(keycloak-url.example.net:8080)
确保其中的
REALM与你希望用于 MinIO 用户认证的 Keycloak realm 一致指定步骤 1 中配置的 Keycloak client ID 和 secret
指定 MinIO Console 在单点登录(SSO)流程中向用户显示的该 Keycloak 服务名称
指定你希望包含在 JWT 中的 OpenID scope,例如
preferred_username或email设置为
on这会将客户端所使用的 MinIO Console 地址替换到 Keycloak 重定向 URI 中。 Keycloak 会使用提供的 URI 将已认证用户返回到 Console。
对于位于反向代理、负载均衡器或类似网络控制平面之后的 MinIO Console 部署, 你也可以使用
MINIO_BROWSER_REDIRECT_URL变量设置 Keycloak 应使用的重定向地址。有关这些变量的完整文档,请参见 OpenID 身份管理设置
重启 MinIO 部署以应用这些更改。
检查 MinIO 日志,确认启动成功,且没有与 OIDC 配置相关的错误。
如果尝试通过 Console 登录,现在应能看到一个使用已配置 Display Name 的(SSO)按钮。
指定一个已配置的用户并尝试登录。 MinIO 应自动将您重定向到 Keycloak 登录页面。 认证成功后,Keycloak 应使用原始 Console URL 或已配置的 Redirect URI 将您重定向回 MinIO Console。
使用 Security Token Service(STS)生成应用程序凭证
使用 S3 兼容 SDK 的应用程序必须以 Access Key 和 Secret Key 的形式提供凭证。 MinIO AssumeRoleWithWebIdentity API 会使用 Keycloak 在认证后返回的 JWT 返回所需的临时凭证, 其中包括必须提供的 session token。
你可以使用以下 HTTP 调用序列和
curl工具测试这一工作流:以 Keycloak 用户身份认证并获取 JWT token
curl -X POST "https://keycloak-url.example.net:8080/realms/REALM/protocol/openid-connect/token" \ -H "Content-Type: application/x-www-form-urlencoded" \ -d "username=USER" \ -d "password=PASSWORD" \ -d "grant_type=password" \ -d "client_id=CLIENT" \ -d "client_secret=SECRET"
将
USER和PASSWORD替换为REALM中某个 Keycloak 用户的凭证。将
CLIENT和SECRET替换为该REALM中 MinIO 专用 Keycloak client 的 ID 和 secret。
你可以使用
jq或类似的 JSON 格式化工具处理返回结果。 提取access_token字段以获取所需的访问 token。 同时关注expires_in字段,以了解 token 过期前还剩多少秒。使用
AssumeRoleWithWebIdentityAPI 生成 MinIO 凭证curl -X POST "https://minio-url.example.net:9000" \ -H "Content-Type: application/x-www-form-urlencoded" \ -d "Action=AssumeRoleWithWebIdentity" \ -d "Version=2011-06-15" \ -d "DurationSeconds=86000" \ -d "WebIdentityToken=TOKEN"
将
TOKEN替换为 Keycloak 返回的access_token值。API 成功时会返回一个 XML 文档,其中包含以下键:
Credentials.AccessKeyId- Keycloak 用户的 Access KeyCredentials.SecretAccessKey- Keycloak 用户的 Secret KeyCredentials.SessionToken- Keycloak 用户的 Session TokenCredentials.Expiration- 生成凭证的过期时间
测试这些凭证
使用你偏好的 S3 兼容 SDK,利用生成的凭证连接到 MinIO。
例如,下面的 Python 代码使用 MinIO Python SDK 连接到 MinIO 部署并返回存储桶列表:
from minio import Minio client = MinIO( "minio-url.example.net:9000", access_key = "ACCESS_KEY", secret_key = "SECRET_KEY", session_token = "SESSION_TOKEN" secure = True ) client.list_buckets()
后续步骤
应用程序应使用所选 SDK 实现 STS AssumeRoleWithWebIdentity 流程。 当 STS 凭证过期时,应用程序应具备在重试并继续操作之前重新生成 JWT token、 STS token 和 MinIO 凭证的逻辑。
或者,用户也可以通过 MinIO Console 使用其 Keycloak 凭证生成 access keys, 以创建类似长期 API key 的访问方式。
启用 Keycloak Admin REST API
MinIO 支持使用 Keycloak Admin REST API 检查认证用户是否存在,以及 该用户是否在 Keycloak realm 中处于启用状态。 这一功能使 MinIO 可以更快地撤销此前已经认证过的 Keycloak 用户访问权限。 如果没有这项功能,MinIO 对已禁用或已删除用户最早能够生效的访问撤销时间点,只能等到最后一次获取的认证 token 过期。
本流程假定你已经拥有一个现成的 MinIO 部署,并已将 Keycloak 配置为外部身份管理器。
1) 创建所需的 Client Scopes
进入 Client scopes 视图并创建一个新的 scope:
Name |
将 scope 名称设置为一个易于识别的名字( |
|---|---|
Mappers |
选择 Configure a new mapper |
Audience |
将 Name 设置为一个易于识别的映射名称( |
Included Client Audience |
设置为 |
进入 Clients,并选择 MinIO client
在 Service account roles 中,选择 Assign role 并分配
admin角色在 Client scopes 中,选择 Add client scope 并添加前面创建的 scope
进入 Settings,并确保 Authentication flow 中包含 Service accounts roles。
2) 验证 Admin API 访问
你可以使用 MinIO client 凭证调用 Admin REST API,以获取 bearer token 和用户数据,从而验证该功能:
获取 bearer token:
curl -d "client_id=minio" \ -d "client_secret=secretvalue" \ -d "grant_type=password" \ http://keycloak-url:port/admin/realms/REALM/protocol/openid-connect/token
使用返回结果中的
access_token访问 Admin API:curl -H "Authentication: Bearer ACCESS_TOKEN_VALUE" \ http://keycloak-url:port/admin/realms/REALM/users/UUID
将
UUID替换为你要查询用户的唯一 ID。 响应应类似如下:{ "id": "954de141-781b-4eaf-81bf-bf3751cdc5f2", "createdTimestamp": 1675866684976, "username": "minio-user-1", "enabled": true, "totp": false, "emailVerified": false, "firstName": "", "lastName": "", "attributes": { "policy": [ "readWrite" ] }, "disableableCredentialTypes": [], "requiredActions": [], "notBefore": 0, "access": { "manageGroupMembership": true, "view": true, "mapRoles": true, "impersonate": true, "manage": true } }
如果返回值中的 enabled 为 false 或 null(用户已从 Keycloak 中移除),MinIO 会撤销该认证用户的访问权限。
3) 在 MinIO 上启用 Keycloak Admin 支持
MinIO 支持多种方式来配置 Keycloak Admin API 支持:
使用终端 / shell 以及
mc idp openid命令使用在启动 MinIO 之前设置的环境变量
你可以使用 mc idp openid update 命令修改现有 Keycloak 服务的配置项。
如果是首次配置 Keycloak,也可以直接在初始设置时包含以下配置项。
该命令接受所有受支持的 OpenID 配置项:
mc idp openid update ALIAS KEYCLOAK_IDENTIFIER \
vendor="keycloak" \
keycloak_admin_url="https://keycloak-url:port/admin"
keycloak_realm="REALM"
将
KEYCLOAK_IDENTIFIER替换为已配置 Keycloak IDP 的名称。 你可以使用mc idp openid ls查看 MinIO 部署上所有已配置的 IDP 项在
keycloak_admin_url配置项中指定 Keycloak admin URL在
keycloak_realm中指定 Keycloak Realm 名称
在合适的配置位置(例如 /etc/default/minio)设置以下 环境变量。
以下示例代码设置了在现有 Keycloak 配置上启用 Keycloak Admin API 所需的最小环境变量集合。
请将后缀 _PRIMARY_IAM 替换为目标 Keycloak 配置的唯一标识符。
MINIO_IDENTITY_OPENID_VENDOR_PRIMARY_IAM="keycloak"
MINIO_IDENTITY_OPENID_KEYCLOAK_ADMIN_URL_PRIMARY_IAM="https://keycloak-url:port/admin"
MINIO_IDENTITY_OPENID_KEYCLOAK_REALM_PRIMARY_IAM="REALM"
在
MINIO_IDENTITY_OPENID_KEYCLOAK_ADMIN_URL中指定 Keycloak admin URL在
MINIO_IDENTITY_OPENID_KEYCLOAK_REALM中指定 Keycloak Realm 名称