Amazon S3 访问方式
Amazon S3提供了多样化的接口来满足各种访问和管理存储数据的需求。
- AWS Management Console:这是一个用户友好的图形界面,允许用户手动浏览、上传和管理S3桶和对象。
- **AWS CLI (Command Line Interface)**:这是一个命令行工具,供那些希望通过脚本或手动命令访问S3的用户使用。
- AWS SDKs:SDKs适用于各种流行的编程语言,如Python、Java、JavaScript等,允许开发者在应用程序中集成S3访问功能。
- S3 REST API:对于希望直接使用HTTP请求来交互的高级用户和开发者,提供了API接口。
- S3 Transfer Acceleration:为了加速大文件的上传和下载,使用Amazon CloudFront的全球分布式节点。
- S3 Select:此功能允许用户直接在S3上查询存储的数据,而无需完全下载。
同账户访问和权限设置
在同一AWS账户内,有两种主要的策略机制来定义访问S3资源的权限。
- IAM 策略:IAM策略可以附加到IAM用户、组或角色上。它们定义了这些实体在AWS上可以执行哪些操作。通过IAM策略,您可以细粒度地控制对S3资源的访问。
- S3 Bucket 策略:这些策略直接附加到S3桶上,允许您指定哪些实体可以对桶执行哪些操作。这些策略也适用于同一AWS账户中的访问控制。
跨账户访问
跨账户访问S3资源涉及到两个或多个AWS账户。资源所有者账户希望允许其他AWS账户访问其S3资源。
- Bucket Policy:在S3资源策略中,您可以明确地授予其他AWS账户权限。这是一个直接、明确的方式,为外部账户提供桶或对象级别的访问。
- IAM Role with Cross-Account Access:您可以在一个账户(账户B)中创建IAM角色,并为另一个账户(账户A)授予权限,允许其假设该角色。这样,当账户A假设该角色时,它会继承角色的权限,可能包括访问账户B的S3资源。
- **S3 Access Control Lists (ACLs)**:这是S3的早期访问控制方法,允许您为其他AWS账户定义对象级别的权限。虽然仍然可用,但现在更推荐使用Bucket Policy或IAM策略,因为它们提供了更大的灵活性。
同账户访问和权限设置
IAM 策略例子:
假设您希望允许IAM用户只读取特定的S3桶中的对象。您可以为该用户创建以下IAM策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::my-example-bucket/*"
}
]
}
S3 Bucket 策略例子:
如果您希望限制只有特定的IAM用户可以访问您的S3桶,您可以在该桶上设置以下Bucket策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {"AWS": "arn:aws:iam::YOUR_ACCOUNT_ID:user/USERNAME"},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::my-example-bucket/*"
}
]
}
跨账户访问
Bucket Policy例子:
假设您希望允许另一个AWS账户访问您的S3桶。您可以在您的桶上设置以下策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {"AWS": "ACCOUNT_ID_OF_THE_OTHER_ACCOUNT"},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::my-example-bucket/*"
}
]
}
IAM Role with Cross-Account Access例子:
- 在账户B中创建一个IAM角色,并在其信任关系中指定账户A的ID。
- 为该角色附加一个策略,允许其访问S3桶。
- 账户A的用户可以假设这个角色,并继承其S3访问权限。
以上的例子可以为您的读者提供更清晰的操作指南和理解。您可以根据自己的需求进一步调整或详细描述每个步骤。希望这有助于您的博客写作!
匿名访问
presigned url [^1] [^2]
预签名 URL最长7天,中国区需要备案。
aws s3 presign s3://DOC-EXAMPLE-BUCKET/test2.txt
[^1]: 使用预签名 URL - Amazon Simple Storage Service
[^2]: presign — AWS CLI 2.7.23 Command Reference
没有备案
<Error>
<Code>UnauthorizedAccess</Code>
<Message>You are not authorized to perform this operation</Message>
<RequestId>X2Q67EZKB8CJ3PM72</RequestId>
<HostId>bc2h2Sbb76aDuZcS+Wd2lgdlN20cjnF+QqbEnFjTV8KxrsSMy+7tiJI6qx3tm9U4N</HostId>
</Error>
# 浏览器的报错
GET https://xxxxx.s3.cn-north-1.amazonaws.com.cn/ec2.md?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIATBIXRJFCVFQ36CED%2F20220925%2Fcn-north-1%2Fs3%2Faws4_request&X-Amz-Date=20220925T021049Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=36bb107f012367108ded4444af70321f342323d0a7c860bbaefeb524161067e0 401 (Unauthorized)
删除桶策略:
aws s3api delete-bucket-policy --bucket name