Политика AWS IAM для ограничения доступа к S3 (префикс) на основе тега пользователя IAM - PullRequest
0 голосов
/ 14 февраля 2019

Различные пользователи IAM делятся доступом к корзине S3.Контейнер S3 имеет контент, разделенный пользователем, поэтому у каждого пользователя есть уникальная область, к которой он имеет доступ.

Например:

  • Контейнер S3: example-bucket.
  • Пользователь IAM: UserOne.Этот пользователь имеет тег sampleTag=u11111.
  • Пользователь IAM: UserTwo.Этот пользователь отмечен sampleTag=u22222.
  • Гораздо больше пользователей IAM с тегами.

Я хотел бы написать политику IAM, такую ​​как:

  • UserOne имеет доступ для чтения и записи содержимого в s3://example-bucket/u11111/* и чтения содержимого из s3://example-bucket/config/u11111/
  • UserTwo имеет доступ для чтения и записи содержимого в s3://example-bucket/u22222/* и чтения содержимого из s3://example-bucket/config/u22222/
  • Etc ...

Обратите внимание, что ключ S3 включает в себя значение sampleTag в пути.

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

Я ожидал, что это станет возможным благодаря ${aws:PrincipalTag/sampleTag}, который, как я думал, введет значение тега в этом местев строках ресурса.Но после игры с имитатором политик, похоже, этого не происходит.

Текущая политика выглядит так:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListAllMyBuckets"
            ],
            "Resource": "arn:aws:s3:::*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetBucketLocation"
            ],
            "Resource": [
                "arn:aws:s3:::example-bucket",
                "arn:aws:s3:::example-bucket-test"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::example-bucket",
                "arn:aws:s3:::example-bucket-test"
            ],
            "Condition": {
                "StringEquals": {
                    "s3:prefix": [
                        "",
                        "${aws:PrincipalTag/sampleTag}/"
                    ],
                    "s3:delimiter": ["/"]
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::example-bucket",
                "arn:aws:s3:::example-bucket-test"
            ],
            "Condition": {
                "StringLike": {
                    "s3:prefix": ["${aws:PrincipalTag/sampleTag}/*"]
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:GetObjectAcl",
                "s3:GetObjectVersion",
                "s3:GetObjectVersionAcl"
            ],
            "Resource": [
                "arn:aws:s3:::example-bucket/config/${aws:PrincipalTag/sampleTag}/*",
                "arn:aws:s3:::example-bucket-test/config/${aws:PrincipalTag/sampleTag}/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:GetObjectAcl",
                "s3:GetObjectVersion",
                "s3:GetObjectVersionAcl",
                "s3:DeleteObject"
            ],
            "Resource": [
                "arn:aws:s3:::example-bucket/${aws:PrincipalTag/sampleTag}/*",
                "arn:aws:s3:::example-bucket-test/${aws:PrincipalTag/sampleTag}/*"
            ]
        }
    ]
}

Я думаю, что последние две политики не работают.Я не могу найти документацию, чтобы сказать, можете ли вы встраивать переменные в строки Resource или нет, но s3:prefix, кажется, недоступен для операций GetObject или PutObject - поэтому я не уверенкак еще ограничить сферу действия этих разрешений.

Буду признателен за любые идеи относительно того, что не так или как этого добиться!

1 Ответ

0 голосов
/ 26 марта 2019

Вы правы, последние две политики не будут работать.

Согласно документации aws:PrincipalTag/tag-key работает с строковыми операторами ,следовательно, aws:PrincipalTag/tag-key использование будет работать только внутри Condition элементов политики.

Кроме того, s3:prefix ключ условия работает только для ListBucket & ListBucketVersions действий: https://docs.aws.amazon.com/IAM/latest/UserGuide/list_amazons3.html#amazons3-policy-keys

...