スタック構成後に行われた手動変更を検出する CloudFormation ドリフト検出が発表されました。
実際どういう変更を検出するのか、EC2 リソースに対していくつかパターンを試してみました。
2018年12月時点です。
新 – CloudFormation ドリフト検出 | Amazon Web Services ブログ
パターン検証用 CFn テンプレートサンプル
AWSTemplateFormatVersion: 2010-09-09
Resources:
SecurityGroup:
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: SampleSecurityGroup
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: 22
ToPort: 22
CidrIp: 0.0.0.0/0
Instance:
Type: AWS::EC2::Instance
Properties:
ImageId: ami-0a2de1c3b415889d2
InstanceType: t2.micro
SecurityGroups:
- !Ref SecurityGroup
KeyName: Keypair
Monitoring: !Ref AWS::NoValue
Tags:
- Key: Sample
Value: test tag sample
1. 設定した値の変更は検出するか?
A. 検出する (NOT_EQUAL)
期待通り設定値が同値ではない(NOT_EQUAL)となります。
t2.micro => t2.nano 変更 = 検出(NOT_EQUAL)
2. 設定していない値の変更は検出するか?
A. 検出しない
未設定のデフォルト値を変更しても検出されません。
Monitoring 未設定 => 有効化 = 検知せず
Tags: に key: Name 新規追加 = 検知せず
3. 設定したリストへの値の追加は検出するか?
A. 検出する (ADD)
設定済みのリスト値に項目を追加すると検出(ADD)となります。
SecurityGroupIngress に http:80 追加 = 検出(ADD)
4. 設定したリストへの値の削除は検出するか?
A. 検出する (REMOVE)
設定済みのリスト値の項目を削除すると検出(REMOVE)となります。
Tags: Sample 削除 = 検出(REMOVE)
5. AWS::NoValue 値の変更は検出するか?
A. 検出しない
明示的なデフォルト値の AWS::NoValue の変更は検出するかと思っていましたが、検出しませんでした。
Monitoring: !Ref AWS::NoValue => true 変更 = 検知せず
6. EC2 ステータスの変更は検出するか?
A. 検出しない
インスタンスの状態は検出対象外です。
まとめ
試した感じだとデフォルト値の変更は検知しないので、検出したい項目は明示的に値を入れるべきという感じです。