この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
CloudFormationで環境を作った後で、スタックのアップデートを禁止したいことがあります。
スタックが複数あるとアップデートの対象を間違えそうになるからです。
既存のスタックに対してスタックポリシーを適用し、アップデートから保護してみました。
全てのリソースのアップデートを禁止する
全てのリソースのアップデートを禁止するスタックポリシーを作成します。
以下の内容をファイルに保存します。
今回はDenyUpdateStackPolicy.json
として保存しました。
{
"Statement" : [
{
"Effect" : "Deny",
"Action" : "Update:*",
"Principal": "*",
"Resource" : "*"
}
]
}
DenyUpdateStackPolicy.json
をS3にアップロードします。
AWS CLIを実行し、ポリシーを適用します。
$ aws cloudformation set-stack-policy --stack-name YourStackName --stack-policy-url https://s3-ap-northeast-1.amazonaws.com/YourBucketName/DenyUpdateSt
ackPolicy.json
CloudFormationコンソールを確認します。
スタックポリシーが反映されています。
スタックをアップデートすると、イベント「UPDATE_FAILED」が発生します。
メッセージは以下の通りです。
スタックポリシーによって、アップデートが禁止されたことがわかります。
Action denied by stack policy: Statement [#1] does not allow [Update:] for resource [];
アップデートを許可する
アップデートの保護を解除します。 スタックポリシーは削除できないため、明示的に許可を与えるポリシーを記載します。
{
"Statement" : [
{
"Effect" : "Allow",
"Action" : "Update:*",
"Principal": "*",
"Resource" : "*"
}
]
}
おわりに
スタックポリシーを使って、既存のCloudFormationスタックのアップデートを禁止してみました。
リソースやConditionを指定すれば、特定のリソースのみ禁止するといったことも出来ます。