AWS STS для списка сегментов дает доступ запрещен - PullRequest
0 голосов
/ 18 февраля 2020

У меня есть корзина с пустой политикой корзины, блок publi c доступ включен (ACL и Bucket), и я пытаюсь вывести список корзин с помощью политики IAM, привязанной к пользователю с помощью STS AssumeRole, со следующей прикрепленной политикой.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "s3:GetObject",
                "s3:GetBucket*",
                "s3:ListBucket*",
                "s3:ListAllMyBuckets"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3:::my-test-bucket/*"
            ]
        }
    ]
}

Предполагаемые учетные данные роли используются во время сеанса STS в python (boto3)

s3c = boto3.client('s3',
  aws_access_key_id=credentials['AccessKeyId'],
  aws_secret_access_key=credentials['SecretAccessKey'],
  aws_session_token=credentials['SessionToken'])

s3c.list_buckets()

Я получаю это исключение:

botocore.exceptions.ClientError: An произошла ошибка (AccessDenied) при вызове операции ListBuckets: доступ запрещен

Когда я пытался использовать симулятор политики IAM, он указывает «неявно отказано». Я думаю, если мне нужно получить доступ к политике ведра для этого пользователя? Мое понимание было, если и политика IAM и Bucket, это пересечение. Если один из них отсутствует, другой имеет приоритет.

Ответы [ 2 ]

2 голосов
/ 19 февраля 2020

При вызове list_buckets() используется разрешение s3:ListAllMyBuckets.

Это разрешение не может быть ограничено указанным c сегментом. Пользователь может либо перечислить все сегментов в учетной записи, либо ни одного из них.

Вызов операций с сегментом (ListBucket, GetBucket*) требует разрешения для сама корзина.

Операции над объектами требуется разрешение для объектов (или /* после имени корзины, чтобы разрешить действия со всеми объектами).

Следовательно, вы можете измените свою политику на:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:ListAllMyBuckets",
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetBucket*"
            ],
            "Resource": "arn:aws:s3:::my-test-bucket"
        },
        {
            "Effect": "Allow",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::my-test-bucket/*"
        }
    ]
}
0 голосов
/ 19 февраля 2020

Это довольно распространенная проблема, потому что люди, как правило, упускают различие между ресурсом «корзины» и ресурсом «объекта». Ведро оканчивается именем ведра (arn:aws:s3:::my-test-bucket), тогда как объект включает в себя ведро и ключ, и часто получает звезду после начального sla sh. Поэтому просто измените вашу политику на следующую.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "s3:ListAllMyBuckets"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3:::my-test-bucket"
            ]
        },
        {
            "Action": [
                "s3:GetObject",
                "s3:GetBucket*",
                "s3:ListBucket*"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3:::my-test-bucket/*"
            ]
        }
    ]
}
...