Warum ist mein Zugriff verweigert auf s3 (mit der aws-sdk für Node.js)?
Ich versuche zu Lesen, eine vorhandene Datei von meinem s3-bucket, aber ich erhalte immer "Zugriff Verweigert" ohne Erklärung oder Anleitung, was zu tun ist. Hier ist der code, den ich verwende:
'use strict'
var AWS = require('aws-sdk')
const options = {
apiVersion: '2006-03-01',
params: {
Bucket: process.env['IMAGINATOR_BUCKET']
},
accessKeyId: process.env['IMAGINATOR_AWS_ACCESS_KEY_ID'],
secretAccessKey: process.env['IMAGINATOR_AWS_SECRET_ACCESS_KEY'],
signatureVersion: 'v4'
}
console.log('options', options)
var s3 = new AWS.S3(options)
module.exports = exports = {
get (name, cb) {
const params = {
Key: name + '.json'
}
console.log('get params', params)
return s3.getObject(params, cb)
},
set (name, body, cb) {
const params = {
Key: name + '.json',
Body: body
}
console.log('set params', params)
return s3.putObject(params, cb)
}
}
Und das ist, was ich bekomme als Ausgabe bei der Verwendung der get
Methode und Protokollierung der Fehler in der Rückruf (mit sensible Informationen zensiert out):
options { apiVersion: '2006-03-01',
params: { Bucket: CENSORED_BUT_CORRECT },
accessKeyId: CENSORED_BUT_CORRECT,
secretAccessKey: CENSORED_BUT_CORRECT,
signatureVersion: 'v4' }
get params { Key: 'whitelist.json' }
err { [AccessDenied: Access Denied]
message: 'Access Denied',
code: 'AccessDenied',
region: null,
time: Wed Sep 21 2016 11:17:50 GMT-0400 (EDT),
requestId: CENSORED,
extendedRequestId: CENSORED,
cfId: undefined,
statusCode: 403,
retryable: false,
retryDelay: 20.084538962692022 }
/Users/shawn/git/vigour-io/imaginate/node_modules/aws-sdk/lib/request.js:31
throw err;
^
AccessDenied: Access Denied
at Request.extractError (/Users/shawn/git/vigour-io/imaginate/node_modules/aws-sdk/lib/services/s3.js:538:35)
at Request.callListeners (/Users/shawn/git/vigour-io/imaginate/node_modules/aws-sdk/lib/sequential_executor.js:105:20)
at Request.emit (/Users/shawn/git/vigour-io/imaginate/node_modules/aws-sdk/lib/sequential_executor.js:77:10)
at Request.emit (/Users/shawn/git/vigour-io/imaginate/node_modules/aws-sdk/lib/request.js:668:14)
at Request.transition (/Users/shawn/git/vigour-io/imaginate/node_modules/aws-sdk/lib/request.js:22:10)
at AcceptorStateMachine.runTo (/Users/shawn/git/vigour-io/imaginate/node_modules/aws-sdk/lib/state_machine.js:14:12)
at /Users/shawn/git/vigour-io/imaginate/node_modules/aws-sdk/lib/state_machine.js:26:10
at Request.<anonymous> (/Users/shawn/git/vigour-io/imaginate/node_modules/aws-sdk/lib/request.js:38:9)
at Request.<anonymous> (/Users/shawn/git/vigour-io/imaginate/node_modules/aws-sdk/lib/request.js:670:12)
at Request.callListeners (/Users/shawn/git/vigour-io/imaginate/node_modules/aws-sdk/lib/sequential_executor.js:115:18)
Ich bin mir jetzt nicht sicher, was zu tun ist, denn ich denke, ich Tue die Dinge richtig laut der docs, aber es funktioniert nicht und die Fehlermeldung sagt nicht, warum mein Zugriff verweigert... keine Ahnung, was der nächste Schritt sein sollte, um diese zu arbeiten?
InformationsquelleAutor Shawn | 2016-09-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
War das problem, dass mein neuer IAM-Benutzer hat nicht eine Politik haben, die zu ihm befestigt wird. Ich wies es die
AmazonS3FullAccess
Politik und jetzt funktioniert es.Wie schon in den Kommentaren, eine restriktivere Politik wäre viel sicherer
FullAccess
zu Ihrer Anwendung, es sei denn, Sie wirklich brauchen, um. Sie sollten sehen, was Berechtigungen wirklich benötigt wird und liefern nur das, was erforderlich ist.InformationsquelleAutor Shawn
FullAccess ist nicht erforderlich!
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"s3:*",
"s3:*",
"s3:Liste*",
"s3:Löschen*"
],
"Resource": [
"arn:aws:s3:::Eimer/*",
"arn:aws:s3:::bicket"
]
},
{
"Sid": "VisualEditor1",
"Effect": "Allow",
"Action": "s3:ListAllMyBuckets",
"Resource": "*"
}
]
}
InformationsquelleAutor Anderson Clayton
Diese können Fehler tritt auf, wenn der Gegenstand, den Sie zu Lesen versucht, ist nicht vorhanden.
Bitte überprüfen, ob das Schlüssel/Eimer richtig ist und wenn Sie das senden der richtigen params auf die api-Methode.
Ich habe dieses problem, wenn ich ersetzen die Taste param mit dem Eimer param und Umgekehrt.
InformationsquelleAutor coderade