Amazon S3存储桶策略:如何锁定仅对您的EC2实例的访问

Dou*_*oug 8 amazon amazon-s3 amazon-ec2 amazon-web-services

我希望锁定一个S3存储桶用于安全目的 - 我将部署映像存储在存储桶中.

我想要做的是创建一个存储桶策略,该策略支持通过http 从我帐户中的EC2实例进行匿名下载.

有没有办法做到这一点?

我正在尝试使用的策略示例(它不允许自己应用):

{
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::[my bucket name]",
      "Condition": {
        "ArnEquals": {
          "aws:SourceArn": "arn:aws:ec2:us-east-1:[my account id]:instance/*"
        }
      }
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

Ati*_*ifm 3

只是为了澄清这通常是如何完成的。您创建 IAM 策略,将其附加到新的或现有的角色,并使用该角色装饰 ec2 实例。您还可以通过存储桶策略提供访问权限,但这不太精确。

详情如下:

  1. 除了我的所有者之外,S3 存储桶默认被拒绝。因此,您创建存储桶并上传数据。您可以通过尝试https://s3.amazonaws.com/MyBucketName/file.ext来使用浏览器验证文件是否无法访问。返回时应在 xml 中显示错误代码“访问被拒绝”。如果您收到“NoSuchBucket”错误代码,则说明您的网址错误。

  2. 基于 arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess 创建 IAM 策略。开始看起来像下面的片段。看一下“Resource”键,注意它被设置为通配符。您只需将其修改为您的存储桶的 arn 即可。您必须对存储桶及其内容执行一项操作,使其变为:"Resource": ["arn:aws:s3:::MyBucketName", "arn:aws:s3:::MyBucketName/*"]

  3. 现在您已经有了策略,您要做的就是使用自动授予该策略的 IAM 角色来装饰您的实例。所有这些都无需在实例中包含任何身份验证密钥。因此,转到角色,创建新角色,创建 Amazon EC2 角色,找到您刚刚创建的策略,您的角色就准备好了。

  4. 最后,您创建实例,并添加刚刚创建的 IAM 角色。如果机器已经有自己的角色,您只需将这两个角色合并为机器的新角色即可。如果计算机已经在运行,则在您重新启动之前它不会获得新角色。

  5. 现在你应该可以走了。该机器有访问s3共享的权限。现在您可以使用以下命令将文件复制到您的实例。请注意,您必须指定区域

    aws s3 cp --region us-east-1 s3://MyBucketName/MyFileName.tgz /home/ubuntu

请注意,术语“通过默默无闻实现安全”只是电影中的情节。有些东西要么是可证明安全的,要么是不安全的。