Я пишу политику IAM для моих работников в Kubernetes. Я хочу, чтобы у них был доступ на чтение / запись к определенному сегменту S3, нет доступа к другим сегментам S3 в моей учетной записи , но доступ на чтение к любому сегменту , который является общедоступным для чтения (например, блок s3://1000genomes/
и другие сегменты, в которых Amazon или другие люди разместили общедоступные данные).
(Предоставлен или запрещен доступ к общедоступным сегментам вмоя учетная запись не имеет значения. Если мне нужно предоставить доступ к одному, я могу сделать это явно. Но я не могу предоставить доступ к каждому общедоступному ведру в мире явно.)
Я могу написать строфуэто выглядит так, чтобы дать доступ на чтение всем контейнерам в мире:
{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::*",
"arn:aws:s3:::*/*"
]
}
Я также могу написать тот, который предоставляет доступ к конкретному именованному сегменту в моей учетной записи, к которому я хочу предоставить доступ, заполняяимя для *
.
Но как мне написать политику, которая запрещает доступ к корзинам в моей учетной записи, которые не являются именованными корзинами? Или, если я выберу другой подход, как написать грант для всех групп, не входящих в мой аккаунт? Есть ли что-то, что я могу поставить между этими дополнительными двоеточиями, которые это сделают? Я пытался использовать Resource
и NotResource
вместе, но AWS отклоняет это.
Для справки моя политика выглядит следующим образом:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetBucketLocation",
"s3:ListAllMyBuckets"
],
"Resource": "arn:aws:s3:::*"
},
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::vg-k8s",
"arn:aws:s3:::vg-k8s/*",
]
}
]
}
С этой политикой на моемгруппа узлов, у меня нет доступа к s3://1000genomes
с узлов. Чтобы получить доступ к этому сегменту конкретно, я могу изменить его на:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetBucketLocation",
"s3:ListAllMyBuckets"
],
"Resource": "arn:aws:s3:::*"
},
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::vg-k8s",
"arn:aws:s3:::vg-k8s/*",
]
},
{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::1000genomes",
"arn:aws:s3:::1000genomes/*"
]
}
]
}
Но мне нужен способ сделать это, чтобы я охватил все публичные сегменты, не только те, которые я перечисляю, но я незакрывать непубличную корзину в моем аккаунте.