文章总结: 本文介绍了七大关键AWS服务控制策略和资源控制策略,旨在减小云环境的安全爆炸半径。这些策略包括强制MFA认证、限制KMS访问、禁止IAM用户担任角色、防止权限修改、限制S3发现、防范混淆代理人攻击以及控制S3加密方式。文章强调在组织层面实施这些策略的重要性,并提供了具体的JSON策略示例,建议在部署前进行充分测试和影响评估,以确保安全措施不影响正常业务流程。
综合评分: 85
文章分类: 云安全,安全建设,网络安全,应用安全,安全运营
七大关键AWS SCP策略收缩安全“爆炸半径”
Dubito
云原生安全指北
2025年12月9日 08:35
江苏
注:本文翻译自Blast Security的文章《7 Essential AWS Guardrails to Shrink the Blast Radius》[1],可点击文末“阅读原文”按钮查看英文原文。
全文如下:
一、引言
随着网络攻击日益频繁,构建具备强力安全措施、能够自我防护的环境变得前所未有的重要。虽然防止用户离开组织或禁用未使用区域等基础防护措施是必要的,但今天我们重点讨论几个关键的AWS防护栏,它们能为您的云基础设施提供额外保护。这些示例展示了能显著减小爆炸半径的关键策略,但它们仅仅是所需全面控制措施中的一小部分。除此之外,还有许多不同复杂度的策略应与之配合实施,以有效减少暴露于威胁的风险,并在发生入侵事件时限制横向移动。虽然这些防护栏可以通过IAM和基于资源的策略来实施,但我们强烈建议在组织层面使用服务控制策略和资源控制策略来实现。这能确保在组织内的所有账户和单元中获得更广泛的覆盖。
免责声明:在实施这些防护措施之前,务必模拟其影响并添加恰当的风险例外规则,以管理可接受的风险,确保它们不会干扰正常工作流程。
二、拒绝未启用MFA的IAM用户执行敏感AWS IAM操作
2.1 摘要
该防护栏将阻止IAM用户执行敏感操作(例如修改角色或用户),除非已启用多因素认证。MFA确保那些可能窃取了凭据的攻击者,在没有额外认证层的情况下无法执行关键操作。
2.2 如何减小爆炸半径
强制对敏感的IAM操作进行MFA认证,可以防止未经授权的权限提升和凭据管理。攻击者可能窃取访问密钥,但如果没有触发MFA,他们将无法执行删除用户或附加策略等高危操作。
2.3 示例服务控制策略
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DenySensitiveIAMActionsWithoutMFA",
"Effect": "Deny",
"Action": [
"iam:DeleteGroup",
"iam:DeleteGroupPolicy",
"iam:DeletePolicyVersion",
"iam:DeleteRole",
"iam:DeleteRolePolicy",
"iam:DeleteUser",
"iam:DeleteUserPolicy",
"iam:DetachGroupPolicy",
"iam:DetachRolePolicy",
"iam:DetachUserPolicy",
"iam:RemoveUserFromGroup",
"iam:DeleteAccessKey",
"iam:SetDefaultPolicyVersion",
"iam:AttachGroupPolicy",
"iam:AttachRolePolicy",
"iam:AttachUserPolicy",
"iam:PutGroupPolicy",
"iam:PutUserPermissionsBoundary",
"iam:PutUserPolicy",
"iam:PutRolePermissionsBoundary",
"iam:PutRolePolicy",
"iam:UpdateAssumeRolePolicy",
"iam:RemoveRoleFromInstanceProfile",
"iam:UpdateAccessKey"
],
"Resource": ["*"],
"Condition": {
"ArnLike": {
"aws:PrincipalArn": ["arn:aws:iam::*:user/*"]
},
"BoolIfExists": {
"aws:MultiFactorAuthPresent": ["false"]
}
}
}
]
}
三、拒绝来自不受信任网络的组织级KMS密钥访问
3.1 摘要
该防护栏确保AWS KMS密钥仅能从受信任的网络进行访问,阻止来自不受信任来源(例如公共互联网)的加密密钥操作。
3.2 如何减小爆炸半径
通过强制执行此防护栏,对KMS密钥的访问被限制在内部环境内,从而最大程度降低了密钥泄露和源自受感染或不受信任网络的攻击风险。
3.3 示例资源控制策略
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "KMSEnforceNetworkPerimeter",
"Effect": "Deny",
"Action": ["kms:*"],
"Resource": ["*"],
"Principal": "*",
"Condition": {
"StringNotEqualsIfExists": {
"aws:SourceVpc": [
"{{ [ EndpointVPCs ] }}"
]
},
"NotIpAddressIfExists": {
"aws:SourceIp": [
"{{ [ CustomerCIDRs ] }}"
]
},
"BoolIfExists": {
"aws:ViaAWSService": ["false"],
"aws:PrincipalIsAWSService": ["false"]
}
}
}
]
}
四、禁止IAM用户担任IAM角色
4.1 摘要
该防护栏阻止IAM用户在AWS中担任角色,这是权限提升的常见攻击向量。
4.2 如何减小爆炸半径
IAM用户已拥有其所需任务的足够权限。允许他们担任额外角色会带来未经授权的权限提升风险。此防护栏阻断了这种可能,确保角色担任机制不会被滥用于未经授权的访问。
4.3 示例服务控制策略
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DenyIAMUsersFromAssumeRole",
"Effect": "Deny",
"Action": ["sts:AssumeRole"],
"Resource": ["*"],
"Condition": {
"ArnLike": {
"aws:PrincipalArn": ["arn:aws:iam::*:user/*"]
}
}
}
]
}
五、禁止修改IAM用户权限
5.1 摘要
该防护栏阻止对IAM用户权限的未经授权修改,确保只有授权实体才能更改用户的访问权限。
5.2 如何减小爆炸半径
此防护栏通过防止对IAM用户权限的未经授权修改,降低了权限提升的风险。如果攻击者入侵了某个用户,他们将无法更改自己的权限或通过添加新策略来提升权限。
5.3 示例服务控制策略
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DenyChangeUserPermissions",
"Effect": "Deny",
"Action": [
"iam:AddUserToGroup",
"iam:AttachGroupPolicy",
"iam:AttachUserPolicy",
"iam:DeleteUserPermissionsBoundary",
"iam:PutGroupPolicy",
"iam:PutUserPermissionsBoundary",
"iam:PutUserPolicy"
],
"Resource": ["*"]
}
]
}
六、禁止非人类身份发现 S3 存储桶
6.1 摘要
该防护栏阻止非人类身份(例如服务账户)列举 S3 存储桶,以减少敏感存储资源的暴露,并限制对存储桶的未授权枚举。
6.2 如何减小爆炸半径
通过阻止服务账户列举 S3 存储桶,此防护栏限制了攻击者收集关于 S3 存储桶和对象信息的能力,从而降低了信息窃取和横向移动的风险。
6.3 示例服务控制策略
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DenyS3ServiceDiscovery",
"Effect": "Deny",
"Action": [
"s3:ListAllMyBuckets",
"s3:GetBucketAcl",
"s3:GetBucketPolicy"
],
"Resource": ["*"],
"Condition": {
"ArnLike": {
"aws:PrincipalArn": ["arn:aws:iam::*:role/*"]
},
"ArnNotLike": {
"aws:PrincipalArn": ["arn:aws:iam::*:role/aws-reserved/sso.amazonaws.com/*"]
},
"BoolIfExists": {
"aws:PrincipalIsAWSService": ["false"]
}
}
}
]
}
七、防止通过 AWS Bedrock 服务主体导致的混淆代理人攻击
7.1 摘要
该防护栏通过确保 AWS Bedrock 服务主体无法担任非预期的角色或访问来自不同账户或组织的未授权资源,来防范混淆代理人攻击(confused deputy attacks)。
7.2 如何减小爆炸半径
通过阻止 Bedrock 被用作未授权访问的中继,此防护栏保护了敏感数据和资源,使其免于因服务主体配置错误或被利用而遭到入侵。
7.3 示例服务控制策略
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "BedrockConfusedDeputyProtection",
"Effect": "Deny",
"Action": ["sts:AssumeRole"],
"Resource": ["*"],
"Principal": {
"Service": ["bedrock.amazonaws.com"]
},
"Condition": {
"StringNotEquals": {
"aws:SourceOrgId": ["{{ OrgID }}"]
},
"Null": {
"aws:SourceAccount": ["false"]
}
}
}
]
}
八、防止使用客户提供密钥(SSE-C)向组织级 AWS S3 存储桶上传对象
8.1 摘要
该防护栏阻止使用客户提供密钥(SSE-C)向 S3 上传对象,强制要求使用组织控制的加密机制。
8.2 如何减小爆炸半径
在 S3 中使用 SSE-C 进行加密,是勒索软件用来加密 S3 数据的已知攻击向量。AWS 操作员很少使用这种做法,但其存在为攻击者利用未授权的加密方法提供了机会。通过强制要求内部加密控制,此防护栏确保加密密钥在您的组织内管理,降低了数据被未授权访问的风险。
8.3 示例服务控制策略
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DenyS3SSECObjectUpload",
"Effect": "Deny",
"Action": ["s3:PutObject"],
"Resource": ["*"],
"Principal": "*",
"Condition": {
"Null": {
"s3:x-amz-server-side-encryption-customer-algorithm": ["false"]
},
"Bool": {
"aws:PrincipalIsAWSService": ["false"]
}
}
}
]
}
九、结语
上述防护栏只是众多能帮助减小AWS环境爆炸半径的策略中的几个示例,远非全部。为了真正保护您的环境,必须实施一套全面的AWS防护栏,持续测试并模拟其影响,并适应新出现的威胁。虽然这些防护栏可以在IAM和资源层面应用,但我们强烈建议在组织层面使用 服务控制策略(SCP) 和 资源控制策略(RCP) 以获得更广泛的覆盖。这种方法将确保安全策略在整个AWS基础设施的所有部分强制执行,从而减少攻击面,并提升组织的整体安全态势。
在实施这些防护栏之前,对其进行测试和模拟影响至关重要。在Blast Security,我们提供一个先进的平台,让您能够主动管理这些防护栏。通过模拟驱动的方法和已接受的风险管理策略,阻止恶意活动和错误配置。
引用链接
[1] 《7 Essential AWS Guardrails to Shrink the Blast Radius》: https://blast.security/blog/blackhat/
交流群
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:云原生安全指北 Dubito《七大关键AWS SCP策略收缩安全“爆炸半径”》