DataDog/managed-kubernetes-auditing-toolkit

GitHub: DataDog/managed-kubernetes-auditing-toolkit

MKAT 是一款针对 Amazon EKS 的安全审计工具,用于发现 Kubernetes 与 AWS 云端权限之间的安全风险,包括 IAM 信任关系、硬编码凭证和 IMDS 访问漏洞。

Stars: 370 | Forks: 26

# Managed Kubernetes Auditing Toolkit (MKAT) [![Tests](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/56acf1d59f134725.svg)](https://github.com/DataDog/managed-kubernetes-auditing-toolkit/actions/workflows/test.yml) [![go static analysis](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/5227fb2005134730.svg)](https://github.com/DataDog/managed-kubernetes-auditing-toolkit/actions/workflows/static-analysis.yml) MKAT 是一个用于识别托管 Kubernetes 环境中常见安全问题的多合一审计工具包。目前主要关注 Amazon EKS,未来将扩展到其他托管 Kubernetes 环境。 功能特性: - 🔎 [识别 K8s service accounts 与 AWS IAM roles 之间的信任关系](#identify-trust-relationships-between-k8s-service-accounts-and-aws-iam-roles) - 同时支持 IAM Roles for Service Accounts (IRSA) 和 2023 年 11 月 26 日发布的 [Pod Identity](https://aws.amazon.com/blogs/aws/amazon-eks-pod-identity-simplifies-iam-permissions-for-applications-on-amazon-eks-clusters/)。 - 🔑 [在 K8s 资源中查找硬编码的 AWS 凭证](#find-hardcoded-aws-credentials-in-k8s-resources)。 - 💀 [测试 Pod 是否能访问 AWS Instance Metadata Service (IMDS)](#test-if-pods-can-access-the-aws-instance-metadata-service-imds)。 ## 安装 ``` brew tap datadog/mkat https://github.com/datadog/managed-kubernetes-auditing-toolkit brew install datadog/mkat/managed-kubernetes-auditing-toolkit mkat version ``` ... 或使用 [预编译二进制文件](https://github.com/DataDog/managed-kubernetes-auditing-toolkit/releases)。 然后,确保你已经通过集群和 AWS 的认证。MKAT 使用你当前的 AWS 和 kubectl 认证上下文。 ``` aws eks update-kubeconfig --name ``` 特别是在使用 profiles 时,你可能需要设置 `AWS_REGION` 和 `AWS_PROFILE` 环境变量。 ## 功能特性 ### 识别 K8s service accounts 与 AWS IAM roles 之间的信任关系 MKAT 可以识别 K8s service accounts 与 AWS IAM roles 之间的信任关系,并以表格或图形的形式显示。目前支持: - **[IAM Roles for Service Accounts](https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html)**,一种流行的机制,允许 Pod 通过 AWS STS API (`AssumeRoleWithWebIdentity`) 将 Kubernetes service account token 交换为 AWS 凭证,从而假定 AWS IAM roles。 - **[EKS Pod Identity](https://docs.aws.amazon.com/eks/latest/userguide/pod-identities.html)**,另一种较新的机制,工作方式类似,但设置更简单。 MKAT 通过分析 AWS 账户中的 IAM roles 和集群中的 K8s service accounts,然后根据这两种机制将它们匹配在一起来工作。 ``` $ mkat eks find-role-relationships _ __ ___ | | __ __ _ | |_ | '_ ` _ \ | |/ / / _` | | __| | | | | | | | < | (_| | | |_ |_| |_| |_| |_|\_\ \__,_| \__| 2023/11/28 21:05:59 Connected to EKS cluster mkat-cluster 2023/11/28 21:05:59 Retrieving cluster information 2023/11/28 21:06:00 Listing K8s service accounts in all namespaces 2023/11/28 21:06:02 Listing roles in the AWS account 2023/11/28 21:06:03 Found 286 IAM roles in the AWS account 2023/11/28 21:06:03 Analyzing IAM Roles For Service Accounts (IRSA) configuration 2023/11/28 21:06:03 Analyzing Pod Identity configuration of your cluster 2023/11/28 21:06:04 Analyzing namespace microservices which has 1 Pod Identity associations +------------------+---------------------------+-----------------------------------+-----------------------------+--------------------------------+ | NAMESPACE | SERVICE ACCOUNT | POD | ASSUMABLE ROLE | MECHANISM | +------------------+---------------------------+-----------------------------------+-----------------------------+--------------------------------+ | microservices | inventory-service-sa | inventory-service | inventory-service-role | IAM Roles for Service Accounts | | | | | s3-backup-role | IAM Roles for Service Accounts | | | rate-limiter-sa | rate-limiter-1 | rate-limiter-role | IAM Roles for Service Accounts | | | | | webserver-role | Pod Identity | | | | rate-limiter-2 | rate-limiter-role | IAM Roles for Service Accounts | | | | | webserver-role | Pod Identity | +------------------+---------------------------+-----------------------------------+-----------------------------+--------------------------------+ | default | vulnerable-application-sa | vulnerable-application | vulnerable-application-role | IAM Roles for Service Accounts | | | webserver-sa | webserver | webserver-role | IAM Roles for Service Accounts | +------------------+---------------------------+-----------------------------------+-----------------------------+--------------------------------+ | external-secrets | external-secrets-sa | external-secrets-66cfb84c9b-kldt9 | ExternalSecretsRole | IAM Roles for Service Accounts | +------------------+---------------------------+-----------------------------------+-----------------------------+--------------------------------+ ``` 它还可以生成用于图形可视化的 `dot` 输出: ``` $ mkat eks find-role-relationships --output-format dot --output-file roles.dot $ dot -Tpng -O roles.dot $ open roles.dot.png ``` ![映射信任关系](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/7aabc2eefb134739.png) ### 在 K8s 资源中查找硬编码的 AWS 凭证 MKAT 可以识别 K8s 资源(例如 Pods、ConfigMaps 和 Secrets)中硬编码的 AWS 凭证。 它的误报率很低,只有在同一个 Kubernetes 资源中同时发现 AWS access key ID 和 secret access key 时才会报警。 它还能够处理非结构化数据,即如果你的 ConfigMap 中包含嵌入了 AWS 凭证的 JSON 或 YAML 文档。 ``` $ mkat eks find-secrets _ _ _ __ ___ | | __ __ _ | |_ | '_ ` _ \ | |/ / / _` | | __| | | | | | | | < | (_| | | |_ |_| |_| |_| |_|\_\ \__,_| \__| 2023/04/12 00:33:24 Connected to EKS cluster mkat-cluster 2023/04/12 00:33:24 Searching for AWS secrets in ConfigMaps... 2023/04/12 00:33:25 Analyzing 10 ConfigMaps... 2023/04/12 00:33:25 Searching for AWS secrets in Secrets... 2023/04/12 00:33:25 Analyzing 45 Secrets... 2023/04/12 00:33:25 Searching for AWS secrets in Pod definitions... 2023/04/12 00:33:25 Analyzing 8 Pod definitions... +-----------+--------+-----------------------------------------+------------------------------------------+ | NAMESPACE | TYPE | NAME | VALUE | +-----------+--------+-----------------------------------------+------------------------------------------+ | default | Secret | kafka-proxy-aws (key aws_access_key_id) | AKIAZ3MSJV4WWNKWW5FG | | default | Secret | kafka-proxy-aws (key aws_secret_key) | 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 | +-----------+--------+-----------------------------------------+------------------------------------------+ ``` ### 测试 Pod 是否能访问 AWS Instance Metadata Service (IMDS) Pod 访问 EKS 节点的 Instance Metadata Service 是一个 [常见且危险的攻击向量](https://blog.christophetd.fr/privilege-escalation-in-aws-elastic-kubernetes-service-eks-by-compromising-the-instance-role-of-worker-nodes/), 可用于权限提升。MKAT 可以测试 Pod 是否能通过 IMDSv1 和 IMDSv2 访问 IMDS。 它通过创建两个尝试访问 IMDS 的临时 Pod(一个用于 IMDSv1,一个用于 IMDSv2)来进行测试,随后这些 Pod 会被删除。 ``` $ mkat eks test-imds-access _ _ _ __ ___ | | __ __ _ | |_ | '_ ` _ \ | |/ / / _` | | __| | | | | | | | < | (_| | | |_ |_| |_| |_| |_|\_\ \__,_| \__| 2023/07/11 21:56:19 Connected to EKS cluster mkat-cluster 2023/07/11 21:56:19 Testing if IMDSv1 and IMDSv2 are accessible from pods by creating a pod that attempts to access it 2023/07/11 21:56:23 IMDSv2 is accessible: any pod can retrieve credentials for the AWS role eksctl-mkat-cluster-nodegroup-ng-NodeInstanceRole-AXWUFF35602Z 2023/07/11 21:56:23 IMDSv1 is not accessible to pods in your cluster: able to establish a network connection to the IMDS, but no credentials were returned ``` ## 常见问题 ### MKAT 与其他工具相比如何? | **Tool** | **Description** | |:---:|:---:| | [kube-bench](https://github.com/aquasecurity/kube-bench) | kube-bench 是一个通用的 Kubernetes 集群审计工具,用于检查是否符合 CIS benchmarks | | [kubiscan](https://github.com/cyberark/KubiScan) | kubiscan 专注于识别集群内危险的 RBAC 权限 | | [peirates](https://github.com/inguardians/peirates) | peirates 是一个通用的 Kubernetes 渗透测试工具。虽然它有一个 `get-aws-token` 命令可以从 IMDS 获取节点凭证,但它并不专门针对托管 K8s 环境。 | | [botb](https://github.com/brompwnie/botb) | botb 是一个通用的 Kubernetes 渗透测试工具。它也有一个从 IMDS 获取节点凭证的命令,但它并不专门针对托管 K8s 环境。 | | [rbac-police](https://github.com/PaloAltoNetworks/rbac-police) | rbac-police 专注于识别集群内的 RBAC 关系。 | | [kdigger](https://github.com/quarkslab/kdigger) | kdigger 是一个用于 Kubernetes 渗透测试的通用上下文发现工具。它并不试图专门针对托管 K8s 环境。 | | [kubeletmein](https://github.com/4ARMED/kubeletmein) | kubeletmein _确实_ 专门针对托管 K8s 环境。它是一个使用节点的 IAM 凭证生成 kubeconfig 文件的实用程序,以便在受损的 Pod 中使用它。 | | [hardeneks](https://github.com/aws-samples/hardeneks) | hardeneks _确实_ 专门针对托管 K8s 环境,但仅适用于 EKS。它识别集群内的问题和最佳实践的缺失,并不专注于集群到云的 pivoting。 | ### MKAT 运行需要什么权限? 有关 MKAT 运行所需权限的详细列表,请参阅 [此页面](./permissions.md)。 ## 路线图 我们目前计划: * 增加一项功能,通过 [aws-load-balancer-controller](https://github.com/kubernetes-sigs/aws-load-balancer-controller) 识别通过 AWS load balancer 暴露的 EKS pods * 增加对 GCP GKE 的支持 * 允许扫描其他类型的云凭证 ## 致谢 感谢 Rami McCarthi 和 Mikail Tunç 对 MKAT 的早期测试和切实可行的反馈!
标签:DevSecOps, EKS 审计, EVTX分析, Golang, IAM 角色, IMDS, IRSA, Kubernetes 安全, Web截图, Web报告查看器, 上游代理, 二进制发布, 协议分析, 子域名突变, 安全助手, 安全测试, 安全编程, 容器安全, 开源工具, 攻击性安全, 日志审计, 权限提升, 模型鲁棒性, 硬编码凭据, 配置检查