Можете ли вы написать политику корзины s3, которая будет запрещать доступ всем участникам, кроме конкретной роли IAM и AWS роли службы (например, billingreports.amazon aws .com ).
Я пробовал использовать ' Deny ' с ' NotPrincipal ', но ни один из приведенных ниже примеров не работает, поскольку я не думаю, что возможность иметь несколько типы принципалов поддерживаются AWS?
Это позволяет вам сохранить политику, но блокирует из корзины (предупреждение: только root пользователь может затем обновить политику для разблокировки)
"Effect": "Deny",
"NotPrincipal": {
"AWS": [
"arn:aws:iam::<account_id>:root",
"arn:aws:iam::<account_id>:role/specialBillingRole"
],
"Service": "billingreports.amazonaws.com"
}
Поэтому я пытаюсь использовать условия , но не могу найти правильные комбинации, которые будут работать. Вот пример политики.
{
"Version": "2008-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "billingreports.amazonaws.com"
},
"Action": "s3:*",
"Resource": "arn:aws:s3:::my-bucket/*"
},
{
"Sid": "",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::my-bucket/*",
"arn:aws:s3:::my-bucket"
],
"Condition": {
"StringNotLike": {
"aws:PrincipalArn": [
"arn:aws:iam::<account_id>:role/specialBillingRole",
"billingreports.amazonaws.com",
"<account_id>"
]
}
}
}
]
}
ОБНОВЛЕНО вопрос в соответствии с некоторыми предложениями комментариев.
2-е ОБНОВЛЕНИЕ Также попробовал следующее, которое по-прежнему дает доступ ко всем ролям / пользователям в учетной записи (нельзя использовать подстановочные знаки в Principal
).
{
"Effect": "Deny",
"Principal": {
"AWS": "arn:aws:iam::<account_id>:root"
},
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::my-bucket/*",
"arn:aws:s3:::my-bucket"
],
"Condition": {
"ArnNotEquals": {
"aws:PrincipalArn": [
"arn:aws:iam::<account_id>:role/specialBillingRole",
"<account_id>"
]
}
}
}