Amazon GuardDuty をStackSetsで複数リージョン有効化する手順

AWS,AWS-Security,CloudFormation,GuardDuty

概要

  • 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 のサービスに移動し、有効化されたことを確認します。