我正在使用安卓设备和亚马逊的S3存储系统。
我有一个主用户帐户,并且我创建了子用户来代表我的用户访问存储。
通常,我会使用以下操作来与我的主要用户一起访问 S3:
AmazonS3Client s3Client = new AmazonS3Client(
new BasicAWSCredentials(ACCESS_KEY_ID, SECRET_KEY));
Bucket deviceBucket = s3Client.createBucket(bucketName);
为我的主要用户帐户提供ACCESS_KEY_ID和SECRET_KEY的位置。
我正在尝试与我的 IAM 用户"爱丽丝"一起执行此操作。此用户获得了自己的ACCESS_KEY_ID。使用上面的代码,我使用与上面的相同SECRET_KEY使用爱丽丝的ACCESS_KEY_ID。用户 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 进行身份验证的方法。
感谢帮助,谢谢。
您的IAM
用户将具有与您的根账户不同的SECRET_KEY
。
创建 IAM 账户时,您应该已收到必须组合使用的账户的ACCESS_KEY_ID
和SECRET_KEY
。 您收到的错误表示其中一个键不匹配或拼写错误。
在 AWS 生态系统中,权限是显式授予的。无权限表示用户将没有权限。 访问密钥 ID 和私有密钥是组合的,没有 2 个访问密钥可以具有相同的私有密钥。
对访问密钥使用正确的私有密钥。