10

出于安全目的,我希望锁定 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/*"
        }
      }
    }
  ]
}
4

2 回答 2

3

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

详情如下:

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

  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

请注意,“通过默默无闻的安全”一词仅在电影中出现。某物要么是可证明安全的,要么是不安全的。

于 2016-04-12T20:55:30.217 回答
0

我用过类似的东西

{
    "Version": "2012-10-17",
    "Id": "Allow only My VPC",
    "Statement": [
        {
            "Sid": "Allow only My VPC",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject", "s3:ListBucket",
            "Resource": [
                "arn::s3:::{BUCKET_NAME}",
                "arn::s3:::{BUCKET_NAME}/*"
            ],
            "Condition": {
                "StringLike": {
                    "aws:sourceVpc": "{VPC_ID}" OR "aws:sourceVpce": "{VPCe_ENDPOINT}"
                }
            }
        }
    ]
}
于 2020-07-01T05:24:12.340 回答