开源身份认证与访问管理平台 - Keycloak(三)公有云Console集成实践(AWS / 阿里云 / OCI)

目录

简介

十一、SAML集成原理

[11.1 为什么公有云使用SAML](#11.1 为什么公有云使用SAML)

[11.2 SAML认证流程](#11.2 SAML认证流程)

十二、AWS集成

[12.1 AWS身份认证架构](#12.1 AWS身份认证架构)

[12.2 IAM与STS简介](#12.2 IAM与STS简介)

[12.2.1 IAM(Identity and Access Management)](#12.2.1 IAM(Identity and Access Management))

[12.2.2 STS(Security Token Service)](#12.2.2 STS(Security Token Service))

[12.3 Keycloak配置](#12.3 Keycloak配置)

[12.3.1 创建SAML Client](#12.3.1 创建SAML Client)

[12.3.2 配置Role映射](#12.3.2 配置Role映射)

[12.4 AWS配置Identity Provider](#12.4 AWS配置Identity Provider)

[12.4.1 创建Identity Provider](#12.4.1 创建Identity Provider)

[12.4.2 创建IAM Role](#12.4.2 创建IAM Role)

[12.5 登录验证](#12.5 登录验证)

[12.6 AWS多账号架构](#12.6 AWS多账号架构)

十三、阿里云集成

[13.1 阿里云身份认证架构](#13.1 阿里云身份认证架构)

[13.2 阿里云配置Identity Provider](#13.2 阿里云配置Identity Provider)

[13.3 创建RAM角色](#13.3 创建RAM角色)

[13.4 Keycloak配置](#13.4 Keycloak配置)

[13.4.1 创建SAML Client](#13.4.1 创建SAML Client)

[13.4.2 配置Role映射](#13.4.2 配置Role映射)

[13.5 集成第二个阿里云账号](#13.5 集成第二个阿里云账号)

[13.6 登录验证](#13.6 登录验证)

十四、OCI集成

[14.1 OCI IAM架构简介](#14.1 OCI IAM架构简介)

[14.2 OCI联邦认证流程](#14.2 OCI联邦认证流程)

[14.3 创建OCI Identity Provider](#14.3 创建OCI Identity Provider)

[14.4 配置Default Identity Provider Policy](#14.4 配置Default Identity Provider Policy)

[14.5 配置OCI JIT(Just-In-Time)](#14.5 配置OCI JIT(Just-In-Time))

[14.6 配置OCI Group Mapping](#14.6 配置OCI Group Mapping)

[14.7 Keycloak配置](#14.7 Keycloak配置)

[14.8 OCI权限模型](#14.8 OCI权限模型)

[14.9 OCI多环境治理](#14.9 OCI多环境治理)

[14.10 登录验证](#14.10 登录验证)


简介

开源身份认证与访问管理平台 - Keycloak(二)中,我们演示了Jenkins、GitLab、Kibana、Grafana等DevOps平台与Keycloak的集成,实现了统一身份认证与单点登录(SSO)。

但在企业实际场景中,除了内部平台之外,还存在大量公有云控制台需要统一接入,例如:

  • AWS Console
  • 阿里云控制台
  • Oracle Cloud Infrastructure(OCI)

因此,本篇继续介绍Keycloak与公有云平台的集成方案,重点演示:

  • SAML联邦认证
  • AWS IAM Identity Federation
  • 阿里云RAM SSO
  • OCI IAM Identity Provider
  • 多账号角色映射
  • JIT(Just-In-Time)用户创建

同时也会对比AWS、阿里云、OCI在身份架构上的差异。

十一、SAML集成原理

11.1 为什么公有云使用SAML

虽然现代应用越来越多使用OIDC/OAuth2,但很多公有云控制台仍然以SAML作为企业联邦认证协议。主要原因:

  • SAML更早进入企业市场
  • 与 AD/ADFS深度兼容
  • 浏览器跳转式认证更适合控制台场景
  • 公有云控制台本身并不是"现代 Web 应用"

11.2 SAML认证流程

与OIDC返回Access Token不同,SAML更核心的是Assertion(断言)机制。

十二、AWS集成

AWS是目前企业中最典型、也是最成熟的SAML联邦认证场景之一。AWS本身并不建议企业大规模直接创建IAM User,而是更推荐:

  • 企业AD/LDAP
  • 第三方身份源
  • SAML Federation
  • 临时凭证(Temporary Credentials)

这也是现代云平台"身份与权限分离"的典型实现。本章节将演示:

  • Keycloak 与 AWS SAML 集成
  • AWS IAM Identity Provider 配置
  • AWS STS 临时凭证机制
  • IAM Role 映射
  • 多账号角色切换

12.1 AWS身份认证架构

AWS控制台联邦登录,本质上依赖以下几个核心组件:

组件 作用
IAM 权限管理
STS 临时凭证服务
SAML 联邦认证协议
IAM Role 权限载体
Identity Provider 外部身份源

AWS并不会创建IAM User,也不会签发长期密码,而是:

  • Keycloak负责认证
  • AWS STS负责签发临时Token
  • IAM Role负责权限控制

因此:AWS联邦认证本质上是"临时授权模型"。这与传统"用户名密码登录"存在很大区别。

12.2 IAM与STS简介

在开始配置之前,需要先理解 AWS 的身份体系。

12.2.1 IAM(Identity and Access Management)

IAM是AWS的权限管理系统,主要用于管理:User、Group、Role、Policy等。

在企业场景中,AWS 更推荐使用:IAM Role+Federation ,而不是:IAM User+Password,原因包括:

  • 降低长期凭证泄漏风险
  • 集中身份管理
  • 更容易审计
  • 更适合多账号体系

12.2.2 STS(Security Token Service)

STS是AWS的临时凭证服务,也是AWS的底层核心服务。本示例中,SAML登录后AWS会调用:AssumeRoleWithSAML,为用户生成:

  • AccessKey
  • SecretKey
  • SessionToken

这些凭证通常只有几小时的有效期。因此,即使凭证泄漏,风险也远低于长期IAM User。

12.3 Keycloak配置

12.3.1 创建SAML Client

关键配置如下,其中AWS相关的参数都是固定格式:


12.3.2 配置Role映射

AWS要求返回:IAM Role Arn,SAML Provider Arn,AWS根据这个字段决定:用户能切换哪些角色。我们直接在Keycloak的Groups中创建映射关系:

上面模拟的是:dev组的成员可以切换118585065000这个AWS账号的ReadOnly和AIOps两个Role,infra组的直接切换Admin这个Role。

12.4 AWS配置Identity Provider

12.4.1 创建Identity Provider

访问https://keycloak.tools.devops.com/realms/tools-devops/protocol/saml/descriptor ,把元数据保存:keycloak-saml-metadata.xml。

登录AWS的root账号,创建资源:

创建完成后,AWS会生成SAML Provider Arn:arn:aws:iam::118585065000:saml-provider/keycloak,是AWS的标准格式,所以在Keycloak的Role映射中我们已经提前填好了。

12.4.2 创建IAM Role

添加提前规划的权限(例如Admin Role挂载AdministratorAccess,ReadOnly挂载一些只读权限;也可以提前创建自定义的策略,在这里选择挂载)

信任策略需要配置正确:

12.5 登录验证

通过Keycloak Account Console点击跳转,或者直接访问:https://keycloak.tools.devops.com/realms/tools-devops/protocol/saml/clients/aws

经过Keycloak登录验证后,AWS会读取Assertion中的Role Attribute并登录AWS Console或者展示角色选择页面。

我们以lisi为例:

点击登录,以所选择的Role的身份进入AWS控制台:

12.6 AWS多账号架构

企业中通常不会只使用一个AWS Account。而是通过AWS Organizations管理多个Account,例如下面展示,不同的Account管理不同的环境:

复制代码
Root
 ├── Security
 ├── SharedServices
 ├── Dev
 ├── Test
 └── Production

这样做的原因包括:

  • 权限隔离
  • 财务隔离
  • 审计隔离
  • 安全边界
  • 配额独立

因此:用户真正登录时,实际上会选择:不同Account的Role。在阿里云集成章节中我们会看到企业常用的做法。

十三、阿里云集成

相比AWS而言,阿里云的身份体系整体思路非常接近。如果已经理解了AWS联邦认证,那么阿里云的SAML集成会非常容易。

13.1 阿里云身份认证架构

阿里云权限系统叫做:RAM,其功能与 AWS IAM 基本一致。阿里云同样不建议企业大规模创建RAM User,而更推荐Federation + RAM Role

13.2 阿里云配置Identity Provider

进入阿里云控制台,创建身份提供商:

复制代码

上传元数据同样使用Keycloak之前保存的keycloak-saml-metadata.xml文件。阿里云会生成对应的IdP ARN,例如:acs:ram::1055646107708198:saml-provider/keycloak

13.3 创建RAM角色

类似AWS,我们创建两个Role:Admin和ReadOnly,并设置信任策略如本示例:

两个Role分别添加提前规划的授权,如示例中:

13.4 Keycloak配置

13.4.1 创建SAML Client

配置方式与AWS类似,主要参数如下:

13.4.2 配置Role映射

阿里云同样要求Role Attribute,例如:

复制代码
acs:ram::1055646107708198:role/Admin,acs:ram::1055646107708198:saml-provider/keycloak

13.5 集成第二个阿里云账号

我们再找一个测试的阿里云账号重复上面的步骤。

13.6 登录验证

通过Keycloak Account Console点击跳转,或者直接访问:

https://keycloak.tools.devops.com/realms/tools-devops/protocol/saml/clients/aliyun

zhangsan登陆后,可选择不同环境账号的Admin角色:

lisi登录后,可选择不同环境账号的ReadOnly角色:

点击登录,以所选择的Role的身份进入阿里云控制台:

复制代码

十四、OCI集成

相比AWS与阿里云而言,OCI(Oracle Cloud Infrastructure)的身份体系存在明显不同。AWS/阿里云更偏向:临时凭证 + Role Assume,而OCI更偏向:Federated User + Policy模式。虽然OCI同样支持:SAML、Federation、Identity Provider等,但其底层权限逻辑与AWS并不完全一致。

本章节主要演示:

  • Keycloak与OCI SAML集成
  • OCI Federation配置
  • OCI JIT(Just-In-Time)
  • OCI Policy权限模型
  • OCI与AWS身份体系差异

14.1 OCI IAM架构简介

OCI的权限体系主要包含:

组件 说明
Tenancy OCI租户
Compartment 区间/资源隔离
Group 用户组
Policy 权限策略
Federation 联邦认证
Identity Provider 外部身份源

OCI与AWS最大的区别之一是:OCI通常使用一个Tenancy管理多个环境,而不是:多个Account管理多个环境,OCI 企业治理通常围绕Compartment展开。

14.2 OCI联邦认证流程

OCI认证流程如下:

复制代码
User
  │
  ▼
OCI Console
  │
  │ Redirect
  ▼
Keycloak
  │
  │ LDAP/AD认证
  ▼
AD/LDAP
  │
  │ 返回SAML Assertion
  ▼
OCI IAM
  │
  │ JIT创建Federated User
  ▼
OCI Console

这里与AWS最大不同在于:OCI 通常会创建Federated User,而AWS通常不会真正创建用户实体。因此OCI 更接近:企业用户映射模型。

14.3 创建OCI Identity Provider

进入OCI控制台,创建资源:

复制代码

这里同样上传Keycloak的keycloak-saml-metadata.xml文件。并导出OCI一侧的SAML元数据(OCI这里的Provider ID不是统一固定值,参数较多,稍后直接在Keycloak导入即可)

14.4 配置Default Identity Provider Policy

增加Console支持的登录方式:

14.5 配置OCI JIT(Just-In-Time)

OCI支持Just-In-Time Provisioning,即用户首次登录时:OCI自动创建对应用户。这样企业无需提前批量创建OCI用户,最大程度的降低维护成本,弥补架构差异带来的不足。

14.6 配置OCI Group Mapping

OCI支持Group Mapping,即Keycloak中的Group可映射至OCI IAM Group,首先在JIT中启用映射功能:

复制代码

我们采用如上的选项,所以根据规划预设Groups:

然后对两个OCI组进行授权:

这样OCI Policy即可直接基于Group生效。

14.7 Keycloak配置

导入OCI侧导出的元数据XML文件:

确认并配置相关参数:

14.8 OCI权限模型

由上面的配置步骤可以发现,OCI权限核心并不是Role Assume,而是重度依赖Policy。OCI Policy具有如下特点:

  • 可读性高
  • 语义化强
  • 权限边界清晰

但相比AWS IAM,灵活度会略低一些。

14.9 OCI多环境治理

OCI通常不会像AWS一样大量创建Account,而是:一个Tenancy + 多Compartment。不同区间之间:

  • 资源隔离
  • 权限隔离
  • 配额隔离

因此OCI企业治理重点更多在Compartment设计。

14.10 登录验证

首次登录,已经自动在OCI中创建了用户,并要求绑定2FA:

我们以Root身份查看OCI中用户信息,发现已经创建了实体用户:

相关推荐
晓翔仔1 小时前
从零搭建自己的网站 AI 助手:阿里云百炼 + 云服务器部署全教程
服务器·人工智能·阿里云·token·ai助手
星河耀银海2 小时前
AI基础设施革命:云原生+云边端+算力的协同价值
人工智能·云原生
小碗羊肉13 小时前
【JavaWeb | 第十一篇】文件上传(本地&阿里云OSS)
java·阿里云·servlet
9命怪猫15 小时前
[K8S小白问题集] - Calico好在哪里?
网络·云原生·容器·kubernetes
齐潇宇15 小时前
k8s-Helm管理器
linux·运维·云原生·容器·kubernetes
容器魔方15 小时前
让Skill从执行中生长:Cloud Agent Harness的三段式Skill自进化机制
云原生·开源·资讯
xixixi7777715 小时前
AI的“账号”与“钱包”:AWS与Circle同日出手,AI正从工具进化
人工智能·安全·ai·大模型·云计算·aws
Zhu75816 小时前
[软件部署]在k8s环境部署alist
云原生·容器·kubernetes
西洼工作室16 小时前
个人开发者接入阿里云号码认证服务AliCloud-NirvanaPns实现一键登录
python·阿里云·uni-app·全栈·认证授权