AWS BLEAで設定される内容を構成図を作成して細かく見てみる

# 概要
AWS BLEAのStandAlone版を適用して、どのような内容が設定されるかをまとめます。AWS BLEAをCDKで適用すると内部でCFnのスタックが作成されます。作成されるリソースを確認しながら構成図や細かい設定内容を見ていきます。

![slack.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2523652/f0c50d77-5b48-6645-baee-69f56924779b.png)

# 結論
まず構成図は下記のようになりました。
セキュリティ系のサービスのログ保存、監視、通知設定がされます。

![kousei2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2523652/ecd5771d-8096-d6ad-c07e-e4a6237389c3.png)

続いて各設定内容の詳細見ていきます。

# S3
下記が作成されます。また下記バケットに適用するバケットポリシーも作成されます。

* CloudTrail証跡用バケット
サーバアクセスログを下記のバケットに保存します。
* CloudTrail証跡用バケットのログ取得用バケット
このS3バケットには90日後Glacierに移動、2555日後削除するライフサイクルルールが設定されています。
* AWS Config用のバケット

# CloudTrail

EventBridgeで下記ルールが作成されます。セキュリティグループのインバウンドルールの追加/削除、アウトバウンドルールの追加/削除といったアクションが発生した際に通知がされるルールとなっています。

```
{
  "detail-type": ["AWS API Call via CloudTrail"],
  "source": ["aws.ec2"],
  "detail": {
    "eventSource": ["ec2.amazonaws.com"],
    "eventName": ["AuthorizeSecurityGroupIngress", "AuthorizeSecurityGroupEgress", "RevokeSecurityGroupIngress", "RevokeSecurityGroupEgress"]
  }
}
```
EventBridgeで下記ルールが作成されます。NACLの作成・削除・変更、エントリの追加・削除などのアクションが発生した際に通知がされるルールとなっています。

```
{
  "detail-type": ["AWS API Call via CloudTrail"],
  "source": ["aws.ec2"],
  "detail": {
    "eventSource": ["ec2.amazonaws.com"],
    "eventName": ["CreateNetworkAcl", "CreateNetworkAclEntry", "DeleteNetworkAcl", "DeleteNetworkAclEntry", "ReplaceNetworkAclEntry", "ReplaceNetworkAclAssociation"]
  }
}
```
EventBridgeで下記ルールが作成されます。CloudTrailのロギングの停止・削除・更新といったアクションが発生した際に通知がされるルールとなっています。

```
{
  "detail-type": ["AWS API Call via CloudTrail"],
  "detail": {
    "eventSource": ["cloudtrail.amazonaws.com"],
    "eventName": ["StopLogging", "DeleteTrail", "UpdateTrail"]
  }
}
```

続いて、CloudWatchアラームから連携されるパターンです。CloudTtrarilのログはCloudWatch Logsにも保存されていますが、いくつかのメトリクスフィルター定義されています。メトリクスフィルターでログ監視を行い、該当の項目がキーワードとして検出された場合にCloudWatchアラームで通知を行う方式です。下記定義されているメトリクスフィルターを見ていきます。

* IAMPolicyEventCount

IAMのグループ、ロール、ユーザーに関連するポリシーの作成、削除、アタッチ、デタッチといった操作が行われた際にログ監視の対象としてカウントされます。
```
{($.eventName=DeleteGroupPolicy)||($.eventName=DeleteRolePolicy)||($.eventName=DeleteUserPolicy)||($.eventName=PutGroupPolicy)||($.eventName=PutRolePolicy)||($.eventName=PutUserPolicy)||($.eventName=CreatePolicy)||($.eventName=DeletePolicy)||($.eventName=CreatePolicyVersion)||($.eventName=DeletePolicyVersion)||($.eventName=AttachRolePolicy)||($.eventName=DetachRolePolicy)||($.eventName=AttachUserPolicy)||($.eventName=DetachUserPolicy)||($.eventName=AttachGroupPolicy)||($.eventName=DetachGroupPolicy)}
```
* UnauthorizedAttemptsEventCount

AWS環境でのアクセス拒否エラーが発生した際にログ監視対象としてカウントされます。

```
{($.errorCode = "*UnauthorizedOperation" || $.errorCode = "AccessDenied*") && ($.eventName != "Decrypt" || $.userIdentity.invokedBy != "config.amazonaws.com" )}
```

* NewAccessKeyCreatedEventCount

IAMユーザのアクセスキーが作成された際にログ監視対象としてカウントされます。

```
{($.eventName=CreateAccessKey)}
```

* RootUserPolicyEventCount

Rootユーザにより操作が行われた際にログ監視対象としてカウントされます。

```
{$.userIdentity.type="Root" && $.userIdentity.invokedBy NOT EXISTS && $.eventType !="AwsServiceEvent"}
```
上記イベントの出力回数をメトリクスとしてカウントして、閾値を超えた場合にCloudWatchアラームでアラートが上がりSNSで通知が行われます。

# AWS Congfig
`AWS Configのbb-default-security-group-closed`というルールが作成されます。このルールはデフォルトセキュリティグループに1つ以上のインバウンドまたはアウトバウンドトラフィックがある場合に非準拠となります。また非準拠になった場合の修復アクションとして`AWSConfigRemediation-RemoveVPCDefaultSecurityGroupRules`が定義されます。この修復アクションでデフォルトセキュリティグループ内のインバウンドルール、アウトバウンドルールが削除されます。


```
{
  "detail-type": ["Config Rules Compliance Change"],
  "source": ["aws.config"],
  "detail": {
    "configRuleName": ["bb-default-security-group-closed"],
    "newEvaluationResult": {
      "complianceType": ["NON_COMPLIANT"]
    }
  }
}
```

通知は下記のようなにEventBridgeのルールが作成されます。

```
{
  "detail-type": ["Config Rules Compliance Change"],
  "source": ["aws.config"],
  "detail": {
    "configRuleName": ["bb-default-security-group-closed"],
    "newEvaluationResult": {
      "complianceType": ["NON_COMPLIANT"]
    }
  }
}
```


# Health Dashboard
EventBridgeで下記ルールが作成されます。全てのHealth EventがSNS経由で通知されます。

```
{
  "detail-type": ["AWS Health Event"],
  "source": ["aws.health"]
}
```

# Secutiry Hub
EventBridgeで下記が定義されています。
これはコンプライアンスステータスがFAILEDでワークフローステータスがNEWまたはNOTIFIEDかつシビリティがCRITICALかHIGHのものが通知されます。すなわち、問題が検出されたもののうち、レビューがすんでいないものとなります。（レビュー後、ワークフローステータスを抑制済みにすれば飛んできません。）

```
{
  "detail-type": ["Security Hub Findings - Imported"],
  "source": ["aws.securityhub"],
  "detail": {
    "findings": {
      "Compliance": {
        "Status": ["FAILED"]
      },
      "RecordState": ["ACTIVE"],
      "Workflow": {
        "Status": ["NEW", "NOTIFIED"]
      },
      "Severity": {
        "Label": ["CRITICAL", "HIGH"]
      }
    }
  }
}
```

# GuardDuty
GuardDutyのアラートのうちシビリティが4以上のものが通知されます。

```
{
  "detail-type": ["GuardDuty Finding"],
  "source": ["aws.guardduty"],
  "detail": {
    "severity": [4, 4, 4.1, 4.2, 4.3, 4.4, 4.5, 4.6, 4.7, 4.8, 4.9, 5, 5, 5.1, 5.2, 5.3, 5.4, 5.5, 5.6, 5.7, 5.8, 5.9, 6, 6, 6.1, 6.2, 6.3, 6.4, 6.5, 6.6, 6.7, 6.8, 6.9, 7, 7, 7.1, 7.2, 7.3, 7.4, 7.5, 7.6, 7.7, 7.8, 7.9, 8, 8, 8.1, 8.2, 8.3, 8.4, 8.5, 8.6, 8.7, 8.8, 8.9]
  }
}
```