Как применить подстановочные знаки (?) в политике IAM в основном теге?

#amazon-web-services #amazon-iam

Вопрос:

Я пытаюсь использовать ABAC( Управление доступом на основе атрибутов) в своем приложении. В AWS объект S3 имеет тег, ключ-пользовательский:kypha, а значение — «привет». Пользовательский токен имеет тот же пользовательский атрибут:kypha, но он имеет значение «привет-привет-добро пожаловать», Теперь я хочу, чтобы значение ключа тега объекта S3 совпадало с этой парой ключ-значение атрибута пользовательского токена, потому что в его значении «привет».

Для достижения этой цели я написал политику IAM

 {
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "s3:GetObject*",
            "Resource": "arn:aws:s3:::*",
            "Condition": {
                "StringLike": {
                    "s3:ExistingObjectTag/custom:kypha": "${aws:PrincipalTag/custom:kypha}"
                }
            }
        }
    ]
}
 

и вслед за этим: https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html что говорит о подстановочном знаке

Струноподобный

Сопоставление с учетом регистра. Значения могут включать подстановочный знак для сопоставления нескольких символов (*) и подстановочный знак для сопоставления одного символа (?) в любом месте строки.

Основываясь на предложении в комментарии. Ниже приведены примеры для разъяснения, которые проясняют мои требования:

В S3 у меня есть файл pharma.csv, в котором есть тег: Ключ-пользовательский:Значение kypha-привет

Теперь пользователь (из Cognito) хочет получить доступ к этому файлу, у которого есть атрибуты в маркере — custom:kypha=’привет-привет-добро пожаловать’

Пользователь должен иметь доступ к файлу, так как в нем есть «привет» в «привет-привет-добро пожаловать». Но моя вышеприведенная политика здесь не работает. В нем говорится, что Доступ Запрещен.

Примечание: Я использую ABAC: https://www.youtube.com/watch?v=tAUmz94O2Qoamp;t=280s

Если я скажу то же самое в SQL, я хочу этого: ВЫБЕРИТЕ * ИЗ клиентов, ГДЕ имя пользователя, НАПРИМЕР » %или%»;

Комментарии:

1. Можете ли вы объяснить, что "?/${aws:PrincipalTag/custom:kypha}/?" , по-вашему, делает? Или что вы хотите, чтобы он делал?

2. Я использую это»?», чтобы посмотреть, соответствует ли значение токена значению ключа тега объекта s3 или нет. Позвольте мне отредактировать его, если это вызывает путаницу.

3. ? предназначен только для совпадения одного символа, например aabb?cc , маше aabb-cc или aabb_cc . Не очень понятно, чего вы пытаетесь достичь. Может быть, вы можете привести примеры совпадений и несоответствий?

4. @Marcin Я добавил больше информации к своему вопросу.

5. ? предназначен только для одного символа. Для чего-то похожего на SQL вам придется использовать * ,например. *hello*