こんにちは、PS課のミネです。
IAMユーザーにリソース作成を許可したくない場合、CloudFormation用のIAMロールを作っておき、そのIAMロールをPassRoleする権限だけIAMユーザーには与えておけば、CloudFormation経由でだけリソースを作ることが可能です。
PassRoleするサービスをCloudFormationに絞る
以下のようにiam:PassedToServiceでPassRoleするサービスを絞ることが可能ですが、CloudFormationでスタックを流そうとするとエラーになります。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "iam:PassRole",
"Resource": "*",
"Condition": {
"StringEquals": {
"iam:PassedToService": "サービス名.amazonaws.com"
}
}
}
]
}
サポートに確認するとCloudFormationはiam:PassedToServiceに現時点(2018/12/19)では対応していないとのことでした。他のサービスでもiam:PassedToServiceに対応していないものがあるかは不明ですが、ひょっとするとあるかもしれません。 以下のようにポリシーを書くとCloudFormationだけに絞ることが可能です。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "iam:PassRole",
"Resource": "*",
"Condition": {
"StringEqualsIfExists": {
"iam:PassedToService": "cloudformation.amazonaws.com"
}
}
}
]
}