为了安全起见,我希望锁定一个S3存储桶 - 我将部署映像存储在存储桶中。
我想要做的是创建一个存储桶策略,该策略仅支持通过我的帐户中的EC2实例通过http 进行匿名下载。
有办法做到这一点吗?
我正在尝试使用的政策示例(它不允许自己应用):
{
"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/*"
}
}
}
]
}
答案 0 :(得分:2)
只是为了澄清这是如何做到的。您创建IAM策略,将其附加到新角色或现有角色,并使用角色装饰ec2实例。您还可以通过存储桶策略提供访问权限,但这不太精确。
以下详细信息:
除我的拥有者外,S3存储桶是默认拒绝的。因此,您可以创建存储桶并上传数据。您可以尝试使用https://s3.amazonaws.com/MyBucketName/file.ext向浏览器验证无法访问这些文件。应该返回错误代码"访问被拒绝"在xml中。如果您收到错误代码" NoSuchBucket",则说明您的网址错误。
根据arn:aws:iam :: aws:policy / AmazonS3ReadOnlyAccess创建IAM策略。开始看起来像下面的剪辑。看看"资源"键,并注意它被设置为外卡。你只需将其修改为你的桶的arn。你必须为一个桶及其内容做一个,所以它变成:"资源":[" 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
请注意,术语"通过默默无闻的安全"只是电影中的一件事。任何东西都可证明是安全的,或者它是不安全的。
答案 1 :(得分: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}"
}
}
}
]
}