Произошла ошибка (доступ запрещен) при вызове операции copyObject: доступ запрещен

#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 что корзина принадлежит кому-то другому. Вы должны убедиться, что имена ваших корзин уникальны и не используются кем-либо еще.