Как получить доступ к кросс-региональной корзине s3 с помощью лямбда-выражения с помощью CDK Python

Я создал лямбда-выражение в регионе A и сегмент S3 в регионе B, пытаясь получить доступ к сегменту из клиента лямбда-бото-3, но получаю сообщение об ошибке (доступ запрещен). Пожалуйста, предложите какое-нибудь решение для этого в python CDK. Мне нужно будет создать для него какую-то конкретную политику.

Не могли бы вы поделиться кодом? Например. как выглядит роль выполнения Lambda?   —  person Shubham    schedule 12.08.2020

Access Denied предполагает, что проблема связана с разрешениями, а не с тем, что она межрегиональная. Каким образом роль IAM связана с лямбда-функцией, которая получает разрешение на доступ к сегменту в регионе B? (Все они находятся в одной учетной записи AWS, верно?)   —  person Shubham    schedule 13.08.2020

См. также:  Как программно остановить контейнер AWS Fargate?
Понравилась статья? Поделиться с друзьями:
IT Шеф
Комментарии: 2
  1. Shubham

    Вашей лямбда-функции требуется разрешение на чтение S3.

    Самый простой способ включить это — добавить управляемую политику AWS:

    arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess
    

    на вашу роль выполнения лямбда-выражения.

    Указание региона не требуется, так как сегменты S3 имеют глобальную область действия.

  2. Shubham

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

    Инициализируйте свой клиент boto3 S3 как:

    import boto3
    
    client = boto3.client('s3', region_name='region_name where bucket is')
    

    см. здесь для полной справки о клиенте boto3: https://boto3.amazonaws.com/v1/documentation/api/latest/reference/core/session.html#boto3.session.Session.client

    ——— Отредактировано ———— вам также понадобится следующая политика, прикрепленная (или встроенная) к роли вашей лямбды:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "ExampleStmt",
          "Action": [
            "s3:GetObject"
          ],
          "Effect": "Allow",
          "Resource": [
            "arn:aws:s3:::YOUR-BUCKET-NAME/*"
          ]
        }
      ]
    }
    

    Если вам также нужно перечислить и удалить объекты, вместо этого вам необходимо иметь следующую политику, прикрепленную к роли лямбда (или встроенную в нее):

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "ExampleStmt1",
          "Action": [
            "s3:GetObject",
            "s3:DeleteObject"
          ],
          "Effect": "Allow",
          "Resource": [
            "arn:aws:s3:::YOUR-BUCKET-NAME/*"
          ]
        },
        {
          "Sid": "ExampleStmt2",
          "Action": [
            "s3:ListBucket"
          ],
          "Effect": "Allow",
          "Resource": [
            "arn:aws:s3:::YOUR-BUCKET-NAME"
          ]
        }
      ]
    }
    

    попробовал, но получил ту же ошибку! мне нужно какое-то конкретное заявление о политике? person Shubham; 12.08.2020

    Привет @shubham, Спасибо за вопрос, не могли бы вы поделиться заявлением о политике вашей лямбда-функции? Я могу указать именно то, что вам нужно. :) person Shubham; 13.08.2020

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: