用于S3 Transfer Utility的AWS Android SDK应用程序在读取时引发异常

时间:2017-07-18 18:42:22

标签: android amazon-s3

我创建了一个AWS S3存储桶。我可以使用https://github.com/awslabs/aws-sdk-android-samples/blob/master/S3TransferUtilitySample/S3TransferUtilityTutorial.md访问存储桶,亚马逊提供的TransferUtility SDK应用程序。

我对各个Region和bucket名称的配置做了一些更改,然后我就能连接到S3了。

我有适当的权限来读/写服务器管理员提供给我的S3 Bucket。我使用代码成功将两个图像上传到S3存储桶。我现在可以看到S3中存在两个图像文件。

现在当我尝试下载这些文件时,我得到了

的例外
com.amazonaws.services.s3.model.AmazonS3Exception: Access Denied (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied; Request ID: 04800521FBB752B0)

我有读写权限,但仍然遇到此异常。它仅与许可有关,还是我遗漏了某些东西。

提前致谢。

3 个答案:

答案 0 :(得分:3)

我认为还有其他下载权限。您需要设置谁可以下载此文件 - 阅读是不够的。右键单击S3存储桶中的文件并签出权限部分 - 您将在那里看到它。

答案 1 :(得分:0)

先前的conginto池ID存在问题,我认为它存在一些权限问题。

我们更改了cognito池ID,然后它正常工作。

答案 2 :(得分:0)

当请求不存在的密钥并且不允许请求者列出存储桶的内容时,Amazon S3将返回AccessDenied错误。

使用AWS开发工具包获取请求ID

以下部分包含使用AWS SDK配置日志记录的信息。虽然您可以在每个请求和响应上启用详细日志记录,但您不应在生产系统中启用日志记录,因为大型请求/响应可能会导致应用程序显着减慢。

<强>疑难解答

1)首先检查我的角色,你的权限,转到IAM并检查用户是否[访问密钥&amp;用于API的密钥具有使用基于S3的API的权限。

2确认您的访问密钥仍然可以访问S3资源和该存储桶。

3)通过使用AWS CL尝试相同的操作来验证。

4)使用AWS iam get-user命令显示当前用户,如果它的不同用户将收到此错误。

{ "User": { "UserName": "MY_DEFAULT_USER_NAME", "PasswordLastUsed": "2017-03-15T01:59:05Z", "CreateDate": "2016-04-30T02:46:19Z", "UserId": "ABCDEFGHIJKLMNOPQ", "Path": "/", "Arn": "arn:aws:iam::123456789:user/MY_DEFAULT_USER_NAME" } } 

5)检查你的环境变量可能是我的环境变量中的AWS键是不同的。

6)对于AWS SDK故障排除请求,这对请求ID将类似于以下示例。

status Code: 403, AWS Service: Amazon S3, AWS Request ID: 79104EXAMPLEB723  
AWS Error Code: AccessDenied  AWS Error Message: Access Denied  
S3 Extended Request ID: IOWQ4fDEXAMPLEQM+ey7N9WgVhSnQ6JEXAMPLEZb7hSQDASK+Jd1vEXAMPLEa3Km

7)检查代码中的终点是否正确,应该有一个正确的终点。