Есть ли способ определить, какие разрешения IAM мне действительно нужны для шаблона CloudFormation?

Просто интересно, как лучше определить, какие разрешения я должен дать для моего шаблона CloudFormation?

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

Я предполагаю, что должен быть какой-то парсер, который с помощью шаблона CloudFormation может определить минимальный набор необходимых ему разрешений?

Может быть, я могу дать ec2:* доступ к тегированным ресурсам Cost Center: My Project Name? Это нормально? Но мне интересно, что произойдет, если я, например, поменяю название своего проекта?

Кроме того, это нормально, чтобы предположить, что это нормально, чтобы сказать ec2:* доступ, основанный на предположении, что части CloudFormation обычно выполняются только с CodeCommit/Github/CodePipeline, и это не то, что может быть общедоступным / легко взломать? --- Это звучит как некорректное заявление для меня...

0 ответов

В краткосрочной перспективе вы можете использовать aws-lessprivilege. Но он поддерживает не все типы ресурсов.

В долгосрочной перспективе: как упоминалось в этом выступлении re: Invent в 2019 году, CloudFormation работает над открытыми исходными кодами и переносом большинства своих типов ресурсов в новую схему общедоступных ресурсов. Одним из преимуществ этого является то, что вы сможете увидеть разрешения, необходимые для выполнения каждой операции.

Например, для AWS::ImageBuilder::Image в схеме указано

    "handlers": {
        "create": {
            "permissions": [
                "iam:GetRole",
                "imagebuilder:GetImageRecipe",
                "imagebuilder:GetInfrastructureConfiguration",
                "imagebuilder:GetDistributionConfiguration",
                "imagebuilder:GetImage",
                "imagebuilder:CreateImage",
                "imagebuilder:TagResource"
            ]
        },
        "read": {
            "permissions": [
                "imagebuilder:GetImage"
            ]
        },
        "delete": {
            "permissions": [
                "imagebuilder:GetImage",
                "imagebuilder:DeleteImage",
                "imagebuilder:UnTagResource"
            ]
        },
        "list": {
            "permissions": [
                "imagebuilder:ListImages"
            ]
        }
    }
Другие вопросы по тегам