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, 内容过滤, 单点登录, 多云架构, 测试用例, 系统提示词, 自动化响应, 请求拦截