Назад | Перейти на главную страницу

Доступ запрещен при синхронизации между корзинами s3 в разных учетных записях AWS

Я пытаюсь настроить синхронизацию между двумя сегментами в разных учетных записях AWS.

я получил cp работаю с:

@ubuntu:~$ s3cmd cp -v s3://src/dir/ s3://dest/folder --recursive

Я пользователь, которому принадлежит /src/dir и я добавил:

{
"Version": "2012-10-17",
"Id": "Policy1477299702471",
"Statement": [
    {
        "Sid": "Stmt1477299696163",
        "Effect": "Allow",
        "Principal": {
            "AWS": "arn:aws:iam::awsid:user/name"
        },
        "Action": "s3:*",
        "Resource": "arn:aws:s3:::bucket/*"
    }
]}

К политике разрешений корзины в тестовой корзине.

Теперь я после aws sync работать, как использовать s3 cp не рекомендуется использовать с cron.

Я попытался

user@ubuntu:~$ aws s3 sync --dryrun s3://src/ s3://dest/ --region eu-central-1

но мне отказано в доступе:

фатальная ошибка: произошла ошибка (AccessDenied) при вызове операции ListObjects: доступ запрещен

Как я могу получить отказ в доступе, если это пользователь, которому принадлежит сегмент, и запустить синхронизацию?

Причина вашего ListObjects ошибка в том, что вы дали разрешение на доступ к содержание вашего ведра (arn:aws:s3:::bucket/*) но вы не дали разрешения к самому ведру (arn:aws:s3:::bucket). В ListObjects команде требуется доступ к ведру.

Чтобы проверить это, я сделал следующее:

  • Использованы два аккаунта AWS: аккаунт A, аккаунт B
  • Создано bucket-a в аккаунте A
  • Создано bucket-b в аккаунте B
  • Создан пользователь IAM user-a в учетной записи A с разрешениями на доступ bucket-a
  • Добавлена ​​политика сегмента в bucket-b:

    {
      "Id": "CopyBuckets",
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "Stmt1",
          "Action": "s3:*",
          "Effect": "Allow",
          "Resource": [
            "arn:aws:s3:::bucket-b",
            "arn:aws:s3:::bucket-b/*"
          ],
          "Principal": {
            "AWS": [
              "arn:aws:iam::<account-a-id>:user/user-a"
            ]
          }
        }
      ]
    }
    

Затем я запустил синхронизацию, используя user-a в аккаунте A:

aws s3 sync s3://bucket-a s3://bucket-b --profile user-a

Это сработало успешно.