S3 权限访问


Amazon S3 访问方式

Amazon S3提供了多样化的接口来满足各种访问和管理存储数据的需求。

  1. AWS Management Console:这是一个用户友好的图形界面,允许用户手动浏览、上传和管理S3桶和对象。
  2. **AWS CLI (Command Line Interface)**:这是一个命令行工具,供那些希望通过脚本或手动命令访问S3的用户使用。
  3. AWS SDKs:SDKs适用于各种流行的编程语言,如Python、Java、JavaScript等,允许开发者在应用程序中集成S3访问功能。
  4. S3 REST API:对于希望直接使用HTTP请求来交互的高级用户和开发者,提供了API接口。
  5. S3 Transfer Acceleration:为了加速大文件的上传和下载,使用Amazon CloudFront的全球分布式节点。
  6. S3 Select:此功能允许用户直接在S3上查询存储的数据,而无需完全下载。

同账户访问和权限设置

在同一AWS账户内,有两种主要的策略机制来定义访问S3资源的权限。

  1. IAM 策略:IAM策略可以附加到IAM用户、组或角色上。它们定义了这些实体在AWS上可以执行哪些操作。通过IAM策略,您可以细粒度地控制对S3资源的访问。
  2. S3 Bucket 策略:这些策略直接附加到S3桶上,允许您指定哪些实体可以对桶执行哪些操作。这些策略也适用于同一AWS账户中的访问控制。

跨账户访问

跨账户访问S3资源涉及到两个或多个AWS账户。资源所有者账户希望允许其他AWS账户访问其S3资源。

  1. Bucket Policy:在S3资源策略中,您可以明确地授予其他AWS账户权限。这是一个直接、明确的方式,为外部账户提供桶或对象级别的访问。
  2. IAM Role with Cross-Account Access:您可以在一个账户(账户B)中创建IAM角色,并为另一个账户(账户A)授予权限,允许其假设该角色。这样,当账户A假设该角色时,它会继承角色的权限,可能包括访问账户B的S3资源。
  3. **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例子:

  1. 在账户B中创建一个IAM角色,并在其信任关系中指定账户A的ID。
  2. 为该角色附加一个策略,允许其访问S3桶。
  3. 账户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

文章作者: AWS Learner
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 AWS Learner !
评论
  目录