AWS EC2 使用 IAM 角色访问 S3
AWS EC2 access to S3 with IAM role
场景:我在同一帐户下有一个 EC2 实例和一个 S3 存储桶,我在该 EC2 上的 Web 应用程序想要访问该存储桶中的资源。
根据官方文档,我使用 s3access
创建了一个 IAM 角色并将其分配给 EC2 实例。据我了解,现在我的网络应用程序应该能够访问存储桶。但是,经过试验,我似乎必须添加一个 allowPublicRead
存储桶策略,如下所示:
{
"Version": "2008-10-17",
"Statement": [
{
"Sid": "AllowPublicRead",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::mybucket/*"
}
]
}
否则我会被禁止访问。
但是我为什么要使用此 allowPublicRead
存储桶策略,因为我已经向 EC2 实例授予了 s3access
IAM 角色?
S3 s3:GetObject
将只允许从您的 ec2 实例访问对象,您想要的是从您的 web-app 访问这些对象,这意味着从您的浏览器,在这种情况下这些 images/objects 将呈现给用户浏览器,如果它是面向 public 的应用程序,那么您还需要分配 AllowPublicRead
权限。
场景:我在同一帐户下有一个 EC2 实例和一个 S3 存储桶,我在该 EC2 上的 Web 应用程序想要访问该存储桶中的资源。
根据官方文档,我使用 s3access
创建了一个 IAM 角色并将其分配给 EC2 实例。据我了解,现在我的网络应用程序应该能够访问存储桶。但是,经过试验,我似乎必须添加一个 allowPublicRead
存储桶策略,如下所示:
{
"Version": "2008-10-17",
"Statement": [
{
"Sid": "AllowPublicRead",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::mybucket/*"
}
]
}
否则我会被禁止访问。
但是我为什么要使用此 allowPublicRead
存储桶策略,因为我已经向 EC2 实例授予了 s3access
IAM 角色?
S3 s3:GetObject
将只允许从您的 ec2 实例访问对象,您想要的是从您的 web-app 访问这些对象,这意味着从您的浏览器,在这种情况下这些 images/objects 将呈现给用户浏览器,如果它是面向 public 的应用程序,那么您还需要分配 AllowPublicRead
权限。