Java S3 存储桶访问密钥 ID 问题的 AWS SDK
AWS SDK for Java S3 bucket Access Key Id issue
我正在尝试通过 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 系统的登录用户,所以我可以
只有当我用硬编码测试它时才确认可行性
凭据。
我已经检查过问题不是以下问题之一
- 我创建了一个具有有效访问 ID 和密钥的 IAM 用户
AWS 控制台并为用户启用编程访问。
- 我还为 IAM 用户应用了 AmazonS3FullAccess 策略
- 密钥处于激活状态(已通过控制台查看)
- 我已将 AWS SDK 的依赖项添加到 gradle(实施组:'com.amazonaws',名称:'aws-java-sdk-s3',版本:'1.12.15')
请让我知道可能是什么问题。如果这是一个业余问题,我很抱歉。
您使用的是旧版 V1 API。 V1 的服务客户端名称是 AmazonS3。同样,V2 服务客户端名称是 S3Client。亚马逊强烈建议迁移到 V2:
适用于 Java 2.x 的 AWS 开发工具包是对版本 1.x 代码库的重大重写。它建立在 Java 8+ 之上,并添加了几个经常请求的功能。其中包括对非阻塞 I/O 的支持以及在 运行 时插入不同 HTTP 实现的能力。
尝试按照这组基于 V2 的说明逐步操作。
Get started with the AWS SDK for Java 2.x
当使用 V2 时,您可以将您的凭据放在名为 credentials 的 .aws 文件夹中的文件中,如本文档中所述。完成本文档中的所有步骤后,您可以通过编程方式访问 Amazon S3 存储桶。
如问题评论中所述,您的代码看起来不错,应该可以正常工作。
问题的最可能原因是 AWS 正在从其他地方获取其他凭据。请尝试删除其他凭据,例如存储在主目录中的凭据,以确保 SDK 在联系 S3 时使用正确的凭据。
此外,请确认您是否也根据您的 S3 存储桶提供了正确的区域。
我正在尝试通过 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 系统的登录用户,所以我可以 只有当我用硬编码测试它时才确认可行性 凭据。
我已经检查过问题不是以下问题之一
- 我创建了一个具有有效访问 ID 和密钥的 IAM 用户 AWS 控制台并为用户启用编程访问。
- 我还为 IAM 用户应用了 AmazonS3FullAccess 策略
- 密钥处于激活状态(已通过控制台查看)
- 我已将 AWS SDK 的依赖项添加到 gradle(实施组:'com.amazonaws',名称:'aws-java-sdk-s3',版本:'1.12.15')
请让我知道可能是什么问题。如果这是一个业余问题,我很抱歉。
您使用的是旧版 V1 API。 V1 的服务客户端名称是 AmazonS3。同样,V2 服务客户端名称是 S3Client。亚马逊强烈建议迁移到 V2:
适用于 Java 2.x 的 AWS 开发工具包是对版本 1.x 代码库的重大重写。它建立在 Java 8+ 之上,并添加了几个经常请求的功能。其中包括对非阻塞 I/O 的支持以及在 运行 时插入不同 HTTP 实现的能力。
尝试按照这组基于 V2 的说明逐步操作。
Get started with the AWS SDK for Java 2.x
当使用 V2 时,您可以将您的凭据放在名为 credentials 的 .aws 文件夹中的文件中,如本文档中所述。完成本文档中的所有步骤后,您可以通过编程方式访问 Amazon S3 存储桶。
如问题评论中所述,您的代码看起来不错,应该可以正常工作。
问题的最可能原因是 AWS 正在从其他地方获取其他凭据。请尝试删除其他凭据,例如存储在主目录中的凭据,以确保 SDK 在联系 S3 时使用正确的凭据。
此外,请确认您是否也根据您的 S3 存储桶提供了正确的区域。