Lia-Bing0/aks-secure-oidc-lab
GitHub: Lia-Bing0/aks-secure-oidc-lab
一个演示如何在 AKS 中使用 Workload Identity 和 Key Vault 实现无静态凭证安全架构的 DevSecOps 实验室。
Stars: 0 | Forks: 0
# AKS 安全 OIDC Workload Identity 实验室
[](https://github.com/Lia-Bing0/aks-secure-oidc-lab/actions/workflows/security-scan.yml)
本项目演示了在 Azure 上针对 Kubernetes 工作负载的安全 DevSecOps 工作流,使用 Azure Workload Identity 和 Azure Key Vault 来消除静态凭证。
## 为什么构建这个项目
现代 Kubernetes 安全模式正逐渐从静态服务主体凭证转向联合 Workload Identity。
构建此实验室旨在演示 Azure Workload Identity 和 OIDC 联合如何允许 Kubernetes 工作负载安全地访问 Azure Key Vault,而无需在集群内存储凭证。
该项目还演示了如何使用 Trivy 将安全扫描集成到 CI 中,以实施 Shift-Left DevSecOps 实践。
实现包括:
- Terraform 基础设施配置
- Azure Workload Identity (OIDC 联合)
- Azure Managed Identity
- Azure Key Vault 集成
- Secrets Store CSI Driver
- 运行时 Secret 轮换
- Trivy 安全扫描
- GitHub Actions CI 安全流水线
## 项目概述
本项目通过结合 Azure Workload Identity (OIDC 联合)、Azure Managed Identity 和 Azure Key Vault,演示了针对 Azure 上 Kubernetes 工作负载的安全 Secret 管理。该实验室旨在展示一种现代云原生安全模式,即应用程序在运行时检索 Secret,而无需在 Kubernetes 中存储静态凭证。
实现包括使用 Terraform 进行基础设施配置、Workload Identity 联合、使用 Secrets Store CSI Driver 进行安全 Secret 注入、运行时 Secret 轮换验证,以及在 GitHub Actions 中使用 Trivy 进行自动化安全扫描。
## 架构
安全架构遵循联合身份模型,消除了嵌入凭证或存储云凭证到 Kubernetes 原生 Secret 的需求。
**流程:**
AKS Pod
↓
Workload Identity (OIDC)
↓
Azure Managed Identity
↓
Azure Key Vault
↓
Secrets Store CSI Driver
↓
Secret 挂载到容器中
在此模型中,Pod 使用通过 OIDC 联合链接到 Managed Identity 的 Kubernetes Service Account。工作负载被授权从 Key Vault 请求 Secret,CSI Driver 将这些 Secret 直接挂载到容器文件系统中。
## 基础设施配置
Terraform 配置了安全 Workload Identity 模式所需的核心 Azure 资源,包括:
- AKS 集群
- 虚拟网络
- 子网
- Log Analytics 工作区
- Identity 配置
基础设施代码组织在 `terraform/` 目录下,支持可重复的环境创建。

## Terraform 输出
部署后,Terraform 会公开几个有用的输出,包括:
- AKS 集群名称
- AKS API Server 端点
- Azure Key Vault URI
这些输出有助于验证部署以及使用 kubectl 连接到集群。
## AKS 集群配置
本实验室使用 Terraform 配置 Azure Kubernetes Service (AKS) 集群。该集群作为 Workload Identity 和安全 Secret 检索工作流的运行时环境。
关键集群配置包括:
- 为 Workload Identity 联合启用的 OIDC Issuer
- Azure Managed Identity 集成
- Kubernetes Service Account 联合
- 针对外部 Secret Provider 的 CSI Driver 支持
- 通过 Service Account 注解进行的 Pod Identity 映射
该集群充当 Kubernetes 工作负载与 Azure 服务之间的信任边界。
此配置演示了安全工作负载如何在不将凭证存储在集群中的情况下向 Azure 资源进行身份验证。
## Workload Identity 联合
Workload Identity 联合使 Kubernetes Service Account 能够使用 AKS 集群颁发的 OIDC Token 向 Azure AD 进行身份验证。这取代了旧的基于 Secret 的身份模式,并最大限度地降低了凭证管理风险。
Service Account 与 Azure Managed Identity 联合,允许 Pod 工作负载在没有 Client Secret 的情况下安全地进行身份验证。

## 通过 Key Vault 注入 Secret
Secret 集中存储在 Azure Key Vault 中,并使用 Secrets Store CSI Driver 按需检索。Kubernetes `SecretProviderClass` 定义了哪些 Key Vault Secret 会被投射到 Pod 中。
这确保了 Secret 不会硬编码到清单中,也不会作为静态凭证持久化在容器镜像中。


## 应用程序消费 Secret
示例 Kubernetes 部署在运行时将 Key Vault Secret 挂载到容器中。应用程序读取挂载的文件,并演示执行期间成功的 Secret 检索。


## Secret 轮换演示
实验室通过更新 Azure Key Vault 中的值并确认更新后的 Secret 通过 CSI 集成传播到运行中的工作负载,来验证运行时 Secret 轮换。
与手动轮换的静态 Secret 相比,这演示了操作弹性和减小了爆炸半径。
Secret 值使用轮换脚本在 Azure Key Vault 中更新,该脚本会创建一个新的 Secret 版本。

## 安全扫描
Trivy 用于对堆栈的多个层执行安全扫描:
- Terraform 基础设施
- Kubernetes 清单
- 容器镜像
这些扫描有助于在 CI 流水线早期识别配置错误和漏洞,在基础设施和工作负载部署之前进行。

### Kubernetes 清单扫描

### 容器镜像扫描

## CI 安全流水线
GitHub Actions 使用 `.github/workflows/security-scan.yml` 中定义的工作流,在 push 和 pull request 事件上运行自动化安全检查。
流水线针对 Terraform 基础设施、Kubernetes 清单和容器镜像执行 Trivy 扫描,以在 CI 阶段检测漏洞和配置错误。
这演示了 Shift-Left DevSecOps 方法,即在部署基础设施和工作负载之前强制执行安全检查。

## 仓库结构
```
.github/workflows/
security-scan.yml
terraform/
main.tf
aks.tf
network.tf
providers.tf
variables.tf
outputs.tf
terraform.tfvars.example
kubernetes/
deployment.yaml
serviceaccount.yaml
secretproviderclass.yaml
scripts/
connect-aks.ps1
create-kv-secret.ps1
create-workload-identity.ps1
enable-csi-token-requests.ps1
grant-kv-secrets-officer-to-me.ps1
grant-kv-secrets-user.ps1
install-csi-driver.ps1
install-kubectl.ps1
kv-can-access-secret.ps1
kv-check-secret-metadata.ps1
kv-list-role-assignments.ps1
kv-verify.ps1
rotate-secret.ps1
security/
trivy-scan.ps1
patches/
csidriver-tokenrequests.json
docs/images/
(screenshots demonstrating each step)
```
## 演示的关键 DevSecOps 概念
- 基础设施即代码 安全
- Kubernetes Workload Identity (OIDC 联合)
- 使用 Azure Key Vault 的云端 Secret 管理
- 运行时 Secret 轮换
- 使用 Trivy 进行 DevSecOps 安全扫描
- 使用 GitHub Actions 进行 CI 安全自动化
## 清理
完成实验后,移除所有已配置的基础设施以避免不必要的云成本:
```
terraform destroy
```
## 成本考量
本实验室部署了 AKS 集群、Key Vault、Log Analytics 工作区和支持性的网络基础设施。
在 Azure 中临时运行该实验室的典型成本约为 $5–$10,具体取决于区域和运行持续时间。
完成实验室后务必运行 `terraform destroy` 以避免不必要的费用。
## 故障排除
开发过程中遇到的实现故障排除记录在以下文档中:
[docs/troubleshooting.md](docs/troubleshooting.md)
标签:AI合规, AKS, Azure, Azure Key Vault, CSI Driver, DevSecOps, EC2, ECS, GitHub Actions, IaC, JSONLines, Libemu, OIDC, StruQ, Terraform, Web截图, Workload Identity, 上游代理, 大语言模型安全, 子域名突变, 安全扫描, 容器安全, 微软云, 无密码认证, 时序注入, 机密管理, 联邦身份, 自动化运维, 自动笔记, 身份与访问管理, 零信任