概要
やりたいこと
CloudFormation StackSets を利用し、GuardDuty を全リージョンで有効化した。
StackSets は GUI コンソールから作成したため、今回は CLI から実行する。
Security Hub
題材は Security Hub とする。
Security Hub はリージョンサービスであるため、使用するリージョン毎にサービスを有効化する必要がある。
CloudFormation CLI
SecurityHub 有効化
これで有効化になる。
AWSTemplateFormatVersion: 2010-09-09
Description: Security Hub
Resources:
SecurityHub:
Type: AWS::SecurityHub::Hub
デプロイし、Security Hub が有効化されることを確認。
aws cloudformation deploy \ --stack-name securityhub-test \ --template-file securityhub.yaml
確認が終わったら無効化しておく。
aws cloudformation delete-stack \ --stack-name securityhub-test
CloudFormation CLI で StackSets 作成
StackSets を利用する前提の IAM の作成はコチラ参照。
create-stack-set で StackSet を作成し、 CloudFormation テンプレートを登録する。
aws cloudformation create-stack-set \ --stack-set-name security-hub-stackset \ --description securityhub \ --template-body file://securityhub.yaml \ --administration-role-arn arn:aws:iam::111111111111:role/AWSCloudFormationStackSetAdministrationRole \ --execution-role-name AWSCloudFormationStackSetExecutionRole
create-stack-instances で、StackSet にスタックインスタンス(ap-northeast-1 と ap-northeast-2)を追加する。
このコマンドを打った時点で CloudFormation テンプレートの処理が実行される。
aws cloudformation create-stack-instances \ --stack-set-name security-hub-stackset \ --accounts '["111111111111"]' \ --regions '["ap-northeast-1","ap-northeast-2", "ap-south-1", "ap-southeast-1", "ap-southeast-2", "ca-central-1", "eu-central-1", "eu-west-1", "eu-west-2", "eu-west-3", "sa-east-1", "us-east-1", "us-east-2", "us-west-1", "us-west-2"]' \ --operation-preferences FailureToleranceCount=0,MaxConcurrentCount=1
スタックインスタンスが登録され、ステータスが CURRENT となっていることを確認。
Security Hub を有効化したリージョンでは概要ページが表示される。
list-stack-sets でも StackSet の一覧を確認できる。
※guardduty-stackset は以前作ったもの
aws cloudformation list-stack-sets
{
"Summaries": [
{
"StackSetName": "guardduty-stackset",
"StackSetId": "guardduty-stackset:eef37e30-cd11-49da-9326-552136cee775",
"Description": "GuardDuty",
"Status": "ACTIVE",
"DriftStatus": "NOT_CHECKED"
},
{
"StackSetName": "security-hub-stackset",
"StackSetId": "securityhub-stackset:3b88fc07-03cf-4619-9acc-8f708abfb2fc",
"Description": "securityhub",
"Status": "ACTIVE",
"DriftStatus": "NOT_CHECKED"
}
]
}
StackSets の更新
CloudFormation テンプレートを更新する場合は update-stack-set コマンドを使う。
aws cloudformation update-stack-set \ --stack-set-name securityhub-stackset \ --description securityhub \ --template-body file://securityhub.yaml
スタックセット(リージョン)の追加には update-stack-instances を使う。
aws cloudformation create-stack-instances \ --stack-set-name securityhub-stackset \ --accounts '["111111111111"]' --regions '["ap-northeast-1","ap-northeast-2", "ap-south-1", "ap-southeast-1", "ap-southeast-2", "ca-central-1", "eu-central-1", "eu-west-1", "eu-west-2", "eu-west-3", "sa-east-1", "us-east-1", "us-east-2", "us-west-1", "us-west-2"]'
StackSets の削除
先にスタックインスタンスを削除しないと、 StackSet を削除できない。
スタックインスタンスの削除には delete-stack-instances を使う。
aws cloudformation delete-stack-instances \ --stack-set-name security-hub-stackset \ --accounts '["111111111111"]' \ --regions '["ap-northeast-1","ap-northeast-2", "ap-south-1", "ap-southeast-1", "ap-southeast-2", "ca-central-1", "eu-central-1", "eu-west-1", "eu-west-2", "eu-west-3", "sa-east-1", "us-east-1", "us-east-2", "us-west-1", "us-west-2"]' \ --no-retain-stacks
delete-stack-set で StackSet を削除する。
aws cloudformation delete-stack-set \ --stack-set-name security-hub-stackset
コメント