如何通过C# AWS SDK无凭证访问公开Amazon S3存储桶下载文件
匿名访问公开S3存储桶的C#实现方案
要实现无凭证访问公开S3存储桶,核心是在初始化S3客户端时显式指定使用匿名凭证,无需提供AWS账号的Access Key等认证信息。
实现步骤
1. 安装依赖包
在Visual Studio中安装AWS S3官方SDK:
- 方式1:通过NuGet包管理器搜索安装
AWSSDK.S3 - 方式2:在包管理控制台执行命令:
Install-Package AWSSDK.S3
2. 初始化匿名S3客户端
直接使用AnonymousAWSCredentials创建无凭证的S3客户端,注意客户端区域需要和目标存储桶的实际所在区域匹配,本次目标数据集存储桶位于us-east-1区域:
using Amazon.S3; using Amazon; using Amazon.Runtime; // 显式声明使用匿名凭证 var anonymousCredentials = new AnonymousAWSCredentials(); // 初始化S3客户端,指定桶所在区域 var s3Client = new AmazonS3Client(anonymousCredentials, RegionEndpoint.USEast1);
3. 公开桶操作示例
列出存储桶内对象
using Amazon.S3.Model; string targetBucketName = "noaa-gfs-bdp-pds"; try { var listRequest = new ListObjectsV2Request { BucketName = targetBucketName, // 可选配置:按前缀过滤对象,比如筛选指定日期的GFS数据 Prefix = "gfs.20240520/00/" }; ListObjectsV2Response listResponse; do { listResponse = await s3Client.ListObjectsV2Async(listRequest); foreach (var s3Obj in listResponse.S3Objects) { Console.WriteLine($"对象键:{s3Obj.Key},文件大小:{s3Obj.Size}字节"); } listRequest.ContinuationToken = listResponse.NextContinuationToken; } while (listResponse.IsTruncated); } catch (AmazonS3Exception ex) { Console.WriteLine($"操作异常:{ex.Message}"); }
下载指定对象到本地
var downloadRequest = new GetObjectRequest { BucketName = targetBucketName, Key = "gfs.20240520/00/atmos/gfs.t00z.pgrb2.0p25.f000" }; using (var response = await s3Client.GetObjectAsync(downloadRequest)) using (var localFileStream = File.Create(@"C:\本地存储路径\gfs数据集.grb2")) { await response.ResponseStream.CopyToAsync(localFileStream); }
注意事项
- 仅支持访问配置了公开匿名读权限的存储桶,否则会返回403拒绝访问错误
- 客户端指定的区域必须和存储桶实际所在区域完全一致,否则会出现访问异常
- 匿名访问仅能执行存储桶公开策略允许的操作,通常仅支持读操作,无法执行写入、删除、修改配置等操作
内容的提问来源于stack exchange,提问作者Liz Meltzer
相关产品推荐
相关产品推荐

