#amazon-s3 #aws-lambda #boto3 #amazon-iam
#amazon-s3 #aws-lambda #boto3 #amazon-iam
Вопрос:
Я получаю эту ошибку при использовании copy_object
метода boto3 при запуске моего кода Python в AWS Lambda.
AWS лямбда-код
import json
import boto3
def lambda_handler(event, context):
some_binary_data = b'Here we have some data'
client = boto3.client("s3")
# Upload - Working
client.put_object(Body=some_binary_data, Bucket='test', Key="upload/binary_1.txt")
# Copy - Working
s3 = boto3.resource('s3')
copy_source = {
'Bucket': 'test',
'Key': 'upload/binary_1.txt'
}
s3.meta.client.copy(copy_source, 'test', 'upload/binary_1_copied.txt')
# Copy - NOT WORKING
# Access Denied even after adding GetObjectTagging and PutObjectTagging permissions in the policy
client.copy_object(Bucket="test", CopySource="upload/binary_1.txt", Key="upload/binary_1_copied.txt")
# Delete - Working
client.delete_object(Bucket="test", Key="upload/binary_1.txt")
return {
'statusCode': 200,
'body': json.dumps('Hello from Lambda!')
}
Я использую эту политику (указанную как JSON) для роли, назначенной моей лямбда-функции.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"s3:ReplicateObject",
"s3:PutObject",
"s3:GetObject",
"s3:GetObjectTagging",
"s3:ListBucket",
"s3:PutObjectTagging",
"s3:DeleteObject",
"s3:PutObjectAcl"
],
"Resource": [
"arn:aws:s3:::test/*",
"arn:aws:s3:::test"
]
},
{
"Sid": "VisualEditor1",
"Effect": "Allow",
"Action": "s3:ListAllMyBuckets",
"Resource": "*"
}
]
}
Примечание — S3-Bucket в настоящее время содержит upload/binary_1.txt файл
Комментарии:
1. Я предполагаю
test
, что это не фактическое имя вашего корзины?2. Да, это
test
фактическое имя моей корзины s3
Ответ №1:
Если test
это фактическое имя корзины, вы не можете его использовать. Имена корзин должны быть уникальными для всех учетных записей и регионов AWS. Из документов:
Имя корзины Amazon S3 уникально во всем мире, а пространство имен является общим для всех учетных записей AWS. Это означает, что после создания корзины имя этой корзины не может использоваться другой учетной записью AWS в любом регионе AWS, пока корзина не будет удалена.
Таким образом, вам будет отказано в доступе, потому test
что корзина принадлежит кому-то другому. Вы должны убедиться, что имена ваших корзин уникальны и не используются кем-либо еще.