在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工作负载只能访问特定的秘密。

设置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秘密,同时实现细粒度的权限控制。这种方法将减少您团队的开销,并降低配置错误的风险。如对本文有反馈,欢迎在下面的评论部分留言。