У меня есть серверное приложение в JS, работающее в AWS lambda на node.js 8.10. Он запускается событиями S3 и создает копию недавно загруженных элементов S3 в другом сегменте с контролем версий. Лямбда-функции предоставляется роль, которая содержит следующие политики:
{
"PolicyName" : {"Fn::Join": ["", [{"Ref": "AWS::Region"}, "-", "S3LambdaPolicy"]]},
"PolicyDocument": {
"Version" : "2012-10-17",
"Statement" : [
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:GetObjectVersion",
"s3:GetBucketVersioning",
"s3:GetObjectTagging",
"s3:PutObject",
"s3:PutObjectTagging",
"s3:ListBucket",
"s3:ListBucketVersions"
],
"Resource": "arn:aws:s3:::*"
}
]
}
}
Функция вызывает эту функцию s3 после копирования элемента в targetBucket (и ожидания его появления):
let tagging = {
Bucket: targetBucket,
Key: targetKey,
Tagging: {
TagSet: [
{
Key: "SourceBucket",
Value: sourceBucket,
},
{
Key: "SourceKey",
Value: key
}
]
}
};
if (data.VersionId) {
tagging.VersionId = data.VersionId;
}
s3.putObjectTagging(tagging, function(err, data){
if (err) {
console.log(err);
} else {
console.log("Set the tagging to " + JSON.stringify(tagging));
}
});
Это всегда приводит к ошибке отказа в доступе:
2018-11-06T12: 06: 24.070Z 389637c4-e1bc-11e8-8eec-8b4d06f7596c {AccessDenied: доступ запрещен по запросу.extractError (/var/runtime/node_modules/aws-sdk/lib/services/s3.js : 577: 35)
...
сообщение: «Доступ запрещен»,
код: «AccessDenied»,
регион: ноль,
время: 2018-11-06T12: 06: 24.069Z,
requestId: '178F863CC6FB4960',
extendedRequestId: 'sYbGkGb + hgOWtWp1XPkqtoVRv2XxAg04axRAUaeF0VtMMzMYYyPMkTrwWpx3xUBF0zalKzIJAI8 =',
cfId: не определено,
statusCode: 403,
повторяемый: ложь,
retryDelay: 39.20736560394356}
Я не уверен, что мне здесь не хватает, и был бы признателен за любую помощь с этой проблемой.
Thx,
Stefan