我需要启动一个S3存储桶,以便我的EC2实例可以访问存储图像文件。 EC2实例需要读/写权限。我不想公开提供S3存储桶,我只希望EC2实例能够访问它。
另一个问题是我的EC2实例正在由OpsWorks管理,我可以根据负载/使用情况启动不同的实例。如果我通过IP限制它,我可能并不总是知道EC2实例具有的IP。我可以通过VPC进行限制吗?
我是否必须为静态网站托管启用我的S3存储桶? 我是否需要公开存储桶中的所有文件才能使其正常工作?
答案 0 :(得分:9)
您不需要将存储桶公开读取,也不需要将文件公开读取。桶及其内容可以保密。
请勿基于IP地址限制对存储桶的访问,而是根据EC2实例正在使用的IAM角色对其进行限制。
例如:
{
"Version": "2012-10-17",
"Statement":[{
"Effect": "Allow",
"Action": "s3:*",
"Resource": ["arn:aws:s3:::my_bucket",
"arn:aws:s3:::my_bucket/*"]
}
]
}
例如:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": ["arn:aws:iam::111122223333:role/my-ec2-role"]
},
"Action": "s3:*",
"Resource": ["arn:aws:s3:::my_bucket",
"arn:aws:s3:::my_bucket/*"]
}
]
}
答案 1 :(得分:1)
IAM角色是您的解决方案。
您需要创建具有s3访问权限的角色,如果ec2实例在没有任何角色的情况下启动,则必须使用分配的角色重新构建它。
答案 2 :(得分:1)
这可以非常简单地完成。 请执行以下步骤:
完成此操作后,连接到AWS实例,其余操作将通过以下CLI命令完成:
请注意...文件位置是指本地地址。而bucketname是您的存储桶的名称。 另请注意:如果您的实例和S3存储桶在同一帐户中,则可以这样做。 干杯。