列出 Amazon S3 存储桶 - Amazon Simple Storage Service

列出 Amazon S3 存储桶

要返回您拥有的通用存储桶的列表,可以使用 ListBuckets。您可以使用 Amazon S3 控制台、AWS Command Line Interface 或 AWS SDK 来列出存储桶。对于使用 AWS CLI、AWS SDK 和 Amazon S3 REST API 发出的 ListBuckets 请求,如果 AWS 账户 采用存储桶的默认服务配额(10000 个存储桶),则将同时支持分页和非分页请求。无论您的账户中有多少存储桶,您都可以创建介于 1 到 10000 个存储桶之间的页面大小来列出所有存储桶。对于分页请求,ListBuckets 请求会返回存储桶名称,以及每个存储桶的相应 AWS 区域。以下 AWS Command Line Interface 和 AWS SDK 示例向您展示了如何在 ListBuckets 请求中使用分页。请注意,有些 AWS SDK 可以协助进行分页。

权限

要列出您的所有存储桶,您必须拥有 s3:ListAllMyBuckets 权限。如果遇到 HTTP Access Denied (403 Forbidden) 错误,请参阅排查 Amazon S3 中的拒绝访问(403 Forbidden)错误

重要

我们强烈建议仅使用分页 ListBuckets 请求。只有设置为默认通用存储桶配额 10000 的 AWS 账户,才支持未分页的 ListBuckets 请求。如果您批准的通用存储桶配额超过 10000,则必须发送分页 ListBuckets 请求以列出您账户的存储桶。对于通用存储桶配额大于 10000 的 AWS 账户,所有未分页的 ListBuckets 请求都将遭拒绝。

  1. 登录到AWS Management Console,然后通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/

  2. 在左侧导航窗格中,选择存储桶

  3. 通用存储桶选项卡上,您可以看到通用存储桶的列表。

  4. 要按名称查找存储桶,请在搜索框中输入存储桶的名称。

要使用 AWS CLI 生成通用存储桶的列表,可以使用 lslist-buckets 命令。以下示例向您展示了如何创建分页 list-buckets 请求和未分页的 ls 请求。要使用这些示例,请替换用户输入占位符

例 – 使用 ls(未分页)列出您账户中的所有存储桶

以下示例命令将在单个非分页调用中列出您账户中的所有通用存储桶。此调用会返回您账户中所有存储桶的列表(最多 10000 个结果):

$ aws s3 ls

有关更多信息和示例,请参阅列出存储桶和对象

例 – 使用 ls(分页)列出您账户中的所有存储桶

以下示例命令会进行一次或多次分页调用,列出您账户中的所有通用存储桶,每页返回 100 个存储桶:

$ aws s3 ls --page-size 100

有关更多信息和示例,请参阅列出存储桶和对象

例 – 列出您账户中的所有存储桶(分页)

以下示例提供了分页 list-buckets 命令,用于列出您账户中的所有通用存储桶。--max-items--page-size 选项将列出的存储桶数量限制为每页 100 个。

$ aws s3api list-buckets / --max-items 100 / --page-size 100

如果项目输出的数量 (--max-items) 少于基础 API 调用所返回的项目总数,则输出将包含 starting-token 参数所指定的延续令牌,您可传递到后续命令以检索下一组项目。以下示例展示了如何使用上一示例返回的 starting-token 值。您可以指定 starting-code 检索接下来的 100 个存储桶。

$ aws s3api list-buckets / --max-items 100 / --page-size 100 / --starting-token eyJNYXJrZXIiOiBudWxsLCAiYm90b190cnVuY2F0ZV9hbW91bnQiOiAxfQ==

例 – 列出 AWS 区域中的所有存储桶(分页)

以下示例命令使用 --bucket-region 参数来列出账户中位于 us-east-2 区域的最多 100 个存储桶。不支持向与 --bucket-region 参数中指定的值不同的区域端点发出请求。例如,如果您想将响应限制在 us-east-2 中的存储桶,则必须向 us-east-2 中的端点发出请求。

$ aws s3api list-buckets / --region us-east-2 / --max-items 100 / --page-size 100 / --bucket-region us-east-2

例 – 列出所有以特定存储桶名称前缀开头的存储桶(分页)

以下示例命令列出了最多 100 个名称以 amzn-s3-demo-bucket 前缀开头的存储桶。

$ aws s3api list-buckets / --max-items 100 / --page-size 100 / --prefix amzn-s3-demo-bucket

以下示例向您展示如何使用 AWS SDK 来列出通用存储桶。

SDK for Python
例 – ListBuckets 请求(分页)
import boto3 s3 = boto3.client('s3') response = s3.list_buckets(MaxBuckets=100)
例 – ListBuckets 响应(分页)
import boto3 s3 = boto3.client('s3') response = s3.list_buckets(MaxBuckets=1,ContinuationToken="eyJNYXJrZXIiOiBudWxsLCAiYm90b190cnVuY2F0ZV9hbW91bnQiOiAxfQ==EXAMPLE--")
SDK for Java
import com.amazonaws.regions.Regions; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3ClientBuilder; import com.amazonaws.services.s3.model.Bucket; import com.amazonaws.services.s3.model.ListBucketsPaginatedRequest; import com.amazonaws.services.s3.model.ListBucketsPaginatedResult; import java.util.List; public class ListBuckets { public static void main(String[] args) { final AmazonS3 s3 = AmazonS3ClientBuilder.standard().withRegion(Regions.DEFAULT_REGION).build(); ListBucketsPaginatedRequest listBucketsPaginatedRequest = new ListBucketsPaginatedRequest().withMaxBuckets(1); ListBucketsPaginatedResult listBucketsPaginatedResult = s3.listBuckets(listBucketsPaginatedRequest); List<Bucket> buckets = listBucketsPaginatedResult.getBuckets(); System.out.println("Your Amazon S3 buckets are:"); for (Bucket b : buckets) { System.out.println("* " + b.getName() + " region: " + b.getRegion()); } System.out.println("continuation token: " + listBucketsPaginatedResult.getContinuationToken()); } }
SDK for Java 2.x
import software.amazon.awssdk.auth.credentials.DefaultCredentialsProvider; import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.s3.S3Client; import software.amazon.awssdk.services.s3.model.Bucket; import software.amazon.awssdk.services.s3.model.ListBucketsRequest; import software.amazon.awssdk.services.s3.model.ListBucketsResponse; import java.util.List; public class ListBuckets { public static void main(String[] args) { // Create an S3 client S3Client s3 = S3Client.builder() .region(Region.US_EAST_1) // Replace with your preferred region .credentialsProvider(DefaultCredentialsProvider.create()) .build(); try { // List buckets ListBucketsRequest listBucketsRequest = ListBucketsRequest.builder() .maxBuckets(10) .build(); ListBucketsResponse listBucketsResponse = s3.listBuckets(listBucketsRequest); List<Bucket> buckets = listBucketsResponse.buckets(); // Print bucket names System.out.println("Your Amazon S3 buckets are:"); for (Bucket bucket : buckets) { System.out.println(bucket.name()); System.out.println(bucket.getBucketRegion()); } } catch (Exception e) { System.err.println("Error listing buckets: " + e.getMessage()); e.printStackTrace(); } finally { // Close the S3 client to release resources s3.close(); } } }
SDK for Go
package main import ( "context" "fmt" "log" "github.com/aws/aws-sdk-go-v2/aws" "github.com/aws/aws-sdk-go-v2/config" "github.com/aws/aws-sdk-go-v2/service/s3" ) func main() { cfg, err := config.LoadDefaultConfig(context.TODO(), config.WithRegion("us-east-2")) if err != nil { log.Fatal(err) } client := s3.NewFromConfig(cfg) maxBuckets := 1000 resp, err := client.ListBuckets(context.TODO(), management portals3.ListBucketsInput{MaxBuckets: aws.Int32(int32(maxBuckets))}) if err != nil { log.Fatal(err) } fmt.Println("S3 Buckets:") for _, bucket := range resp.Buckets { fmt.Println("- Name:", *bucket.Name) fmt.Println("-BucketRegion", *bucket.BucketRegion) } fmt.Println(resp.ContinuationToken == nil) fmt.Println(resp.Prefix == nil) }