Amazon GuardDuty をStackSetsで複数リージョン有効化する手順
概要
- Amazon GuardDutyは、CloudTrail イベントログ、VPC フローログ、DNS ログなどアクティビティや通信ログを分析して、AWS環境内の脅威を検知・可視化するマネージドサービスです。セキュリティの対応では、発見的統制と呼ばれる区分のサービスになります。
- Amazon GuardDuty を有効化する際の注意事項として、GuardDuty はリージョン別のサービスであるため、リージョン毎に有効化する必要があります。今回は、CloudFormation のStackSets を使用して、複数リージョンあるいは全リージョンを有効化します。
Amazon GuardDuty を全リージョン有効化する手順(StackSets)
- Amazon GuardDuty を全リージョン有効化する手順をご紹介します。GuardDuty を有効化する際、コンソールから複数リージョンあるいは全リージョンの作業はわずらわしく感じます。その様な時は、CloudFormation のStackSets が非常に便利です。
事前にIAM ロールを作成する
- AWSコンソールから、CloudFormation を開きます。
- 画面右上の「スタックの作成」から「新しいリソースを使用 (標準)」を選択します。「テンプレートの準備完了」を選択します。
- 「テンプレートの指定」から「テンプレートファイルのアップロード」を選択、「ファイルの選択」を選択し、CFnテンプレートファイルを選択します。
- 今回は、2つのIAM ロールを作成します。以下ドキュメントに記載されているCloudFormation スタックセットのアクセス許可に必要なロールとなります。詳細は、以下ドキュメントを参照ください。
- 以下1つ目のIAM ロールのYaml になります。
- スタック名は、「AWSCloudFormationStackSetAdministrationRole」とします。
- AWSCloudFormationStackSetAdministrationRole.yml
AWSTemplateFormatVersion: 2010-09-09
Description: Configure the AWSCloudFormationStackSetAdministrationRole to enable use of AWS CloudFormation StackSets.
Resources:
AdministrationRole:
Type: AWS::IAM::Role
Properties:
RoleName: AWSCloudFormationStackSetAdministrationRole
AssumeRolePolicyDocument:
Version: 2012-10-17
Statement:
- Effect: Allow
Principal:
Service: cloudformation.amazonaws.com
Action:
- sts:AssumeRole
Path: /
Policies:
- PolicyName: AssumeRole-AWSCloudFormationStackSetExecutionRole
PolicyDocument:
Version: 2012-10-17
Statement:
- Effect: Allow
Action:
- sts:AssumeRole
Resource:
- "arn:*:iam::*:role/AWSCloudFormationStackSetExecutionRole"
- その他の設定は、特に変更しません。
- 「送信」を押し、IAM ロールのリソースが作成されたことを確認します。
- 以下2つ目のIAM ロールのYaml になります。
- スタック名は、「AWSCloudFormationStackSetExecutionRole」とします。
- AWSCloudFormationStackSetExecutionRole.yml
AWSTemplateFormatVersion: 2010-09-09
Description: Configure the AWSCloudFormationStackSetExecutionRole to enable use of your account as a target account in AWS CloudFormation StackSets.
Parameters:
AdministratorAccountId:
Type: String
Description: AWS Account Id of the administrator account (the account in which StackSets will be created).
MaxLength: 12
MinLength: 12
Resources:
ExecutionRole:
Type: AWS::IAM::Role
Properties:
RoleName: AWSCloudFormationStackSetExecutionRole
AssumeRolePolicyDocument:
Version: 2012-10-17
Statement:
- Effect: Allow
Principal:
AWS:
- !Ref AdministratorAccountId
Action:
- sts:AssumeRole
Path: /
ManagedPolicyArns:
- !Sub arn:${AWS::Partition}:iam::aws:policy/AdministratorAccess
- パラメータのAdministratorAccountId は、自分のアカウント番号を記載します。
- その他の設定は、特に変更しません。
- 「送信」を押し、IAM ロールのリソースが作成されたことを確認します。
- IAM から2つのIAM ロールが作成されたことを確認します。
StackSet を作成する
- 左ペインから「StackSets」を選択します。
- 「StackSet の作成」を押します。
- アクセス許可に先ほど作成したIAM ロールを選択します。
- IAM 管理ロール: AWSCloudFormationStackSetAdministrationRole
- IAM 実行ロール: AWSCloudFormationStackSetExecutionRole
- 「テンプレートの準備完了」を選択します。
- 「テンプレートの指定」から「テンプレートファイルのアップロード」を選択、「ファイルの選択」を選択し、CFnテンプレートファイルを選択します。
- 以下の GuardDuty 有効化のYaml を選択します。
- スタック名は、「SetUpGuardDuty」とします。
- SetupGuardDuty.yml
AWSTemplateFormatVersion: 2010-09-09
Description: GuardDuty
Resources:
GuardDuty:
Type: AWS::GuardDuty::Detector
Properties:
Enable: true
- アカウントの アカウント番号にデプロイするアカウント番号を指定します。
- リージョンの指定にて、「すべてのリージョンを追加」を押下します。
- その他の設定は、特に変更しません。「送信」を押します。
- CREATE のオペレーションを選択し、スタックインスタンスに記載の全リージョンでステータスが「SUCCEEDED」に変わったことを確認します。
- 最後に、GuardDuty のサービスに移動し、有効化されたことを確認します。