CloudFormation StackSets CLI で Security Hub を全リージョンで有効化する

2020年7月5日

概要

やりたいこと

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

上記のコードは、StackSets として実行する CloudFormation テンプレートになる。

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"]' --retain-stacks

delete-stack-set で StackSet を削除する。

aws cloudformation delete-stack-set --stack-set-name security-hub-stackset

参考

セルフマネージド型のアクセス許可を持つスタックセットの作成

CloudFormation StackSetsに触ったメモ

AWS Security Hub(1)Security Hubの概要