如何修改AWS SCP,允许服务间API调用且仅放行公司IP访问
解决方案:修改SCP排除AWS服务发起的调用
当前SCP会拦截非公司IP且来自SSO角色的调用,但同时误拦截了AWS服务间的API调用(如SageMaker访问S3),原因是这些服务间调用的来源IP可能不在公司IP列表中,且需要明确排除由AWS服务自身发起的请求。
你需要在原策略的Condition中添加aws:PrincipalIsAWSService条件,确保仅当调用不是由AWS服务发起时,才会触发Deny规则。修改后的完整策略如下:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "RestrictaccessIP", "Effect": "Deny", "Action": "*", "Resource": "*", "Condition": { "NotIpAddress": { "aws:SourceIp": [ "IP1", "IP2" ] }, "StringLike": { "aws:PrincipalArn": [ "arn:aws:iam::*:role/aws-reserved/sso.amazonaws.com/*" ] }, "Bool": { "aws:PrincipalIsAWSService": "false" } } } ] }
关键说明:
aws:PrincipalIsAWSService是AWS提供的条件键,当请求由AWS官方服务(如SageMaker、Lambda等)发起时,该值为true。添加这个条件后,只有当请求不是AWS服务发起的,且同时满足来源IP不在公司列表、主体是SSO角色时,才会执行Deny。- 如果你还需要允许VPC内部资源(如EC2、ECS容器)发起的调用(这些请求的来源IP是VPC私有IP,不在公司公网IP列表中),可以额外添加
StringNotExists条件判断aws:SourceVpc是否存在,例如:
这样VPC内部的请求会被排除在Deny规则之外。"StringNotExists": { "aws:SourceVpc": "*" }
内容的提问来源于stack exchange,提问作者Hoang Vuong
相关产品推荐
相关产品推荐

