如何限制AWS IAM角色仅由EMR扮演,管控数据访问并防止策略被修改?
解决方案:实现EMR专属IAM角色及数据访问控制
1. 限制IAM角色仅允许EMR扮演,禁止用户假定
核心是通过角色的信任策略限定调用源,完全排除IAM用户的角色扮演权限:
- 打开目标IAM角色的信任策略编辑页,替换为以下配置(替换占位符为你的AWS账号ID和区域):
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceArn": "arn:aws:emr:your-region:your-account-id:cluster/*" } } } ] }
- 策略说明:仅允许来自EMR集群的EC2实例扮演该角色(通过
aws:SourceArn锁定请求源为EMR集群ARN),IAM用户无法直接调用sts:AssumeRole获取该角色权限。 - 若为EMR服务角色(供EMR服务本身调用其他AWS服务),则将Principal改为
"elasticmapreduce.amazonaws.com",无需EC2相关Condition。
2. 限制特定数据仅允许EMR访问
以S3存储为例,结合IAM角色权限和S3桶策略实现双重控制:
步骤1:给EMR角色添加数据访问权限
在EMR实例角色的权限策略中添加S3访问规则:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["s3:GetObject", "s3:ListBucket"], "Resource": [ "arn:aws:s3:::your-target-bucket", "arn:aws:s3:::your-target-bucket/*" ] } ] }
步骤2:配置S3桶策略拒绝非EMR角色访问
编辑目标S3桶的桶策略,添加强制拒绝规则:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::your-account-id:role/your-emr-instance-role" }, "Action": ["s3:GetObject", "s3:ListBucket"], "Resource": [ "arn:aws:s3:::your-target-bucket", "arn:aws:s3:::your-target-bucket/*" ] }, { "Effect": "Deny", "Principal": "*", "Action": ["s3:GetObject", "s3:ListBucket"], "Resource": [ "arn:aws:s3:::your-target-bucket", "arn:aws:s3:::your-target-bucket/*" ], "Condition": { "StringNotEquals": { "aws:PrincipalArn": "arn:aws:iam::your-account-id:role/your-emr-instance-role" } } } ] }
- 规则说明:Deny优先级高于Allow,确保只有指定EMR角色能访问数据,Lambda、SageMaker等其他资源或用户一律被拒绝。
3. 限制EMR角色关联策略的修改权限
通过创建拒绝修改的IAM策略,阻止管理员对目标角色的权限调整:
步骤1:创建拒绝策略
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": [ "iam:AttachRolePolicy", "iam:DetachRolePolicy", "iam:PutRolePolicy", "iam:DeleteRolePolicy", "iam:UpdateRole", "iam:DeleteRole" ], "Resource": "arn:aws:iam::your-account-id:role/your-emr-instance-role" } ] }
- 策略说明:禁止所有针对目标角色的修改、删除、策略附加/分离操作。
步骤2:应用策略
- 将该策略附加到所有IAM管理员组、用户;若为AWS组织环境,可通过服务控制策略(SCP) 在组织层面强制生效,覆盖所有账号权限。
内容的提问来源于stack exchange,提问作者Maverick
相关产品推荐
相关产品推荐

