[英]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-unauthRole
和photoalbums-20190202155011-authRole
根據您是否要向已認證用戶或未認證用戶授予訪問權限,請修改相應的角色,或者如果您希望已認證和未認證用戶都有權訪問S3,則修改兩個角色。
添加S3托管策略AmazonS3ReadOnlyAccess
將為您的用戶授予對存儲桶的只讀訪問權限。 (請不要添加AmazonS3FullAccess
或s3:*
因為它將使您的用戶在您的帳戶上創建和刪除存儲桶和對象)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.