Keycloak 是一种单点登录 (SSO) 解决方案。使用 Keycloak,用户可以通过 Keycloak 进行身份验证,而不是通过 MinIO 进行身份验证。如果没有 Keycloak,您将需要为每个用户创建一个单独的身份 - 从长远来看,这将难以管理。您需要一个集中式身份解决方案来管理 MinIO 的身份验证和授权。在这篇博文中,我们将向您展示如何设置 MinIO 以与 Keycloak 协同工作。但总的来说,它也应该让您了解 OIDC 如何与 MinIO 配置,以便您可以将其与 Keycloak 以外的其他任何内容一起使用,这里我们仅将其用作示例。
如何设置 Keycloak
这里我们正在将 Keycloak 作为 Docker 容器启动,以便快速启动和运行以进行测试。但在生产环境中,请遵循 Kubernetes 部署方法以与 MinIO 一起使用。
让我们继续安装 Keycloak
克隆 Keycloak 容器仓库
sudo rm -rf keycloak-containers git clone git@github.com:keycloak/keycloak-containers.git |
启动 Keycloak 实例
cd keycloak-containers/server git checkout 12.0.4 docker build -t jboss/keycloak:12.0.4 . docker run --rm -p 9080:8080 -e KEYCLOAK_USER=admin -e KEYCLOAK_PASSWORD=admin jboss/keycloak:12.0.4 |
启动后,使用以下凭据访问 http://localhost:9080
上的 Keycloak
请按照以下步骤配置 Keycloak 以与 MinIO 协同工作。这些步骤将在 Keycloak UI 中执行。
步骤 1
步骤 2
步骤 3
客户端 点击`账户` 中间的“映射器”选项卡 点击“创建”按钮 “名称”为“anytext” `映射器类型`为`用户属性` `用户属性`为`policy` 令牌声明名称为 policy 声明 JSON 类型为字符串
|
|
步骤 4
步骤 5
角色 默认角色 将“可用角色”全部移动到“实际默认角色” 对所有从左到右的“客户端角色”执行相同的操作
|
步骤 6
客户端 账户 “服务账户角色”选项卡。 将“可用角色”移动到“已分配角色” 对所有“客户端角色”执行相同的操作
|
步骤 7
用户 创建“minio”用户 属性“policy”值为“readwrite”
输入`minio123`密码 “角色映射”选项卡 将所有“可用角色”从左到右移动 对所有“客户端角色”执行相同的操作
|
步骤 8
将以下内容复制到 MinIO 环境变量MINIO_IDENTITY_OPENID_CLIENT_SECRET
如下所示
MINIO_IDENTITY_OPENID_CLIENT_SECRET="81f55c5f-137f-4d83-82c5-c7fdc73cad5e" |
接下来,让我们使用 MinIO 进行配置
使用 MinIO 进行配置
我们将向您展示几种使用 MinIO 进行配置的不同方法。首先是裸机安装,其次是 Kubernetes。
如果您在裸机或 Docker 中启动它,您可以`export`以下环境变量
export MINIO_IDENTITY_OPENID_SCOPES="openid,profile,email" export MINIO_BROWSER_REDIRECT_URL=http://localhost:9001 export MINIO_SERVER_URL=http://localhost:9000 export MINIO_IDENTITY_OPENID_CLIENT_ID="account" export MINIO_IDENTITY_OPENID_CLIENT_SECRET="81f55c5f-137f-4d83-82c5-c7fdc73cad5e" export MINIO_IDENTITY_OPENID_CONFIG_URL=http://localhost:9080/auth/realms/myrealm/.well-known/openid-configuration export MINIO_ROOT_USER=minio export MINIO_ROOT_PASSWORD=minio123
minio server /Volumes/data{1...4} --address :9000 --console-address :9001 |
然后通过 http://localhost:9001/login 使用 SSO 登录

如果您使用的是租户操作符,则过程与此类似。在租户规范中设置以下环境变量
env - name: MINIO_IDENTITY_OPENID_CLIENT_SECRET value: 6aabe0ea-8d5f-412c-99f8-63b999ccd281 - name: MINIO_IDENTITY_OPENID_SCOPES value: openid,profile,email - name: MINIO_BROWSER_REDIRECT_URL value: "https://72.140.145.27" - name: MINIO_SERVER_URL value: "https://minio.tenant-lite.svc.cluster.local:443" - name: MINIO_IDENTITY_OPENID_CLIENT_ID value: account - name: MINIO_IDENTITY_OPENID_CONFIG_URL value: "http://72.140.145.27/auth/realms/myrealm/.well-known/openid-configuration" |
- 注意 1: MINIO_BROWSER_REDIRECT_URL 是控制台 UI。它必须从节点端口公开到集群,以将端口转发到公共 IP。
- 注意 2: MINIO_IDENTITY_OPENID_CONFIG_URL 是我们的 Keycloak 公开暴露的,这也需要进行端口转发并设置公共 IP 地址。预期 SSO 以相同的方式配置,并提供一种连接到类似软件的公共方式,也可以是 auth0。
使用 SSO 访问租户

无论是在裸机、Docker 还是 Kubernetes 中,其余过程都相同。提供您的 MinIO 登录凭据。

如预期的那样,您应该会看到如下所示的 UI

就这么简单。
最后的想法
如您所见,要将 OIDC 工具(如 Keycloak)与 MinIO 集成,所需的操作并不多。您只需要配置 OIDC 工具以接受来自 MinIO 的身份验证请求,并设置 MinIO 以重定向到您的 OIDC 工具。您现在可以使用此实际工作示例来配置您自己的 OIDC。
如果您有任何关于 MinIO 的 OICD 集成或任何 SSO 的问题,请务必在 Slack 上联系我们!