Условие политики построения кода IAM — основной тег равен тегу ресурса

#amazon-web-services #amazon-iam

#amazon-web-services #amazon-iam

Вопрос:

Цель:

Создайте политику роли IAM, которая позволяет роли выполнять определенные действия с ресурсами aws, только если тег роли равен тегу ресурса.

Например:

Тег IAM:

foo=bar

Тег проекта создания кода:

foo=bar

Политика ролей IAM:

 {
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "codebuild:List*",
                "codebuild:DescribeTestCases",
                "codebuild:DescribeCodeCoverages",
                "codebuild:BatchGet*"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/foo": "${aws:PrincipalTag/foo}"
                }
            }
        }
    ]
}

  

Когда пользователь принимает на себя роль, ему отказывают в доступе к codebuild:ListProjects проектам on, имеющим ту же foo=bar пару ключей, что и роль, в консоли AWS и командной строке AWS.

Ошибка консоли AWS:

 User: arn:aws:sts::123456789:assumed-role/example-role/example-user is not authorized to perform: codebuild:ListProjects
  

Ошибка командной строки AWS при использовании команды: aws codebuild list-projects --profile test

 An error occurred (AccessDeniedException) when calling the ListProjects operation: User: arn:aws:sts::123456789:assumed-role/example-role/botocore-session-59458209 is not authorized to perform: codebuild:ListProjects

  

Попытки:

#1

Используйте фактическое значение пары ключей в условии политики:

 {
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "codebuild:List*",
                "codebuild:DescribeTestCases",
                "codebuild:DescribeCodeCoverages",
                "codebuild:BatchGet*"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/foo": "bar"
                }
            }
        }
    ]
}

  

Результат codebuild:ListProjects ошибки отказа в доступе на консоли aws

#2

Удалите ключевые скобки aws из aws:PrincipalTag/foo (здесь снимается с бедра)

 {
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "codebuild:List*",
                "codebuild:DescribeTestCases",
                "codebuild:DescribeCodeCoverages",
                "codebuild:BatchGet*"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/foo": "aws:PrincipalTag/foo"
                }
            }
        }
    ]
}

  

#3

Используется тип ресурса в условии тега ресурса codebuild:ResourceTag/foo

 {
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "codebuild:List*",
                "codebuild:DescribeTestCases",
                "codebuild:DescribeCodeCoverages",
                "codebuild:BatchGet*"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "codebuild:ResourceTag/foo": "${aws:PrincipalTag/foo}"
                }
            }
        }
    ]
}

  

Та же codebuild:ListProjects ошибка отказа в доступе на консоли aws

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

1. Интерфейс командной строки Aws также приводит к отказу в доступе? Или это только для консоли aws?

2. @Marcin Доступ запрещен как в консоли AWS, так и в командной строке

Ответ №1:

Из документов:

CodeBuild поддерживает авторизацию на основе тегов для действий на основе проекта

Я думаю, что действие ListProjects не основано на проекте. Это для всей сборки кода, а не для конкретного проекта.

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

1. спасибо за ссылку и четкое объяснение. Я внес изменения в политику ролей в отношении создания кода. Хотя, когда я перешел к определению инструкций AWS Athena, я снова получаю ошибки отказа в доступе (см. Раздел ОБНОВЛЕНИЯ сообщения)

2. Я понимаю вашу точку зрения. Я подумал, поскольку заголовок сообщения был «Условие политики роли IAM — основной тег равен тегу ресурса», я мог бы втиснуть Athena в описание сообщения. Я обновлю заголовок и описание сообщения, чтобы они были конкретно посвящены условиям политики CB IAM.