vilex1337/NT524_SSO_Federation
GitHub: vilex1337/NT524_SSO_Federation
基于 Keycloak 的多云安全联邦与 SSO 方案,统一管理 OpenStack、AWS、Rocket.Chat 的身份认证与授权,并集成 ELK 日志和自动化事件响应。
Stars: 0 | Forks: 0
# 混合云环境下的安全联邦与 SSO(SAML / OAuth2 / OpenID Connect)
一个单一的 **Keycloak** 身份提供者在多云环境中统一管理身份认证与授权——包括
**OpenStack**(OpenID Connect)、**AWS**(SAML 2.0)以及
云端应用 **Rocket.Chat**(OAuth2 / OIDC)——并提供集中式的细粒度访问控制、基于 TLS 的前端 endpoint、集中式安全日志记录以及自动化的事件响应。
## 架构
请参阅 [`Architecture/architecture.drawio.pdf`](Architecture/architecture.drawio.pdf)。该设计包含一个
**AAA 模块**(身份提供者 + 密钥/签名密钥存储),为一个被两类主体使用的
**多云环境**提供服务:
```
┌──────────────────── AAA Module ────────────────────┐
│ Keycloak (Identity Provider) ◄──► Vault │
│ realm: multicloud (secrets/keys) │
└───────▲───────────────▲───────────────▲────────────┘
Login/token │ SAML │ OIDC │ OIDC
│ │ │
┌────────────────┴───┐ ┌───────┴────────┐ ┌───┴───────────────┐
│ Cloud Operator │ │ Cloud Provider│ │ Application user │
│ (manages infra) │ │ 1: AWS (SAML)│ │ (uses the app) │
└────────────────────┘ │ 2: OpenStack │ └───────────────────┘
│ (OIDC) │
│ Rocket.Chat │
│ (OIDC) │
└─────────────────┘
```
**两个联邦使用场景(如图所示):**
1. **云操作员 → 基础设施。** 操作员在 Keycloak 上进行一次身份验证,然后
联邦进入每个云的控制平面:向 AWS(云提供商 1)发送 **SAML assertion**,
向 OpenStack(云提供商 2)发送 **OIDC code**。云控制主机颁发一个 session token,
随后操作员即可管理云资源。
2. **应用用户 → 应用程序。** 终端用户在 Keycloak 上进行身份验证,并通过
**OIDC** 联邦进入运行在云上的应用程序(Rocket.Chat)。应用程序颁发一个 session,用户随后在其中进行操作。
**各平台使用的协议:**
| 平台 | 协议 | 联邦机制 |
|---|---|---|
| OpenStack (Keystone) | OpenID Connect | `mod_auth_openidc` + Keystone 联邦映射 |
| AWS (IAM) | SAML 2.0 | IAM SAML 身份提供者 + 角色 assertions |
| Rocket.Chat | OAuth2 / OIDC | 自定义 OAuth 提供者 + `roles` claim |
所有 endpoint 均通过 **经由 Cloudflare tunnel 的 TLS**(两个 tunnel,每个服务节点一个)对外暴露——主机上无需开放任何入站端口:
`keycloak.`(Keycloak)、`siem.`(Kibana)、`logstash.`(Logstash TCP)、
`openstack.`(Horizon/Keystone)、`chat-os.`(Rocket.Chat)。请参阅
`Setup/0_Cloudflared_Tunnel_TLS.md`。
## 部署拓扑 — 4 个节点
| 节点 | 运行内容 | Tunnel 主机名 |
|---|---|---|
| Keycloak + 数据库 | Keycloak (IdP) + PostgreSQL | `keycloak.` |
| SIEM / ELK | Elasticsearch + Logstash + Kibana | `siem.`, `logstash.` |
| OpenStack | Keystone + Horizon + 服务 + Rocket.Chat 虚拟机 | `openstack.`, `chat-os.` |
| AWS | IAM / EC2(云账户;CloudTrail → S3) | — |
**日志流:** Keycloak 和 OpenStack 节点运行 Filebeat agent,将主机日志
发送到 SIEM 节点的 Logstash **beats input (:5044)**;**Logstash 通过其 `s3` input 直接从 S3 存储桶拉取 AWS CloudTrail**。请参阅 `Setup/ELK/`。
## 仓库结构
```
.
├── Architecture/ Solution architecture diagram
├── Setup/ All deployment guides + the code/configs they deploy
│ ├── 0_Cloudflared_Tunnel_TLS.md TLS for every endpoint (cloudflared)
│ ├── 1_Setup_Keycloak_IdP.md Keycloak + PostgreSQL (the AAA IdP)
│ ├── 2_Setup_Keycloak_with_Keystone.md OpenStack ⇄ Keycloak (OIDC federation)
│ ├── 3_Setup_SSO_with_AWS_IAM_and_Keycloak.md AWS ⇄ Keycloak (SAML federation)
│ ├── 4_Setup_RocketChat_SSO.md Rocket.Chat ⇄ Keycloak (OAuth/OIDC + role sync)
│ ├── 5_Setup_OpenStack_FineGrained_Policy.md Custom authorization (oslo.policy)
│ ├── scripts/ Federation setup scripts + OpenStack policies
│ ├── keycloak/ Keycloak compose
│ ├── rocketchat/ Rocket.Chat SSO config scripts
│ └── ELK/
│ ├── Setup_Secure_ELK.md Elasticsearch + Logstash + Kibana
│ ├── Setup_Filebeat.md Filebeat agent on each monitored host
│ ├── docker-compose.yaml ELK stack
│ ├── Logstash_conf/ Logstash pipeline + ES/Kibana configs
│ └── Filebeat/ Filebeat config templates per source
└── Incident_Response/ Detection → automated containment
├── Setup_Auto_Response.md Responder (systemd) + wiring
├── responder.py Flask webhook server (:9000)
├── Playbooks/ Ansible playbooks (disable user, revoke, AWS deny)
└── Rules/ Kibana detection rules + attack simulator
```
## 推荐的部署顺序
1. **`Setup/0_Cloudflared_Tunnel_TLS.md`** — 为所有 endpoint 配置 TLS。
2. **`Setup/1_Setup_Keycloak_IdP.md`** — 配置身份提供者。
3. **`Setup/2_…Keystone.md`** — OpenStack OIDC 联邦。
4. **`Setup/3_…AWS_IAM…md`** — AWS SAML 联邦。
5. **`Setup/4_…RocketChat…md`** — 应用程序 SSO + 角色同步。
6. **`Setup/5_…FineGrained_Policy.md`** — OpenStack 上的细粒度授权。
7. **`Setup/ELK/…`** — 日志技术栈 + Filebeat agent。
8. **`Incident_Response/…`** — 自动化响应。
## ⚠️ 密钥
本仓库中的每个凭据都是占位符(`__KEYCLOAK_ADMIN_PASSWORD__`、
`__DEMO_USER_PASSWORD__`、…)。请通过环境变量 / 本地
`.env` 文件提供真实值(参见 `Incident_Response/.env.example`)。`.gitignore` 屏蔽了 `.env`、密钥和
`passwd` 文件。切勿提交真实的密钥。
标签:Keycloak, OAuth2, SAML, 内容过滤, 单点登录, 多云架构, 测试用例, 系统提示词, 自动化响应, 请求拦截