将 MinIO 与 Keycloak OIDC 集成

Keycloak是一种单点登录解决方案。使用Keycloak,用户使用Keycloak而不是MinIO进行身份验证。如果没有Keycloak,您将不得不为每个用户创建一个单独的身份 - 从长远来看,这将很麻烦。您需要一个集中身份解决方案来管理 MinIO 的身份验证和授权。在这篇博文中,我们将向您展示如何设置 MinIO 以使用 Keycloak。但从广义上讲,它还应该让您了解 OIDC 是如何配置 MinIO 的,因此您可以将其与 Keycloak 以外的任何东西一起使用,这里我们只是以它为例。

如何设置 Keycloak

在这里,我们将Keycloak作为docker容器启动,以使其快速启动并运行以进行测试。但在生产环境中,请遵循 Kubernetes 部署方法与 MinIO 一起使用。

让我们继续安装 keycloak

cd ~

Git 克隆 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

user: admin

password: admin

按照以下步骤将Keycloak配置为与MinIO一起使用。这些将在 Keycloak UI 中遵循。

步骤1:

Create a Realm called "myrealm"

步骤2:

Clients

Click on account

Settings, set "Valid Redirect URIs" to "*"

expand "Advanced Settings" and set "Access Token Lifespan" to 1 Hours

Save

步骤3:

Clients

Click on `account`

Mappers Tab in the middle

Click `Create` button

"Name" with "anytext"

`Mapper Type` is `User Attribute`

`User Attribute` is `policy`

Token Claim Name is policy

Claim JSON Type is string

Click "Create" button

Name: Audience

Mapper Type: Audience

Included Client Audience: security-admin-console

Save the two mappers

Clients > account > Setting > "Service Accounts Enabled" = ON

步骤4:

Go to Roles

Add 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:

Roles

Default Roles

"Available Roles" move all to "Real Default Roles"

Same for all "Client Roles" all from left to right

步骤6:

Clients

account

"Service Account Roles" tab.

"Available Roles" move to "Assigned Roles"

Same for all "Client Roles"

步骤7:

Users

Create "minio" user

Attribute "policy" value "readwrite"

 

Put `minio123` password

"Role Mappings" Tab

"Available Roles" all from left to right

Same for all "Client Roles"

Add and Save

步骤8:

将以下内容复制到 MinIO ENV var MINIO_IDENTITY_OPENID_CLIENT_SECRET

Clients

account

Credentials

Secret

81f55c5f-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: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

然后使用 SSO 登录 http://localhost:9001/login

如果您使用的是 Tenant Operator,则其过程有点类似。在租户规范中设置以下环境变量

 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我们的密钥斗篷是公开的,这也需要端口转发并设置公共IP地址。期望 SSO 的配置方式与连接到类似软件的公共方式相同,并且也可以是 auth0。

使用 SSO 访问租户

该过程的其余部分是相同的,无论是裸机、docker 还是 Kubernetes。提供您的 MinIO 登录凭据。

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

就这么简单。

最后的思考

如您所见,要使 Keycloak 等 OIDC 工具与 MinIO 集成,无需做太多工作。您只需将 OIDC 工具配置为接受来自 MinIO 的身份验证请求,并将 MinIO 设置为重定向到您的 OIDC 工具。您现在可以使用这个实际工作示例来配置您自己的 OIDC。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/743262.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python深度学习技术

原文链接:Python深度学习技术 近年来,伴随着以卷积神经网络(CNN)为代表的深度学习的快速发展,人工智能迈入了第三次发展浪潮,AI技术在各个领域中的应用越来越广泛。Transformer模型(BERT、GPT-…

3.2 文件包含漏洞渗透实战(OWASP实战训练)

3.2 文件包含漏洞渗透实战(OWASP实战训练) 原理及危害3.低安全级别渗透3.1本地文件包含漏洞3.2 本地文件包含漏洞webshell3.3远程文件包含漏洞 上一节讲了本地文件包含和远程文件包含 本地文件包含需要将文件传上去或者不传上去(本地系统的一…

导出 S 参数扫描结果供 INTERCONNECT 使用

导出 S 参数扫描结果供 INTERCONNECT 使用 正文正文 有时候,对于 FDTD 无法直接进行仿真的大型仿真链路,我们需要使用 FDTD 针对单个小的模块进行仿真,再将得到的 S 参数结果导入到 INTERCONNECT 中使用,最终完成整个链路的仿真。通常完成 S 参数扫描后其状态如下图所示:…

【数据结构】栈的定义与实现(附完整运行代码)

目录 一、栈的定义 二、顺序栈 链栈比较 三、栈的实现(顺序栈) 3.1 ❥ 定义栈结构 3.2 ❥ 初始化 3.3 ❥ 销毁 3.4 ❥ 插入(入栈) 3.5 ❥ 删除 (出栈) 3.6 ❥ 获取栈顶元素 3.7 ❥ 判空 3.8 ❥…

1962springboot VUE社区服务平台系统开发mysql数据库web结构java编程计算机网页源码maven项目

一、源码特点 springboot VUE社区服务平台系统是一套完善的完整信息管理类型系统,结合springboot框架和VUE完成本系统,对理解vue java编程开发语言有帮助系统采用springboot框架(MVC模式开发),系统具有完整的源代码和…

光泽正在褪去,所以我们又回到了人工智能领域。

光泽正在褪去,所以我们又回到了人工智能领域。 人工智能冬天将被私有化 自从“人工智能”这个流行词在20世纪50年代被创造出来以来,人工智能经历了几次繁荣和萧条周期。 一种新的技术方法看起来很有趣,并取得了一些成果。它被荒谬地炒作并获…

EdgeOne 边缘函数 + Hono.js + Fauna 搭建个人博客

一、背景 虽然 “博客” 已经是很多很多年前流行的东西了,但是时至今日,仍然有一部分人在维护自己的博客站点,输出不少高质量的文章。 我使用过几种博客托管平台或静态博客生成框架,前段时间使用Hono.jsFauna ,基于 …

热电发电机越来越受到研发关注

热电发电机 (TEG) 利用热量(或更准确地说,温差)和众所周知的塞贝克效应来发电。它们的应用范围从收集可用热能,尤其是在工业和其他情况下“浪费”的热能,到在放射性同位素热发电机 (RTG) 中使用航天器的放射性电源作为…

静电场的基本方程

目录 场积分方程 通量(高斯定理) 环量 场微分方程 散度 旋度 小结 补充知识 立体角 场积分方程 通量(高斯定理) 环量 场微分方程 散度 旋度 小结 补充知识 立体角

慢性病防治新策略:诊所管理系统助力健康管理变革

慢性病,如高血压、糖尿病等,正逐渐成为全球健康领域的重要挑战。据尚普咨询的数据显示,全球每年有4100万人死于慢性非传染性疾病,占全球死亡总数的71%。而在中国,随着经济社会发展和卫生健康服务水平的提高&#xff0c…

OpenAI突然宣布停止向中国提供API服务!

标题 🌟 OpenAI突然宣布停止向中国提供API服务! 🌟摘要 📜引言 📢正文 📝1. OpenAI API的重要性2. 停止服务的原因分析3. 对中国市场的影响4. 应对措施代码案例 📂常见问题解答(QA)❓…

使用AES,前端加密,后端解密,spring工具类了

学习python的时候,看到很多会对参数进行加密,于是好奇心驱使下,让我去了解了下AES加密如何在java中实现。 首先 npm install crypto-js 然后在你的方法中,给你们前端源码看看,因为我用的ruoyi框架做的实验&#xff…

iSCSI driver not found和Failed to start Open-iSCSI的解决方法

案例1:iscsi的配置有问题 方法:一般的处理方法为重装iscsi-initiator-utils。 案例2:linux安装了多个内核,启动所选的内核与iscsi服务不匹配 方法:重启系统,选择对应的内核版本启动系统。 (注…

Python 围棋

效果图 完整代码 源码地址:Python 围棋 # 使用Python内置GUI模块tkinter from tkinter import * # ttk覆盖tkinter部分对象,ttk对tkinter进行了优化 from tkinter.ttk import * # 深拷贝时需要用到copy模块 import copy import tkinter.me…

机器学习课程复习——奇异值分解

1. 三种奇异值分解 奇异值分解(Singular Value Decomposition, SVD)包含了: 完全奇异值分解(Complete Singular Value Decomposition, CSVD)紧奇异值分解(Tight Singular Value Decomposition, TSVD&…

赶快收藏!全网最佳 WebSocket 封装:完美支持断网重连、自动心跳!

文章目录 一、WebSocket 基础WebSocket 的基本使用 二、封装 WebSocket 客户端WebSocketClient 类使用 WebSocketClient 类解释代码实现 三、总结优点未来改进 🎉欢迎来到SpringBoot框架学习专栏~ ☆* o(≧▽≦)o *☆嗨~我是IT陈寒🍹✨博客主页&#xff…

【复旦邱锡鹏教授《神经网络与深度学习公开课》笔记】卷积

卷积经常用在信号处理中,用于计算信号的延迟累积。假设一个信号发射器每个时刻 t t t产生一个信号 x t x_t xt​,其信息的衰减率为 w k w_k wk​,即在 k − 1 k-1 k−1个时间步长后,信息为原来的 w k w_k wk​倍,时刻 …

电脑图片压缩方法哪个好?这几个压缩方法必看

大家是否经常因为图片文件过大而无法轻松分享或上传而感到困扰?这说明你需要一款高效的图片压缩工具了。 无论是为了节省存储空间还是快速分享图片,拥有一款功能强大的图片压缩软件将极大地助你保存和分享图片。 今天,本文将介绍几款图片压…

QT自定义信号和槽函数

在QT中最重要也是必须要掌握的机制,就是信号与槽机制,在MFC上也就是类型的机制就是消息与响应函数机制 在QT中我们不仅要学会如何使用信号与槽机制,还要会自定义信号与槽函数,要自定义的原因是系统提供的信号,在一些情…

基于Python的求职招聘管理系统【附源码】

摘 要 随着互联网技术的不断发展,人类的生活已经逐渐离不开网络了,在未来的社会中,人类的生活与工作都离不开数字化、网络化、电子化与虚拟化的数字技术。从互联网的发展历史、当前的应用现状和发展趋势来看,我们完全可以肯定&…