地址: 宣城市走劫村308号 邮箱: forested@126.com 工作时间:上午9点-下午8点

公司新闻

  • 首页
  • Our News
  • 如何在 Amazon EKS 中使用 AWS Secrets Manager 和 ABAC 来增强秘

如何在 Amazon EKS 中使用 AWS Secrets Manager 和 ABAC 来增强秘

2026-01-27 13:52:08

在Amazon EKS中使用AWS Secrets Manager和ABAC提升秘密管理

重点总结

在这篇文章中,我们展示了如何在AWS Secrets Manager中存储和管理Amazon Elastic Kubernetes ServicesEKS工作负载的秘密时应用基于属性的访问控制ABAC,并通过集成External Secrets Operator实现更细粒度和动态的AWS身份和访问管理IAM权限策略来检索秘密。

使用ABAC管理工作负载访问秘密可以降低所需的权限策略数量,达到更好的扩展性和减少管理开销。接下来,我们将探讨如何配置和实现这一解决方案。

什么是ABAC?

传统的授权方法是基于角色的访问控制RBAC,它根据用户的工作职能设置权限。RBAC的局限性在于缺乏灵活性,对于新资源的引入,需要手动修改现有策略。相比之下,基于属性的访问控制ABAC可以根据标签动态分配权限,减少了权限策略的数量,使权限管理更加灵活和高效。

External Secrets Operator的工作原理

External Secrets OperatorESO是一个Kubernetes操作员,它将外部秘密管理系统如Secrets Manager与Kubernetes整合。ESO利用自定义资源获取秘密,并将其转化为Kubernetes Secrets,从而为其他Kubernetes资源提供访问。

ES0的核心工作流程如下表所示:

步骤描述创建SecretStore配置如何访问Secrets Manager,包括ABAC相关属性的定义声明ExternalSecret指明需要获取的秘密及其转换方式生成Kubernetes Secrets将获取的秘密存为Kubernetes Secrets,以供服务使用

如何使用ESO实现ABAC

使用ESO之前,确保操作员有足够的权限访问Secrets Manager。配置ESO服务帐户以假设IAM角色IRSA,并实施ABAC权限策略,以确保每个Kubernetes工作负载只能访问特定的秘密。

如何在 Amazon EKS 中使用 AWS Secrets Manager 和 ABAC 来增强秘

设置IAM角色和策略

创建一个IAM角色以访问Secrets Manager秘密,并附加一个允许阅读Secrets Manager秘密的策略。

双击下方政策,并替换其中的lt KMS Key ARNgt:

json{ Version 20121017 Statement [ { Effect Allow Action [ kmsListKeys kmsListAliases secretsmanagerListSecrets ] Resource } { Effect Allow Action [ kmsDecrypt kmsDescribeKey ] Resource lt KMS Key ARNgt } { Effect Allow Action [ secretsmanagerGetSecretValue secretsmanagerDescribeSecret secretsmanagerListSecretVersionIds ] Resource Condition { StringEquals { secretsmanagerResourceTag/ekssecret {awsPrincipalTag/ekssecret} } } } ]}

部署解决方案

从终端安装ESO:

bashhelm repo add externalsecrets https//chartsexternalsecretsiohelm install externalsecrets externalsecrets/externalsecrets n externalsecrets createnamespace set installCRDs=true

确认安装成功:

bashkubectl get pods n externalsecrets

创建Secrets Manager中的秘密

创建两个Secrets Manager中的秘密并为其打标签:

加速器官方版下载创建名为service1secret和service2secret的秘密,分别加上标签 ekssecret。

json{ key ekssecret value service1}

在Kubernetes中创建ESO对象

创建服务命名空间并创建SecretStore和ExternalSecret对象:

yamlapiVersion externalsecretsio/v1beta1kind SecretStoremetadata name awssecretsmanager namespace service1nsspec provider aws service SecretsManager role lt Secrets Manager Access Role ARNgt region uswest2 sessionTags key ekssecret value service1

创建ExternalSecret对象并验证创建结果:

bashkubectl apply f secretstoreymlkubectl get externalsecretsexternalsecretsio A

结束语

通过以上步骤,我们成功实现了在EKS和AWS Secrets Manager中使用ABAC进行有效的秘密管理。通过ABAC,您可以创建单一IAM角色来访问Secrets Manager秘密,同时实现细粒度的权限控制。这种方法将减少您团队的开销,并降低配置错误的风险。如对本文有反馈,欢迎在下面的评论部分留言。

订阅我们的时事通讯并获取最新消息