使用 AWSSDK.S3 使用 C# 对 Amazon S3 存储桶进行身份验证

Posted

技术标签:

【中文标题】使用 AWSSDK.S3 使用 C# 对 Amazon S3 存储桶进行身份验证【英文标题】:Authenticate Amazon S3 bucket with C# using AWSSDK.S3 【发布时间】:2016-05-15 20:09:06 【问题描述】:

编辑:- 需要将在 Amazon S3 上创建的一些文件移动到 Azure Blob 存储,我以前没有使用过 Amazon S3,并且提供的详细信息包括一个“路径”我不是 100% 了解如何在 C# 中使用 AWSSDK.S3 NuGet 包..

因此,以前从未使用过 Amazon S3,并且尝试构建一个 azure worker 角色(或 webjob)来监视此存储位置并在文件或文件出现时将它们移动到 Azure Blob 存储 - 似乎相当容易,但我m 在 S3 的身份验证阶段失败,问题是我拥有的“路径”变量。

我已经使用 Cyber​​duck 测试了我的连接,我有以下参数:

Access Key Id, Secret Access Key, and Path.. the Path is just "folder/folder/"

如果没有路径,我会收到来自 Cyber​​duck 的拒绝访问响应...很好,这是意料之中的 - 但我无法弄清楚如何将路径嵌入到 Visual Studio AWS 凭据管理器或测试控制台工具中的代码中我已经写了。。

处理凭证的 AWS Explorer 只允许我输入:

Access Key Id, Secret Access Key, Account Number ????

我需要手动编码吗?一直在看这篇,但今天真的没有足够的时间来消化它:

https://blogs.aws.amazon.com/net/post/Tx1310VG2O81PSY/Referencing-Credentials-using-Profiles

干杯,

泰。

【问题讨论】:

【参考方案1】:

也许结帐 AWS .net SDK? https://aws.amazon.com/sdk-for-net/ https://www.nuget.org/packages?q=aws

既然您在 Azure 上运行服务,为什么不使用 Azure Blob 存储? https://www.nuget.org/packages?q=Azure+Blob+Storage

【讨论】:

嗨,我已经检查了 SDK,在我看来它的文档记录很差。我已经让它工作了,但是我提供的细节我看不到(清楚地)如何向连接凭据添加“路径” 我所做的目标是在文件出现时将它们从 Amazon S3 移动到 Azure Blob 存储。所以是的,我同意你的第二点;)【参考方案2】:

最终设法就此达成某种解决方案,为投反对票的人喝彩:/

在原始帖子中,我说我试图导航到“文件夹/文件夹”,其中第一个文件夹实际上是存储桶名称(事实证明) - 我不是这个 s3 帐户的管理员,所以我是对此非常盲目。

string AccessKeyId = "REMOVED";
string SecretAccessKey = "nOt/a+ReAl/kEY";
BasicAWSCredentials awsCreds = new BasicAWSCredentials(AccessKeyId, SecretAccessKey);

AmazonS3Config S3Config = new AmazonS3Config

    ServiceURL = "https://folder.s3.amazonaws.com/",
    RegionEndpoint = RegionEndpoint.USEast1
;

AmazonS3Client s3Client = new AmazonS3Client(awsCreds, S3Config);

ListObjectsRequest request = new ListObjectsRequest();
request.BucketName = "folder";
request.Prefix = "folder/another_folder/";

ListObjectsResponse response = s3Client.ListObjects(request);
foreach (var item in response.S3Objects)

    sr.WriteLine(item.Key.ToString());

希望这对某人有所帮助,但仍然认为 SDK doco 很糟糕;)

我将把凭据放在 app.config 中,我想这是最佳实践吗?

【讨论】:

显然 app.config 实际上并不是最佳实践。它使用的是凭证文件,但我无法让它工作,所以它们基本上都在 app.config 中! :) 仅供参考,以后您可以使用 Key Vault 或环境变量将这些东西排除在源代码之外 这个代码大大救了我的命

以上是关于使用 AWSSDK.S3 使用 C# 对 Amazon S3 存储桶进行身份验证的主要内容,如果未能解决你的问题,请参考以下文章

c_cpp 在Amaz游戏中的炉石致死率https://www.youtube.com/watch?v=clEKDpjQ7Ok

为啥对 C# 数组使用“新”语法?

使用aws命令行刷新cloudfront缓存

对多个方法 C# 使用单个事务?

使用 'var' 对 C# 编译器的性能有多大影响?

为啥要在 C# 中对布尔值使用 |= 运算符?