Политика AWS IAM для ограничения доступа к веткам CodeCommit с подстановочными знаками в их именах - PullRequest
0 голосов
/ 08 июня 2018

Amazon теперь поддерживает возможность ограничивать доступ к репозиторию CodeCommit для филиалов с помощью политик IAM.
Я успешно отказал в доступе к определенным ветвям с помощью приведенной ниже формы политики, но не могу найти способзапретить доступ ко всем веткам, начинающимся с определенного имени.Т.е.: master и development - это конкретные ветки, но у меня есть release-1, release-2 и т. Д., Которые я также хочу отрицать.То, что я хочу, это возможность использовать подстановочный знак.Я пробовал выпускать *, но это не сработало.Являются ли они форматом для подстановочных знаков в "codecommit: References"?

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Deny",
            "Action": [
                "codecommit:GitPush",
                "codecommit:DeleteBranch",
                "codecommit:PutFile",
                "codecommit:MergePullRequestByFastForward"
            ],
            "Resource": "arn:aws:codecommit:us-east-2:80398EXAMPLE:MyDemoRepo",
            "Condition": {
                "StringEqualsIfExists": {
                    "codecommit:References": [
                        "refs/heads/master",
                        "refs/heads/develop",
                        "refs/heads/release-[now what]"
                    ]
                },
            "Null": {
                "codecommit:References": false
                }
            }
        }
    ]
}

1 Ответ

0 голосов
/ 08 июня 2018

Это политика IAM, которая предполагает поддержку всех условных операторов, перечисленных здесь: https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html.Но поскольку само действие GitPush включает в себя два отдельных действия за сценой, для достижения ожидаемого поведения следует использовать семейство условных операторов ..IfExists.При этом для использования подстановочного знака в этом случае следует использовать «StringLikeIfExists».Ваша политика может выглядеть следующим образом:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": [ "codecommit:GitPush" ], "Resource": "arn:aws:codecommit:us-east-2:80398EXAMPLE:MyDemoRepo", "Condition": { "StringLikeIfExists": { "codecommit:References": [ "refs/heads/release-*" ] }, "Null": { "codecommit:References": false } } }, { "Effect": "Deny", "Action": [ "codecommit:GitPush", "codecommit:DeleteBranch", "codecommit:PutFile", "codecommit:MergePullRequestByFastForward" ], "Resource": "arn:aws:codecommit:us-east-2:80398EXAMPLE:MyDemoRepo", "Condition": { "StringEqualsIfExists": { "codecommit:References": [ "refs/heads/master", "refs/heads/prod" ] }, "Null": { "codecommit:References": false } } } ] }

Таким образом, должны поддерживаться как сопоставление с подстановочными знаками, так и точное сопоставление.

...