Лямбда-функция для записи в S3 - политика IAM для доступа к S3 - PullRequest
0 голосов
/ 09 июля 2019

Вот моя политика, которая предоставляет доступ на чтение / запись, который все еще не может записать в корзину S3

Проблема

Ошибка по-прежнему ниже:

Не удалось загрузить /tmp/test.txt в bucketname / Automation_Result_2019-07-09 04: 20: 32_.csv: Произошла ошибка (AccessDenied) при вызове операции PutObject: доступ запрещен

Политика

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "ConsoleAccess",
            "Effect": "Allow",
            "Action": [
                "s3:GetAccountPublicAccessBlock",
                "s3:GetBucketAcl",
                "s3:GetBucketLocation",
                "s3:GetBucketPolicyStatus",
                "s3:GetBucketPublicAccessBlock",
                "s3:ListAllMyBuckets"
            ],
            "Resource": "*"
        },
        {
            "Sid": "ListObjectsInBucket",
            "Effect": "Allow",
            "Action": "s3:ListBucket",
            "Resource": [
                "arn:aws:s3:::bucketname"
            ]
        },
        {
            "Sid": "AllObjectActions",
            "Effect": "Allow",
            "Action": "s3:*Object",
            "Resource": [
                "arn:aws:s3:::bucketname/*"
            ]
        }
    ]
}

Политика корзины

{
    "Version": "2012-10-17",
    "Id": "MYBUCKETPOLICY",
    "Statement": [
        {
            "Sid": "DenyIncorrectEncryptionHeader",
            "Effect": "Deny",
            "Principal": "*",
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::bucket-name/*",
            "Condition": {
                "StringNotEquals": {
                    "s3:x-amz-server-side-encryption": "aws:kms"
                }
            }
        },
        {
            "Sid": "DenyUnEncryptedObjectUploads",
            "Effect": "Deny",
            "Principal": "*",
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::bucket-name/*",
            "Condition": {
                "Null": {
                    "s3:x-amz-server-side-encryption": "true"
                }
            }
        }
    ]
}

Код Python (в функции Lambda) Соответствующая частькода

s3 = boto3.resource('s3', config=Config(signature_version='s3v4'))

target_bucket = 'bucket-name'
target_file = "Output/Automation_Result_"+EST+"_.txt"

s3.meta.client.upload_file('/tmp/test.txt', target_bucket, target_file, ExtraArgs={"ServerSideEncryption": "aws:kms", "SSEKMSKeyId":"XXXXXXX-XXXX-XXXX" })

Вот так выглядит мой публичный доступ к корзине!

This is how my bucket public access looks like..

1 Ответ

1 голос
/ 09 июля 2019

У меня отлично работает!

Я взял вашу политику, переименовал корзину и прикрепил ее к пользователю в качестве единственной политики.

Затем я смог успешно скопировать объект в и из корзины.

Если он не работает для вас, либо вы не используете учетные данные, связанные с этой политикой, либо существует другая политика, запрещающая доступ, например, политика Запретить или политика ограничения объема.

...