我想通过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)
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和我的用例包括使用我现有的桶。
所以,如果我理解不错,你的代码试图访问现有的S3存储桶,而不是中扩增/移动中心中创建的?
如果我是正确的,你需要更新Cognito政策允许访问用户现有的S3桶。
在IAM -> Roles
控制台,你会发现通过创建扩增出两个角色。角色名YOUR_PROJECT____DATE_TAG___[un]authrole
举例来说,在我的控制台:photoalbums-20190202155011-unauthRole
和photoalbums-20190202155011-authRole
根据您是否要授予访问身份验证的用户或未经授权的用户,如果你想身份验证和未认证用户访问S3修改相应的角色,或两者的作用。
添加S3管理政策AmazonS3ReadOnlyAccess
将授予你的用户到你的水桶只读访问。 (请不要添加AmazonS3FullAccess
或s3:*
因为它会给你的用户创建和删除帐户中的桶和对象)