0

我正在使用安卓设备和亚马逊的 S3 存储系统。

我有一个主用户帐户,并且我创建了代表我的用户访问存储的子用户。

通常,我会使用以下操作与我的主要用户访问 S3:

AmazonS3Client s3Client = new AmazonS3Client(
                             new BasicAWSCredentials(ACCESS_KEY_ID, SECRET_KEY));
Bucket deviceBucket = s3Client.createBucket(bucketName);

其中 ACCESS_KEY_ID 和 SECRET_KEY 是为我的主要用户帐户提供的。

我正在尝试对我的 IAM 用户“Alice”执行此操作。这个用户被赋予了它自己的 ACCESS_KEY_ID。使用上面的代码,我使用 Alice 的 ACCESS_KEY_ID 和上面的相同 SECRET_KEY。用户 Alice 没有特殊的权限或限制,因此我假设用户可以创建存储桶。

调用createBucket的时候报错:

08-08 12:05:55.246: E/AndroidRuntime(2544): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=Intent { dat=content://media/external/images/media/1 }} to activity {com.amazonaws.demo.s3uploader/com.amazonaws.demo.s3uploader.S3UploaderActivity}: Status Code: 403, AWS Service: Amazon S3, AWS Request ID: (somevalue), AWS Error Code: SignatureDoesNotMatch, AWS Error Message: The request signature we calculated does not match the signature you provided. Check your key and signing method., S3 Extended Request ID: (some value)

我似乎找不到另一种使用 IAM 用户通过 Android API 对 S3 进行身份验证的方法。

任何帮助表示赞赏,谢谢。

4

2 回答 2

2

您的IAM用户将拥有与SECRET_KEY您的 root 帐户不同的帐户。

当您创建 IAM 账户时,您应该已经收到ACCESS_KEY_IDSECRET_KEY必须结合使用的账户。您收到的错误表示密钥不匹配或其中一个密钥有错字。

于 2012-10-05T04:28:48.410 回答
0

在 AWS 生态系统中,权限是明确授予的。没有权限意味着用户将没有权限。访问密钥 ID 和密钥是一个组合,没有 2 个访问密钥可以具有相同的密钥。

为访问密钥使用正确的密钥。

于 2017-05-12T21:35:11.063 回答