Политика 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 и роль.

  1. Получить Role ID.

    iam get-role --role-name Arsenal-role --query Role.RoleId
    AROAXXT2NJT7D3SIQN7Z6
    
  2. Попросите своих пользователей загрузить в 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
    
Другие вопросы по тегам