Есть ли способ определить, какие разрешения 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"
]
}
}