Проблема с отказом в доступе в AWS Cross Account S3 PutObject, зашифрованном с помощью AWS управляемого ключа - PullRequest
2 голосов
/ 01 августа 2020

Я пытаюсь поместить текстовый файл из Lambda, который находится в учетной записи B, в корзину S3 в учетной записи A. В корзине S3 (тестовая корзина) используется шифрование AWS -KMS с включенным управляемым ключом aws / s3. 1. Я добавил следующие разрешения в сегменте Account A- S3 (тестовый сегмент):

   ```
    {"Version": "2012-10-17",
         "Id": "ExamplePolicy",
         "Statement": [
             {
                 "Sid": "ExampleStmt",
                 "Effect": "Allow",
                 "Principal": {
                     "AWS": "arn:aws:iam::AccountB:role/Lambda-Role"
                 },
                 "Action": "s3:*",
                 "Resource": "arn:aws:s3:::test-bucket/*"
             }
         ]
        }
Добавлена ​​ниже встроенная политика к моей роли выполнения Lambda в учетной записи B:
{"Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "kms:Decrypt",
                "kms:Encrypt",
                "kms:GenerateDataKey",
                "kms:DescribeKey",
                "kms:ReEncrypt*"
            ],
            "Resource": [
                "arn:aws:kms:us-west-2:AccountA:key/AWS-KMS-ID"
            ]
        }
    ]
}

Это мой код Lambda:

    res = s3.put_object(
                    Body=message,
                    Key=file_name,
                    Bucket='test-bucket',
                    ACL='bucket-owner-full-control'
                )
    

Ошибка при запуске этого кода ниже из учетной записи B Lambda:

    An error occurred (AccessDenied) when calling the PutObject operation: Access Denied

Поскольку корзина S3 зашифрована AWS управляемым ключом, я не могу редактировать политику KMS, что мы делаем в случае ключа, управляемого клиентом.

Кто-то пожалуйста, объясни мне, что мне не хватает.

Ответы [ 2 ]

1 голос
/ 02 августа 2020

Я сам устранял это в течение нескольких часов.

Я не верю, что это возможно со стандартным «AWS Managed Key» при использовании SSE-KMS. Вместо этого вам нужно создать CMK и предоставить пользователю перекрестной учетной записи доступ к этому ключу.

HTH

1 голос
/ 01 августа 2020

Попробуйте предоставить вашей лямбда-функции разрешение s3:PutObject на действие. Таким образом, встроенная политика вашей лямбда-роли должна быть примерно такой:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "VisualEditor0",
      "Effect": "Allow",
      "Action": [
        "kms:Decrypt",
        "kms:Encrypt",
        "kms:GenerateDataKey",
        "kms:DescribeKey",
        "kms:ReEncrypt*"
      ],
      "Resource": [
        "arn:aws:kms:us-west-2:AccountA:key/AWS-KMS-ID"
      ]
    },
    {
      "Effect": "Allow",
      "Action": "s3:PutObject",
      "Resource": "arn:aws:s3:::test-bucket/*"
    }
  ]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...