amazon-web-services - AWS SDK for Java S3 存储桶访问密钥 ID 问题
问题描述
我正在尝试通过 Java 库以编程方式访问 Amazon S3 存储桶。(从第三方应用程序进行基本的云管理)。作为第一步,我尝试打印存储桶是否存在(第 3 行)
AWSCredentials credentials=new BasicAWSCredentials("my-Access- Key","My- Secret-Key");
AmazonS3 s3client = AmazonS3ClientBuilder.standard().withCredentials(new AWSStaticCredentialsProvider(credentials)).withRegion(Regions.AP_EAST_1).build();
String bucketExists=String.valueOf(s3client.doesBucketExistV2("newBucketName"));
当我运行这行代码时,我收到一个异常说
com.amazonaws.services.s3.model.AmazonS3Exception: The AWS Access Key Id you provided does not exist in our records. (Service: Amazon S3; Status Code: 403; Error Code: InvalidAccessKeyId; Request ID:RequestId...)
由于以下原因,我不想在 .aws 文件夹中维护凭据文件:
我正在尝试根据来自安全 LDAP 系统的登录用户来改变访问凭据,因此只有在使用硬编码凭据对其进行测试时才能确认其可行性。
我已检查该问题不是以下问题之一
- 我在 AWS 控制台中创建了一个具有有效访问 ID 和密钥的 IAM 用户,并允许该用户进行编程访问。
- 我还为 IAM 用户应用了 AmazonS3FullAccess 策略
- 密钥处于活动状态(已通过控制台检查)
- 我已将 AWS SDK 的依赖项添加到 gradle(实现组:'com.amazonaws',名称:'aws-java-sdk-s3',版本:'1.12.15')
请让我知道问题可能是什么。如果是业余问题,我深表歉意。
解决方案
如问题注释中所示,您的代码看起来不错,应该可以正常工作。
问题的最可能原因是 AWS 正在从其他地方获取其他凭证。请尝试删除其他凭据,例如存储在主目录中的凭据,以确保 SDK 在联系 S3 时使用正确的凭据。
此外,请根据您的 S3 存储桶验证您是否提供了正确的区域。
推荐阅读
- vue.js - 在 Vuex Store 中获取未知的本地操作类型
- google-apps-script - 在共享驱动器中查找和替换功能多个文档
- reactjs - 如何在 reactjs 和 laravel 应用程序中查看某个项目的详细信息
- angular - 试图区分'[object Object]'。Angular 中只允许使用数组和可迭代对象
- python - 递归 Python 函数 - 似乎无法存储值
- angular - 在 Angular 中,如何使用 Route 转到完全不同的 URL?换句话说,您如何关闭匹配?
- c - 将 _Generic 与其他宏结合
- google-bigquery - YouTube BigQuery 频道转移似乎并未导入所有视频
- arrays - 将指向数组的指针传递给函数有什么好处吗?
- facebook-opengraph - 使我的 FB 目录产品图像(微数据)与我的共享图像(og:image)不同