CloudFormationスタックポリシーでスタック更新を防止する
CloudFormationのスタックにスタックポリシーを設定することによって、スタック更新時に特定のリソースの更新を防止できます。
- CloudFormationテンプレート
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
AWSTemplateFormatVersion: 2010-09-09 Resources: MyInstance: Type: 'AWS::EC2::Instance' Properties: ImageId: ami-0c2b8ca1dad447f8a InstanceType: t3a.nano SecurityGroups: - !Ref ServerSecurityGroup ServerSecurityGroup: Type: 'AWS::EC2::SecurityGroup' Properties: GroupDescription: Enable HTTP access via port 80 SecurityGroupIngress: - IpProtocol: tcp FromPort: '80' ToPort: '80' CidrIp: 0.0.0.0/0 |
例えば上記のようなテンプレート(バージニア北部リージョン用)でスタックを作成します。
- スタックポリシー
|
1 2 3 4 5 6 7 8 9 10 11 |
{ "Statement" : [ { "Effect" : "Allow", "Action" : "Update:*", "Principal": "*", "Resource" : "LogicalResourceId/ServerSecurityGroup" } ] } |
スタック作成時の詳細オプションでスタックポリシーを指定できます。
セキュリティグループのみを変更許可するスタックポリシーにしてスタックを作成しました。
- 更新失敗確認用CloudFormationテンプレート
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
AWSTemplateFormatVersion: 2010-09-09 Resources: MyInstance: Type: 'AWS::EC2::Instance' Properties: ImageId: ami-0c2b8ca1dad447f8a InstanceType: t3a.micro SecurityGroups: - !Ref ServerSecurityGroup ServerSecurityGroup: Type: 'AWS::EC2::SecurityGroup' Properties: GroupDescription: Enable HTTP access via port 80 SecurityGroupIngress: - IpProtocol: tcp FromPort: '80' ToPort: '80' CidrIp: 0.0.0.0/0 |
EC2のインスタンスタイプを変更してスタックの更新をしてみます。
EC2インスタンスの更新がスタックポリシーで許可されていないので、UPDATE_FAILDになりました。
スタックポリシーは明示的な許可がない場合は更新が拒否されます。
許可するリソースが多くて、拒否するリソースが限定的な場合はすべてを許可して拒否するリソースのみDenyで明示的な拒否ができます。
- 更新成功確認用CloudFormationテンプレート
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
AWSTemplateFormatVersion: 2010-09-09 Resources: MyInstance: Type: 'AWS::EC2::Instance' Properties: ImageId: ami-0c2b8ca1dad447f8a InstanceType: t3a.nano SecurityGroups: - !Ref ServerSecurityGroup ServerSecurityGroup: Type: 'AWS::EC2::SecurityGroup' Properties: GroupDescription: Enable HTTP access via port 80 SecurityGroupIngress: - IpProtocol: tcp FromPort: '443' ToPort: '443' CidrIp: 0.0.0.0/0 |
それでは、EC2インスタンスの更新は諦めて、セキュリティグループを変更してみます。
成功しました。
期待通りの動作でした。
ちなみにスタックポリシーはスタックの更新時に適用されます。
スタックに含まれるリソースを手動で更新する場合は、制御できません。
最後までお読みいただきましてありがとうございました!
「AWS認定資格試験テキスト&問題集 AWS認定ソリューションアーキテクト - プロフェッショナル 改訂第2版」という本を書きました。
「AWS認定資格試験テキスト AWS認定クラウドプラクティショナー 改訂第3版」という本を書きました。
「AWS認定資格試験テキスト AWS認定AIプラクティショナー」という本を書きました。
「AWS教科書 AWS認定デベロッパーアソシエイト テキスト&問題集 」という本を書きました。
「要点整理から攻略するAWS認定ソリューションアーキテクト-アソシエイト」という本を書きました。
「AWSではじめるLinux入門ガイド」という本を書きました。
開発ベンダー5年、ユーザ企業システム部門通算9年、ITインストラクター5年目でプロトタイプビルダーもやりだしたSoftware Engineerです。
質問はコメントかSNSなどからお気軽にどうぞ。
出来る限りなるべく答えます。
このブログの内容/発言の一切は個人の見解であり、所属する組織とは関係ありません。
このブログは経験したことなどの共有を目的としており、手順や結果などを保証するものではありません。
ご参考にされる際は、読者様自身のご判断にてご対応をお願いいたします。
また、勉強会やイベントのレポートは自分が気になったことをメモしたり、聞いて思ったことを書いていますので、登壇者の意見や発表内容ではありません。
関連記事
-
-
Amazon Connectで電話を転送する
かかってきた電話を転送するようにしました。 問い合わせフローで[終了/転送]から …
-
-
IAMアクセス許可の境界でIAMロールの権限を制御する
IAMユーザー自身の権限はIAMポリシーで制御できますが、IAMユーザーにIAM …
-
-
API GatewayをトリガーにしたときのLambdaリソースベースポリシー
先日、SwaggerからAPI Gatewayを作ったときに、API Gatew …
-
-
Rocket.ChatからOut Going Webhookを設定してみる
API GatewayとLambda とりあえず、どんなデータが飛んでくるのか見 …
-
-
API GatewayからLambdaを介さずにSNSトピックへ送信
やりたいこと APIリクエストをまずLambdaで受けて、SNSトピックへ送信す …
-
-
Kinesis Data Analyticsの検索結果をKinesis Data FirehoseからS3バケットに保存する
Kinesis Data AnalyticsをKinesis Data Stre …
-
-
EC2 Instance Connect向けのセキュリティグループのソースにプレフィックスリストを
EC2 Instance Connect、便利ですね。 キーペア不要で、EC2イ …
-
-
EC2 Image BuilderでRocket.ChatのAMIを作って起動テンプレートを更新しました
EC2 Image Builderの練習をしようと思い、Rocket.Chatの …
-
-
JAWS-UG関西「AI で人を笑わせてみよう!ハンズオン」に参加しました
AI で人を笑わせてみよう!ハンズオン 灼熱の7月最終日にJAWS-UG関西のオ …
-
-
AWS CloudHSMを起動してみました
なかなか触る機会のないサービス、CloudHSM。 起動してみました。 手順はユ …



