Amazon S3上传失败-访问被拒绝

时间:2019-02-03 10:57:53

标签: amazon-web-services react-native amazon-s3 aws-amplify

我想通过AWS放大到上​​传文件到现有的S3桶。
我不使用使用AWS MobileHub 即可。
我按照创建新的身份池this guide,最后,这是我对这个角色的策略:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "s3:*",
                "mobileanalytics:PutEvents",
                "cognito-sync:*"
            ],
            "Resource": "*"
        }
    ]
}

在我的代码,我配置中扩增如下:

Amplify.configure({
  'aws_cognito_identity_pool_id': 'us-east-2:f37baa...',
  'aws_cognito_region': 'us-east-2',
  'aws_user_files_s3_bucket': 'demo',
  'aws_user_files_s3_bucket_region': 'us-east-1',
});

我得到了错误:

Error: Access Denied
    at Request.extractError (s3.js:580)
    at Request.callListeners (aws-sdk-core-react-native.js:3610)
    at Request.emit (aws-sdk-core-react-native.js:3582)
    at Request.emit (aws-sdk-core-react-native.js:7723)
    at Request.transition (aws-sdk-core-react-native.js:7062)
    at AcceptorStateMachine.runTo (aws-sdk-core-react-native.js:7867)
    at aws-sdk-core-react-native.js:7879
    at Request.<anonymous> (aws-sdk-core-react-native.js:7078)
    at Request.<anonymous> (aws-sdk-core-react-native.js:7725)
    at Request.callListeners (aws-sdk-core-react-native.js:3620)



更新

import Amplify from 'aws-amplify';
import { Storage } from 'aws-amplify';

Amplify.configure({
  'aws_cognito_identity_pool_id': 'us-east-2:f37...',
  'aws_cognito_region': 'us-east-2',
  'aws_user_files_s3_bucket': 'demo',
  'aws_user_files_s3_bucket_region': 'us-east-1',
});

export default class App extends Component<Props> {
...
uploadImage = async uri => {
    const fileName = 'example.jpg';
    await Storage.put(fileName, blob, {
      contentType: 'image/jpeg',
      level: 'public'
    }).then(data => console.log(data))
      .catch(err => console.log(err))

这是整个代码,我只是没有添加要获取的文件,但是可以肯定地工作。 当我使用移动中心aws-exports.js,我可以上传文件,但MobileHub产生了一些bucketsm和我的用例包括使用我现有的桶。

1 个答案:

答案 0 :(得分:0)

因此,据我所知,您的代码正在尝试访问现有的S3存储桶,而不是Amplify / Mobile Hub创建的存储桶?

如果我是对的,则需要更新Cognito策略,以向用户授予对现有S3存储桶的访问权限。

IAM -> Roles控制台中,您将找到Amplify创建的两个角色。角色名称为YOUR_PROJECT____DATE_TAG___[un]authrole,例如在我的控制台中:photoalbums-20190202155011-unauthRolephotoalbums-20190202155011-authRole

根据要授予已认证用户或未认证用户的访问权限,修改适当的角色,或者如果希望已认证和未认证用户都有权访问S3,则修改两个角色。

添加S3托管策略AmazonS3ReadOnlyAccess将为您的用户授予对存储桶的只读访问权限。 (请不要添加AmazonS3FullAccesss3:*,因为它将使您的用户创建和删除帐户中的存储桶和对象)