Политика AWS IAM: ограничить доступ к корзине / папке пользователем / ролью?
Я пытаюсь ограничить пользователей по ролям для доступа только к определенным папкам в корзине S3. Контейнер настроен как "монтируемый", так что мы можем использовать его для обмена файлами, как если бы это был более традиционный сервер. Каждый пользователь использует CloudBerry для удаленного доступа к S3.
Вот моя текущая (неработающая) политика, и название группы "bluebolt".
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowUserToSeeBucketListInTheConsole",
"Effect": "Allow",
"Action": [
"s3:GetBucketLocation",
"s3:ListAllMyBuckets"
],
"Resource": [
"arn:aws:s3:::*"
]
},
{
"Sid": "AllowRootAndHomeListingOfCompanySharedAndPAndP",
"Effect": "Allow",
"Action": [
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::bluebolt"
],
"Condition": {
"StringEquals": {
"s3:prefix": [
"",
"Production and Processing/",
"Production and Processing/${aws:username}",
"Company Shared/"
],
"s3:delimiter": [
"/"
]
}
}
},
{
"Sid": "AllowListingOfCompanyShared",
"Effect": "Allow",
"Action": [
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::bluebolt"
],
"Condition": {
"StringLike": {
"s3:prefix": [
"Company Shared/*"
]
}
}
},
{
"Sid": "AllowListingOfUserFolder",
"Effect": "Allow",
"Action": [
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::bluebolt"
],
"Condition": {
"StringLike": {
"s3:prefix": [
"Production and Processing/${aws:username}/",
"Production and Processing/${aws:username}/*"
]
}
}
},
{
"Sid": "AllowAllS3ActionsCompanyShared",
"Effect": "Allow",
"Action": [
"s3:*"
],
"Resource": [
"arn:aws:s3:::bluebolt/Company Shared/*"
]
},
{
"Sid": "AllowAllS3ActionsInUserFolder",
"Effect": "Allow",
"Action": [
"s3:*"
],
"Resource": [
"arn:aws:s3:::bluebolt/Production and Processing/${aws:username}/*"
]
},
{
"Sid": "DenyAllS3ActionsInManagement",
"Effect": "Deny",
"Action": [
"s3:*"
],
"Resource": [
"arn:aws:s3:::bluebolt/Management/*"
]
}
]
}
Итак, я хочу ограничить пользователей перечислением / чтением / записью только того, что находится в "/ Производство и обработка / [Имя пользователя]", наряду с возможностью перечислять / читать все в "/ Company Shared", в то же время специально запрещая весь доступ к "/ Management", а также все в "/ Production and Processing / *", кроме их пользовательской папки. В идеале пользователь должен видеть только "/ Company Shared" и "/ Production and Processing" в bluebolt, и как только он попадет в "/ Production and Processing", он увидит только свою папку с именем пользователя, которая является его рабочей областью.
Прямо сейчас я получаю спорадический доступ пользователей ("У вас нет разрешения на доступ"), когда они копают ниже уровня верхнего уровня bluebolt.
Я не знаю, является ли этот вариант использования распространенным или я пытаюсь втиснуть слишком квадратный колышек в круглую дыру, но любые отзывы / советы / аналогичные приложения политики / жесткая критика приветствуются и высоко ценятся!
2 ответа
Вот код, который я получил на работу.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowListingOfUserFolder",
"Action": [
"s3:ListBucket"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::bluebolt"
],
"Condition": {
"StringLike": {
"s3:prefix": [
"*",
"bluebolt/Company Shared/*",
"bluebolt/Production and Processing/*",
"bluebolt/Production and Processing/${aws:userName}/*"
]
}
}
},
{
"Sid": "AllowAllS3ActionsInUserFolder",
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:GetObjectVersion",
"s3:DeleteObject"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::bluebolt/Production and Processing/${aws:userName}/*"
]
},
{
"Sid": "AllowCertainS3ActionsInCompanyShared",
"Action": [
"s3:GetObject",
"s3:GetObjectVersion"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::bluebolt/Company Shared/*"
]
}
]
}
Переменные политики IAM с федеративными пользователями
Переменная политики ${aws:userName} не будет работать для ролей. Используйте переменную политики ${aws:userID} вместо переменной политики ${aws:userName}.
Переменная $ {aws: userid} будет иметь значение "ROLEID: имя-указанного вызывающего абонента".
Я использовал ту же политику с aws:userid
и роль.
Получить Role ID.
iam get-role --role-name Arsenal-role --query Role.RoleId AROAXXT2NJT7D3SIQN7Z6
Попросите своих пользователей загрузить в
Bucket/Prefix/<RoleID:SessionName>/
aws s3 cp test.txt 's3://mydemo/Production and Processing/AROAXXT2NJT7D3SIQN7Z6:john/' --profile s3role upload: ./test.txt to s3://mydemo/Production and Processing/AROAXX2NJT7D3SIQN7Z6:john/test.txt aws s3 cp test.txt 's3://mydemo/Management/' --profile s3role upload failed: ./test.txt to s3://mydemo/Management/test.txt An error occurred (AccessDenied) when calling the PutObject operation: Access Denied aws s3 cp test.txt 's3://mydemo/Production and Processing/' --profile s3role upload failed: ./test.txt to s3://mydemo/Production and Processing An error occurred (AccessDenied) when calling the PutObject operation: Access Denied