Keycloak是一种单点登录解决方案。使用Keycloak,用户使用Keycloak而不是MinIO进行身份验证。如果没有Keycloak,您将不得不为每个用户创建一个单独的身份 - 从长远来看,这将很麻烦。您需要一个集中身份解决方案来管理 MinIO 的身份验证和授权。在这篇博文中,我们将向您展示如何设置 MinIO 以使用 Keycloak。但从广义上讲,它还应该让您了解 OIDC 是如何配置 MinIO 的,因此您可以将其与 Keycloak 以外的任何东西一起使用,这里我们只是以它为例。
如何设置 Keycloak
在这里,我们将Keycloak作为docker容器启动,以使其快速启动并运行以进行测试。但在生产环境中,请遵循 Kubernetes 部署方法与 MinIO 一起使用。
让我们继续安装 keycloak
cd ~
Git 克隆 keycloak 容器仓库
sudo rm -rf keycloak-containersgit clone git@github.com:keycloak/keycloak-containers.git
启动 keycloak 实例
cd keycloak-containers/servergit checkout 12.0.4docker 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
user: adminpassword: admin
按照以下步骤将Keycloak配置为与MinIO一起使用。这些将在 Keycloak UI 中遵循。
步骤1:
Create a Realm called "myrealm"
步骤2:
ClientsClick on accountSettings, set "Valid Redirect URIs" to "*"expand "Advanced Settings" and set "Access Token Lifespan" to 1 HoursSave
步骤3:
ClientsClick on `account`Mappers Tab in the middleClick `Create` button"Name" with "anytext"`Mapper Type` is `User Attribute``User Attribute` is `policy`Token Claim Name is policyClaim JSON Type is stringClick "Create" buttonName: AudienceMapper Type: AudienceIncluded Client Audience: security-admin-consoleSave the two mappersClients > account > Setting > "Service Accounts Enabled" = ON
步骤4:
Go to RolesAdd new Role `admin` with Description `${role_admin}`"Composite Roles" as "ON""Available Roles" move them to "Associated Roles"Do the same for all "Client Roles" from left to right.
步骤5:
RolesDefault Roles"Available Roles" move all to "Real Default Roles"Same for all "Client Roles" all from left to right
步骤6:
Clientsaccount"Service Account Roles" tab."Available Roles" move to "Assigned Roles"Same for all "Client Roles"
步骤7:
UsersCreate "minio" userAttribute "policy" value "readwrite"Put `minio123` password"Role Mappings" Tab"Available Roles" all from left to rightSame for all "Client Roles"Add and Save
步骤8:
将以下内容复制到 MinIO ENV var MINIO_IDENTITY_OPENID_CLIENT_SECRET
ClientsaccountCredentialsSecret81f55c5f-137f-4d83-82c5-c7fdc73cad5e
这样
MINIO_IDENTITY_OPENID_CLIENT_SECRET="81f55c5f-137f-4d83-82c5-c7fdc73cad5e"
接下来,让我们使用 MinIO 进行配置
使用 MinIO 进行配置
我们将向您展示使用 MinIO 进行配置的几种不同方法。首先是裸机安装,其次是 Kubernetes。
如果您在裸机或 docker 中启动它,您可以“导出”以下环境变量
export MINIO_IDENTITY_OPENID_SCOPES="openid,profile,email"export MINIO_BROWSER_REDIRECT_URL=http://localhost:9001export MINIO_SERVER_URL=http://localhost:9000export 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-configurationexport MINIO_ROOT_USER=minioexport MINIO_ROOT_PASSWORD=minio123minio server /Volumes/data{1...4} --address :9000 --console-address :9001
然后使用 SSO 登录 http://localhost:9001/login
如果您使用的是 Tenant Operator,则其过程有点类似。在租户规范中设置以下环境变量
env:- name: MINIO_IDENTITY_OPENID_CLIENT_SECRETvalue: 6aabe0ea-8d5f-412c-99f8-63b999ccd281- name: MINIO_IDENTITY_OPENID_SCOPESvalue: openid,profile,email- name: MINIO_BROWSER_REDIRECT_URLvalue: "https://72.140.145.27"- name: MINIO_SERVER_URLvalue: "https://minio.tenant-lite.svc.cluster.local:443"- name: MINIO_IDENTITY_OPENID_CLIENT_IDvalue: account- name: MINIO_IDENTITY_OPENID_CONFIG_URLvalue: "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我们的密钥斗篷是公开的,这也需要端口转发并设置公共IP地址。期望 SSO 的配置方式与连接到类似软件的公共方式相同,并且也可以是 auth0。
使用 SSO 访问租户
该过程的其余部分是相同的,无论是裸机、docker 还是 Kubernetes。提供您的 MinIO 登录凭据。
正如预期的那样,您应该会看到如下所示的 UI
就这么简单。
最后的思考
如您所见,要使 Keycloak 等 OIDC 工具与 MinIO 集成,无需做太多工作。您只需将 OIDC 工具配置为接受来自 MinIO 的身份验证请求,并将 MinIO 设置为重定向到您的 OIDC 工具。您现在可以使用这个实际工作示例来配置您自己的 OIDC。