繁体   English   中英

限制 AWS EC2 实例仅访问同一区域中的 S3 存储桶

[英]Limit AWS EC2 Instances to Access S3 Buckets in the Same Region ONLY

我需要经常从 EC2 实例中的 S3 存储桶下载数 TB 的数据。 我想避免不必要的跨区域数据传输。

我知道Example 1: Granting a user permission to create a bucket only in a specific Region 我尝试了以下内容:

  InstanceRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Statement:
          - Action: sts:AssumeRole
            Effect: Allow
            Principal:
              Service: ec2.amazonaws.com
        Version: "2012-10-17"
      Policies:
        - PolicyDocument:
            Statement:
              - Action: s3:*
                Condition:
                  StringLike:
                    s3:LocationConstraint: sa-east-1
                Effect: Allow
                Resource: arn:aws:s3:::*
            Version: "2012-10-17"
          PolicyName: s3
  InstanceInstanceProfile:
    Type: AWS::IAM::InstanceProfile
    Properties:
      Roles:
        - Ref: InstanceRole
  Instance:
    Type: AWS::EC2::Instance
    Properties:
      IamInstanceProfile:
        Ref: InstanceInstanceProfile
      ......
    DependsOn:
      - InstanceRole

但是,所有 S3 存储桶都拒绝我从sa-east-1中启动的 EC2 实例进行访问,无论这些存储桶是否在sa-east-1中。

我的案例是否有完整且有效的示例?

LocationConstraint仅适用于CreateBucketCreateAccessPoint 请参阅: Amazon S3 的操作、资源和条件键 - 服务授权参考

最简单的方法可能是:

  • 添加Allow所有相关访问 S3 的策略,然后
  • 专门为s3:CreateBucket添加Deny策略,其中s3:LocationConstraint不是sa-east-1

尽量避免授予s3:* ,因为这也会授予删除帐户中每个存储桶和所有对象的权限!

感谢bgdnlp多多指教。 在其中的链接aws:RequestedRegion之后,通过将Condition替换为

"Condition": {
    "StringEquals": {
        "aws:RequestedRegion": ["sa-east-1"]
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM