この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
こんにちは、菊池です。
本日ご紹介するアップデートはこちら。
CloudFormationのスタックが、タグによるアクセス制御が可能になっています。作成したスタックに対し、タグによって変更・削除の可否が設定できます。
やってみた
実現したいイメージです。
本番環境のタグ:environment:prodが付与されたスタックは開発者には操作させず、それ以外は自由に操作できるようにします。
まずは、操作を禁止するタグのついたスタックを用意します。
続いて、タグによって制限が適用されたIAMを用意します。以下のように、スタック作成を許可するためのPowerUserAccessと、タグによる操作禁止を設定したインラインポリシーを付与したIAM Roleを用意しました。
インラインポリシーの中身は以下の通りです。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Action": [
"cloudformation:DeleteStack",
"cloudformation:UpdateStack"
],
"Resource": "*",
"Condition": {
"StringEquals": {
"cloudformation:ResourceTag/environment": [
"prod"
]
}
}
}
]
}
指定のタグがある場合に、スタックの削除と更新を禁止しています。
このIAM Roleを使って、スタックを削除してみます。
はい、ちゃんとエラーが出て削除が抑止されました。
続いて、更新です。こちらも更新実行時にエラーが出ました。
また、他のタグがないスタックは問題なく削除・更新ができました。意図した通りに操作が抑止できていることがわかりました。
しかし、これだけでは権限分離という意味では問題があります。このIAM Roleですが、CloudFormationからの操作は禁止しているものの、PowerUserAccessの権限を持つため直接リソースの操作ができてしまいます。
そこで、CloudFormation実行時のリソース操作をIAM Roleを指定して行うようにしたいと思います。
参考:いつの間にかCloudFormationがIAM Roleに対応していました!
CloudFormationの実行用IAM Roleにリソース作成の権限を付与し、作業者のIAMにはCloudFormationのスタック操作のみを許可するようにします。PowerUserAccessのポリシーは外し、以下のインラインポリシーを追加します。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"cloudformation:*",
"s3:*",
"iam:ListRoles",
"iam:PassRole"
],
"Resource": [
"*"
]
}
]
}
実行用のIAM RoleにはAdministratorAccessの権限を付与しておき、スタックの更新を行います。実行時のアクセス権限を選択します。
はい、こちらもちゃんと、タグ付きのスタックは変更が拒否されました。スタック実行時に指定するIAM Roleの権限には関係なく、実行操作者のポリシーにて評価してくれるようです。
最後に
以上、タグによるCloudFormationの権限制御を紹介しました。
1つのAWSアカウント内で複数の環境を運用している場合や、インフラ管理者と開発者でロールを分けるといった場合に、権限分離や誤操作の抑止に使えるのではないでしょうか。