Объекты Syn c между 2 сегментами - пользователь с доступом для чтения в Source Bucket и полным доступом в Destination Bucket - PullRequest
0 голосов
/ 26 апреля 2020

Я уже видел много ответов, в которых пользователь / роль в учетной записи (учетная запись A) с SourceBucket должны добавить политику чтения к DestinationBucket, и в то же время целевой контейнер должен добавить политику корзины пользователю / роли из учетной записи A для доступа на чтение / запись.

Но моя проблема немного другая.

У меня есть доступ к пользователю из учетной записи A, которая имеет только список и доступ для чтения к SourceBucket. У меня также есть полный доступ к учетной записи B и впоследствии DestinationBucket.

Теперь, что я могу успешно сделать, это aws s3 sync из корзины A на локальный диск, используя программный c доступ к пользователю. Затем используйте пользователя / роль из учетной записи B для синхронизации c локального диска с DestinationBucket.

Я пытаюсь найти решение, в котором я могу напрямую синхронизировать c между двумя сегментами, не синхронизируя его в центральном хранилище.

Я попытался создать роль в учетной записи B, которая имеет права на чтение и запись для DestinationBucket и пыталась с помощью учетной записи A получить эту роль, чтобы иметь доступ как к SourceBucket, так и к DestinationBucket, но у меня нет разрешения принимать на себя роль и с этой учетной записью. Пользователь

Редактировать: На основе комментариев добавляю немного больше информации, которую я уже попробовал. Надеюсь получить ответ сейчас.

Ниже приведена политика для пользователя A, чей ключ доступа и секрет у меня есть, я могу прочитать содержимое корзины источника, используя эти ключи:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "ListSourceBucket",
            "Effect": "Allow",
            "Action": [
                "s3:ListBucketMultipartUploads",
                "s3:ListBucket",
                "s3:GetBucketLocation"
            ],
            "Resource": "arn:aws:s3:::SourceBucket"
        },
        {
            "Sid": "ReadSourceBucketObjects",
            "Effect": "Allow",
            "Action": [
                "s3:GetObjectAcl",
                "s3:GetObject"
            ],
            "Resource": "arn:aws:s3:::SourceBucket/*"
        }
    ]
}

Ниже приведена политика корзины, к которой я прикрепил DestinationBucket

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "ListBucket",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::012345678910:user/userA"
            },
            "Action": [
                "s3:ListBucketMultipartUploads",
                "s3:ListBucket",
                "s3:GetBucketLocation"
            ],
            "Resource": "arn:aws:s3:::DestinationBucket"
        },
        {
            "Sid": "ReadAndPutObjects",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::012345678910:user/userA"
            },
            "Action": [
                "s3:PutObjectAcl",
                "s3:PutObjectTagging",
                "s3:PutObject",
                "s3:GetObjectAcl",
                "s3:GetObjectTagging",
                "s3:GetObject"
            ],
            "Resource": "arn:aws:s3:::DestinationBucket/*"
        }
    ]
}

Но у пользователя A нет политики чтения DestinationBucket, связанной с его политиками IAM, поэтому прямая команда aws s3 sync не работает. Когда я пытаюсь это сделать, выдается следующая ошибка:

Произошла ошибка (AccessDenied) при вызове операции ListObjectsV2: Доступ запрещен

1 Ответ

0 голосов
/ 27 апреля 2020

По сути, здесь есть три компонента, если вы хотите предоставить полный контроль над учетной записью B, а учетная запись A имеет доступ для чтения, и вы не хотите / не можете изменить явную политику IAM или принять роль.

  1. Обновите корзину s3, чтобы разрешить учетной записи A синхронизировать c объекты с учетной записью B.

    Разрешения должны совпадать с теми, которые вы уже упоминали в своем вопросе.

  2. Предоставление разрешений IAM учетной записи. Роль, позволяющая им читать объекты в учетной записи S3 и помещать объекты в учетную запись B.

    "Action": [   
            "s3:GetObjectVersion",
            "s3:GetBucketVersioning",
            "s3:ListObjectsV2",
            "s3:ListBucket"
            "s3:PutObjectAcl",
            "s3:PutObjectTagging",
            "s3:PutObject",
            "s3:GetObjectAcl",
            "s3:GetObjectTagging",
            "s3:GetObject"
            ]
    
  3. Дайте разрешения учетной записи B на полный контроль над объектами s3 во время команды syn c cli.

    aws s3 syn c. s3: // {BUCKET} --acl ведро-владелец-полный контроль

Примечание. Команда syn c должна выполняться из роли учетной записи A как у него есть разрешения на чтение в корзине Аккаунт А в корзине

...