【问题标题】:How to Programmatically Disable Credentials Check Before Accessing Public AWS S3 Buckets?如何在访问公共 AWS S3 存储桶之前以编程方式禁用凭证检查?
【发布时间】:2021-09-28 00:35:30
【问题描述】:

我的 C++ 程序必须访问公共和私有 AWS 存储桶。公共存储桶不属于我,因此当程序尝试访问它们并且我的凭据可见时,我收到以下类型错误:

Aws::S3::S3Errors::INVALID_ACCESS_KEY_ID    

"InvalidAccessKeyId"    

"The AWS Access Key Id you provided does not exist in our records."

如果我像这样手动隐藏我的凭据

mv ~/.aws/credentials ~/.aws/credentials-hidden

在运行程序之前,我可以成功列出并获取公共对象。但是,该程序无法访问我的私人存储桶。

我搜索了 S3ClientClientConfiguration 以查找禁用和重新启用凭据检查的选项,但没有找到。

请告诉我这是怎么做到的。

【问题讨论】:

  • 我对 cpp 一点也不熟悉,但这可能是要走的路。 sdk.amazonaws.com/cpp/api/LATEST/…
  • 这听起来有点像 AWS CLI 的 --no-sign-request 选项,但我不知道如何在正常的 API 调用中强制它。错误消息很奇怪,因为它应该简单地用 403 拒绝而不是拒绝知道访问密钥。我建议您尝试使用 AWS CLI 来缩小可能发生的情况,然后在您的 C++ 代码中实施您的发现。

标签: amazon-web-services amazon-s3 aws-credentials


【解决方案1】:

我找到了解决方案。要在不隐藏我的~/.aws/credentials 文件的情况下访问公共存储桶,我可以使用empty credentials 创建一个S3Client

Aws::Auth::AWSCredentials empty_credentials { };
Aws::S3::S3Client s3_client { empty_credentials, config };

【讨论】:

    猜你喜欢
    • 2016-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-20
    • 1970-01-01
    相关资源
    最近更新 更多