[新機能] CloudFormationでタグベースのアクセス制御が可能になりました
こんにちは、菊池です。
本日ご紹介するアップデートはこちら。
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アカウント内で複数の環境を運用している場合や、インフラ管理者と開発者でロールを分けるといった場合に、権限分離や誤操作の抑止に使えるのではないでしょうか。