回收IAM User的AKSK计划
背景
AK/SK(Access Key/Secret Key)泄漏的影响是深远和严重的。首先,这使外部攻击者可以获得对您云环境的未授权访问,可能导致敏感数据的泄露、篡改或删除。其次,攻击者可以利用这些凭证来发起更广泛的攻击,如身份盗用和权限提升,威胁到整个组织的安全。此外,AK/SK泄漏可能导致重大的财务损失,因为恶意行为者可能会利用这些凭证来启动大量的云资源,产生巨额的费用。因此,强化AK/SK的保护措施和监控是至关重要的,以减少安全风险和维护组织的信誉。
目标
回收IAM User的AK/SK。
如何实现
步骤 1: 确定访问类型
真人访问:这类访问通常需要通过控制台和命令行界面 (CLI) 进行。在此情形下,应通过IAM Identity Center分配权限,其中分配的是IAM Role,这类权限是短期的,以增强安全性。
程序访问:此类访问指的是代码或脚本通过API访问AWS资源,此时使用的是AK/SK。
步骤 2: 真人访问通过IAM Identity Center
要求所有的真人访问AWS都要通过IAM Identity Center。在IAM Identity Center中创建权限集,用户和组,为需要访问AWS控制台,CLI的人分配权限。
步骤3: 切换程序使用IAM Role,删除代码中的AKSK
3.1 扫描代码中存在明文AKSK的情况
安装Prowler在自己的机器上;此工具提供了当前环境的安全状态。此外, AWS Security Hub 提供了自动合规扫描并且可以 integrate with Prowler。
使用以下命令扫描AWS上使用明文口令的情况,然后排查泄漏的IAM AKSK是否在里面。建议所有的明文AKSK都应该删除,使用IAM role的方式进行授权。
命令执行成功后会自动生成一份AKSK在代码中是否存在的报告。根据报告就可以针对使用了AKSK的EC2,Lambda,EKS等进行改造。
3.2 EC2绑定IAM Role
IAM Role是什么。您可以使用Amazon CLI或Amazon API或使用自定义URL来代入roles。有关role使用的更多信息,请参阅IAM用户指南。
使用IAM role来管理临时凭证,比在 EC2 实例中存储访问密钥更安全。有关更多信息,请参阅 IAM 用户指南中的 使用 IAM 角色向在 Amazon EC2 实例上运行的应用程序授予权限。
扫描没有绑定IAM Role的EC2实例
没有绑定IAM Role大概率是在代码中通过AKSK来获取权限。可以通过AWS Config的ec2-instance-profile-attached规则进行检查,识别没有绑定IAM角色的EC2实例。
IAM角色与EC2实例的关联
IAM角色可用于为在Amazon EC2实例上运行的应用程序提供必要的AWS权限。这避免了将访问密钥直接存储在EC2实例上,提高了安全性。IAM角色授予的权限由策略决定,这些策略指定了角色可以执行哪些AWS服务和资源上的操作。
步骤概述:
创建IAM角色:首先,在IAM中创建一个角色,并附加一组策略,这些策略定义了角色的权限。
将角色附加到EC2实例:创建或现有的EC2实例可以被指定这个IAM角色。这样,运行在EC2实例上的应用程序就可以利用这个角色的权限,而不需要管理静态的AWS访问密钥。
在应用程序中利用IAM角色:应用程序可以通过AWS SDK或命令行工具自动获取与角色关联的临时凭证。这些凭证可用于执行允许的AWS服务调用。
在Amazon EC2实例上部署的应用程序可以利用与该实例关联的IAM角色,无需管理静态的AWS凭证即可调用AWS服务。以下是一个示例代码,展示如何使用AWS SDK(本示例以Python为例)调用S3服务,列出一个特定存储桶中的对象。这段代码假设您已将IAM角色附加到EC2实例,且该角色具有访问指定S3存储桶的权限。
通过使用EC2实例的IAM角色,这段代码无需显式提供AWS访问密钥和密钥ID,提高了应用程序的安全性和维护性。
可以参考: #
3.3 运行在Amazon EKS上的应用
使用IAM role来管理临时凭证,比在 EKS中存储访问密钥AK/SK更安全。
EKS上配置IAM角色以供Pods使用:
创建IAM角色和策略:首先创建一个IAM角色,然后创建或关联一个策略,该策略规定了对AWS服务的访问权限。确保策略满足你的应用需求。
使用IAM roles for service accounts (IRSA):利用EKS的IAM roles for service accounts (IRSA)功能,允许Kubernetes服务帐户关联IAM角色。这样,运行在EKS上的Pods可以使用该服务帐户的权限,从而通过AWS的临时凭证访问AWS资源,无需管理静态的访问密钥。
创建OIDC身份提供者:在EKS集群中创建OIDC(OpenID Connect)身份提供者。这一步是启用IRSA的前提。
关联IAM角色和Kubernetes服务账号:创建一个Kubernetes服务账号,并通过注解将其与IAM角色关联。这样,在此服务账号下运行的Pods就有权使用IAM角色的权限。
示例:
通过这种方式,EKS上运行的应用程序能够更安全、更方便地管理对AWS资源的访问权限。
3.4 Lambda中使用IAM Role
在AWS Lambda中使用IAM角色代替代码中的访问密钥(AK/SK)是一种提高安全性的最佳实践。首先,确保为Lambda函数创建或指定一个具有所需权限的IAM角色。这个角色应包括对必要AWS服务的访问权限。在Lambda函数的配置中,指定这个IAM角色。通过这种方式,Lambda运行时会自动使用该角色的权限,无需在代码中嵌入AK/SK。这样不仅简化了凭证管理,还减少了因凭证泄露导致的安全风险。AWS还会负责管理这些角色的临时凭证,确保访问安全且高效。
步骤4: 回收AK/SK
确认所有权限都改造完成后,就可以开始回收AK/SK了,具体步骤如下:
登录AWS管理控制台。
转到IAM服务页面。
在导航窗格中选择“用户”。
选择相应的用户。
在“安全凭证”标签下,找到需要回收的AK/SK。
采取措施禁用或删除AK/SK。
通过对访问类型的明确区分和对敏感凭证的及时管理,可以大幅降低安全风险。
其他应用场景的短期有效权限使用
IAM Role还可以用于跨账号访问以及跨服务访问,更多的访问使用介绍参见IAM Role的应用场景。
最后更新于