Как написать политику 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 человека, которые разделяют ключ, но замки ведут себя по-разному в зависимости от того, кто держит ключ. Гораздо более логичное решение - дать каждому человеку свой ключ.