Как написать политику AWS, которая может быть принята другими учетными записями, но дает разные разрешения в зависимости от того, какая учетная запись принимает на себя роль?

У меня есть 2 аккаунта AWS с ID 111111 и 222222, и я пытаюсь выполнить следующие действия

  • Обе учетные записи должны получать доступ к AWS, принимая на себя одинаковую роль
  • Предполагаемая роль дает каждому доступ для чтения / записи корзины s3 на счете 111111.
  • Аккаунт 111111 можно написать где угодно, но /production/*
  • Аккаунт 222222 может писать только на /production/*

Я создал ведро S3 под названием myBucket на счете 111111 и установите в нем следующую политику

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "",
            "Effect": "Deny",
            "NotPrincipal": {
                "AWS": "arn:aws:iam::222222:root"
            },
            "Action": [
                "s3:PutObject",
                "s3:GetObjectVersion",
                "s3:GetObject",
                "s3:DeleteObject"
            ],
            "Resource": "arn:aws:s3:::myBucket/production/*"
        },
        {
            "Sid": "",
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::111111:root",
                    "arn:aws:iam::222222:root"
                ]
            },
            "Action": [
                "s3:ListBucket",
                "s3:GetBucketLocation"
            ],
            "Resource": "arn:aws:s3:::myBucket"
        }
    ]
}

Затем я создаю пользователя для учетной записи 111111 со следующей политикой IAM.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "",
            "Effect": "Allow",
            "Action": [
                "s3:RestoreObject",
                "s3:PutObjectAcl",
                "s3:PutObject",
                "s3:GetObject",
                "s3:DeleteObject"
            ],
            "Resource": "arn:aws:s3:::myBucket/*"
        },
        {
            "Sid": "",
            "Effect": "Allow",
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::myBucket"
        }
    ]
}

Выше должно быть достаточно для счета 111111, чтобы взять на себя роль и быть в состоянии написать /myBucket/* Кроме /myBucket/production/* и это работает нормально.

Проблема становится, когда учетная запись 222222 берет на себя роль. Он может сделать то же самое, что и учетная запись 111111 (Написать /myBucket/* Кроме /myBucket/production/*) что не является намерением.

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

Как определить исходную учетную запись в подобном случае, чтобы я мог устанавливать политики для учетной записи 222222, даже если она взяла на себя роль в учетной записи 111111?

1 ответ

Да, когда роль принята, кто или что предполагает эту роль, не имеет значения. Все дальнейшие аутентификации основаны на роли, а роль - на счете 1111111.

Я чувствую проблему XY здесь. Ваши требования кажутся странными. Почему вы хотите, чтобы обе учетные записи взяли на себя роль. Это все равно, что сказать, что вы хотите, чтобы у 2 человек было 2 человека, которые разделяют ключ, но замки ведут себя по-разному в зависимости от того, кто держит ключ. Гораздо более логичное решение - дать каждому человеку свой ключ.

Другие вопросы по тегам