Amazon S3 存储桶策略:如何锁定仅访问您的 EC2 实例
Posted
技术标签:
【中文标题】Amazon S3 存储桶策略:如何锁定仅访问您的 EC2 实例【英文标题】:Amazon S3 Bucket Policy: How to lock down access to only your EC2 Instances 【发布时间】:2013-07-19 14:26:18 【问题描述】:出于安全目的,我希望锁定 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/*"
]
【问题讨论】:
为什么只能匿名访问? 因为这在 PowerShell 或批处理脚本中实现起来更简单。我已经通过在请求中使用很长的 UserAgent 并以这种方式锁定它来解决这个问题。 你能发布一下你是怎么做到的吗? 请参阅我关于使用角色允许您的实例在未经身份验证的情况下从存储桶下载的答案。角色装饰您的实例,因此您根本不必在实例中拥有密钥/凭据。 【参考方案1】:只是为了澄清这通常是如何完成的。您创建 IAM 策略,将其附加到新角色或现有角色,并使用该角色装饰 ec2 实例。您还可以通过存储桶策略提供访问权限,但这不太精确。
详情如下:
S3 存储桶默认拒绝,但我的所有者除外。因此,您创建存储桶并上传数据。您可以通过尝试https://s3.amazonaws.com/MyBucketName/file.ext 使用浏览器验证文件不可访问。应该在 xml 中返回错误代码“拒绝访问”。如果您收到“NoSuchBucket”的错误代码,则您的 url 错误。
根据 arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess 创建 IAM 策略。开始看起来像下面的剪辑。查看“Resource”键,注意它设置为通配符。您只需将其修改为您的存储桶的 arn。您必须对存储桶及其内容执行一项操作,使其变为:"Resource": ["arn:aws:s3:::MyBucketName", "arn:aws:s3:::MyBucketName/*"]
现在您有了一个策略,您想要做的是使用一个 IAM 角色来装饰您的实例,该角色会自动授予它此策略。所有无需任何身份验证密钥都必须在实例中。因此,转到角色,创建新角色,创建 Amazon EC2 角色,找到您刚刚创建的策略,您的角色就准备好了。
最后,您创建了您的实例,并添加了您刚刚创建的 IAM 角色。如果机器已经有自己的角色,您只需将这两个角色合并为机器的新角色。如果机器已经在运行,在你重新启动之前它不会获得新角色。
现在你应该可以走了。机器有权访问 s3 共享。现在您可以使用以下命令将文件复制到您的实例。请注意,您必须指定区域
aws s3 cp --region us-east-1 s3://MyBucketName/MyFileName.tgz /home/ubuntu
请注意,“通过默默无闻的安全”一词仅在电影中出现。要么是可以证明是安全的,要么是不安全的。
【讨论】:
【参考方案2】:我用过类似的东西
"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"
]
【讨论】:
以上是关于Amazon S3 存储桶策略:如何锁定仅访问您的 EC2 实例的主要内容,如果未能解决你的问题,请参考以下文章