лямбда-функция не может получить доступ к корзине s3, ограниченной облачным интерфейсом - PullRequest
3 голосов
/ 20 июня 2020

У меня ведро s3 как origin облачного фронта. В корзине заблокированы все публикации c. Я создаю лямбда-функцию, которая загружает, обрабатывает и выгружает объект s3. Я создаю роль для лямбда-выражения и добавляю политику non publi c в соответствии со значением publi c для ресурсов Amazon .. Вот политика

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "S3LambdaAccessObject",
            "Effect": "Allow",
            "Action": "s3:*Object",
            "Resource": "arn:aws:s3:::XXXXXXXXXXXXX-dev-videos-origin/*",
            "Condition": {
                "ArnEquals": {
                    "aws:SourceArn": "arn:aws:lambda:us-east-1:XXXXXXXXXXXXX:function:YYYYYYYYYYYY_conversor"
                }
            }
        },
        {
            "Sid": "S3LambdaListBucket",
            "Effect": "Allow",
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::XXXXXXXXXXXXX-dev-videos-origin",
            "Condition": {
                "ArnEquals": {
                    "aws:SourceArn": "arn:aws:lambda:us-east-1:XXXXXXXXXXXXX:function:YYYYYYYYYYY_conversor"
                }
            }
        }

Однако я получаю код отказа в доступе при попытке скачать и закачать файл на s3 через sdk. Я даже добавил lamnda к политикам s3, но все еще безрезультатно:

{
    "Version": "2012-10-17",
    "Id": "aws_iam_policy_document_origin",
    "Statement": [
        {
            "Sid": "S3GetObjectForCloudFront",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity XXXXXXXXXXX"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::XXXXXXXXXXX-origin/*"
        },
        {
            "Sid": "S3ListBucketForCloudFront",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity XXXXXXXXXXX"
            },
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::XXXXXXXXXXX-origin"
        },
        {
            "Sid": "S3PutObjectForCloudFront",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity XXXXXXXXXXX"
            },
            "Action": [
                "s3:PutObjectVersionAcl",
                "s3:PutObjectAcl",
                "s3:PutObject",
                "s3:GetObject"
            ],
            "Resource": "arn:aws:s3:::XXXXXXXXXXX-origin/private/*"
        },
        {
            "Sid": "S3LambdaAccessObject",
            "Effect": "Allow",
            "Principal": {
                "AWS": "*"
            },
            "Action": "s3:*Object",
            "Resource": "arn:aws:s3:::XXXXXXXXXXX-origin/*",
            "Condition": {
                "ArnEquals": {
                    "aws:SourceArn": "arn:aws:lambda:us-east-1:YYYYYYYYYYY:function:XXXXXXXXXXX"
                }
            }
        },
        {
            "Sid": "S3LambdaListBucket",
            "Effect": "Allow",
            "Principal": {
                "AWS": "*"
            },
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::XXXXXXXXXXX-origin",
            "Condition": {
                "ArnEquals": {
                    "aws:SourceArn": "arn:aws:lambda:us-east-1:YYYYYYYYYYY:function:XXXXXXXXXXX"
                }
            }
        }
    ]
}
    ]
}

Лямбда работает нормально, если снята блокировка доступа publi c. Что я делаю не так?

Ответы [ 2 ]

5 голосов
/ 20 июня 2020

Белый список для лямбда-функции Arn не будет работать, поскольку лямбда-функция подключается, используя свою роль Lambda для выполнения любого из этих взаимодействий.

Вместо этого вам нужно внести в белый список роль IAM что ваша лямбда привязана к нему. Это делается с помощью принципала роли IAM Arn.

Вам все равно необходимо убедиться, что роль IAM содержит дополнительные разрешения, необходимые для доступа к S3.

0 голосов
/ 21 июня 2020

Проблема в том, что код, который я тестировал, пытается загрузить файл с политикой publi c ACL, что запрещается s3, так как весь доступ publi c заблокирован. Блокировка также не позволяет любой учетной записи или службе обновлять эту политику non publi c для корзины или объекта: https://docs.aws.amazon.com/AmazonS3/latest/dev/access-control-block-public-access.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...