如何定位持续用于DynamoDB操作的IAM访问密钥使用来源
精准定位IAM访问密钥使用来源的解决方案
1. 利用CloudTrail日志追踪调用细节
- 打开CloudTrail控制台,确保目标区域或全局跟踪已启用,筛选该IAM用户访问密钥相关的
DynamoDB操作事件(如PutItem、GetItem、Scan等) - 查看事件详情中的
sourceIPAddress:如果是AWS内部服务,IP会带有amazonaws.com后缀(比如ECS任务、Lambda执行环境的IP);如果是外部来源,可获取具体公网IP进一步排查 - 检查
userAgent字段,识别调用方的工具或服务标识(比如aws-cli/2.15.0、boto3/1.34.0等),同时通过requestParameters中的表ARN锁定操作的具体DynamoDB资源
2. 排查EC2实例与容器环境
- 对所有运行中的EC2实例,通过SSM会话或SSH登录,执行命令查找环境变量中的旧密钥:
env | grep AWS_ACCESS_KEY_ID - 检查实例上的AWS配置文件:
cat ~/.aws/credentials、cat /etc/aws/credentials - 若使用ECS/EKS,检查任务定义的环境变量、Secrets配置,以及容器内部的AWS配置文件
3. 扫描无服务器服务配置
- 检查Lambda函数的环境变量,以及函数代码中是否硬编码或引用了旧密钥的配置项
- 查看Step Functions状态机、S3触发器、SNS/SQS订阅的关联服务,确认是否有服务通过该密钥访问DynamoDB
- 排查AppSync、Glue等托管服务的数据源配置,是否使用了该IAM用户的密钥
4. 用IAM Access Analyzer检测访问路径
- 启用IAM Access Analyzer,扫描账户内资源,查看是否有外部实体或内部服务正在使用该IAM用户的密钥访问DynamoDB
- 分析生成的报告,定位具体的资源访问请求来源
5. 临时限制权限并监控拒绝事件
- 给该IAM用户附加一条拒绝所有DynamoDB操作的策略(Deny优先级高于Allow),强制拦截密钥的使用:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "dynamodb:*", "Resource": "*" } ] }
- 监控CloudTrail中的
AccessDenied事件,事件详情会包含完整的调用上下文,帮助精准定位来源
6. 排查第三方集成与工具
- 检查是否有第三方数据同步工具、BI平台、监控服务等配置了该IAM密钥
- 查看AWS Marketplace订阅的服务,确认是否有服务关联了该IAM用户的密钥
关键注意事项
更换IAM访问密钥时,旧密钥默认不会自动禁用,需手动在IAM控制台将其设置为Inactive状态,否则旧密钥仍可正常发起请求。
内容的提问来源于stack exchange,提问作者ProblemSolver
相关产品推荐
相关产品推荐

