簡體   English   中英

Amazon S3上傳失敗-訪問被拒絕

[英]Amazon S3 upload failed - access denied

我正在嘗試通過AWS Amplify將文件上傳到現有的s3存儲桶。
我沒有使用AWS MobileHub
我根據此指南創建了新的身份池,最后這是我擔任該角色的政策:

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

在我的代碼中,我將Amplify配置如下:

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)



UPDATE

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,而我的用例涉及使用現有的bucket。

因此,如果我很好理解,您的代碼正在嘗試訪問現有的S3存儲桶,而不是Amplify / Mobile Hub創建的存儲桶?

如果我是對的,則需要更新Cognito策略,以向用戶授予對現有S3存儲桶的訪問權限。

IAM -> Roles控制台中,您將找到由Amplify創建的兩個角色。 角色名稱是YOUR_PROJECT____DATE_TAG___[un]authrole例如在我的控制台中: photoalbums-20190202155011-unauthRolephotoalbums-20190202155011-authRole

根據您是否要向已認證用戶或未認證用戶授予訪問權限,請修改相應的角色,或者如果您希望已認證和未認證用戶都有權訪問S3,則修改兩個角色。

添加S3托管策略AmazonS3ReadOnlyAccess將為您的用戶授予對存儲桶的只讀訪問權限。 (請不要添加AmazonS3FullAccesss3:*因為它將使您的用戶在您的帳戶上創建和刪除存儲桶和對象)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM