2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Amazon Inspectorのマルチアカウント戦略を考えてみた(セキュリティ監査とログ集約の効率化)

Posted at

はじめに

こんにちは、はやぴー(@HayaP)です。

複数のAWSアカウントを運用(マルチアカウント戦略)する組織は、近年増えてきました。
しかしながら、クロスアカウントでログをどう集約したら良いか、迷う事も多いと思います。

また、マルチアカウント管理のサービスであるAWS Control Towerは非常に便利ですが、自動で集約されるログは限られています。

例えば、脆弱性検査サービスであるAmazon Inspector検出結果ログは含まれておりません。
セキュリティ対策を考えると、脆弱性状況などの結果は管理され、(セキュリティチーム等が)定期的に検査する事が望まれます。
外部サービスとの連携要件もあるでしょう。

本記事では、脆弱性検査サービスであるAmazon Inspector検出結果をSecurityHubで集約し、
その結果をログ集約バケット(S3)に集約する方法を紹介します。

対象読者

  • AWSを利用している企業や組織のクラウドエンジニア、システム管理者、セキュリティ担当者
  • 複数のAWSアカウントを運用している企業や組織のアーキテクトや運用チーム
  • Amazon InspectorやSecurityHubを利用して、セキュリティ対策を強化したい方

概要

TL;DR (忙しい人用)

  • Inspector検出結果は、SecurityHubに転送できる(To 監査アカウント)
  • SecurityHubを用いることで、全アカウントのInspector検出結果を監査アカウントに集約できる
  • Amazon Inspectorの検出結果をトリガーとするEventBridgeルールを作成できる
  • EventBridgeルールのターゲットを、Kinesis Data Firehoseに設定できる
  • Kinesis Data Firehoseの転送先は、クロスアカウントのS3バケットを設定できる(To ログ集約アカウント)

Inspector集約ブログ-Page-1.jpg

目次

  1. システム概要
    1. マルチアカウント戦略
    2. ログ集約の流れ
  2. 各アカウントでAmazon Inspectorのセットアップ
    1. Amazon Inspectorエージェントのインストール
    2. Amazon Inspectorの設定
  3. Auditアカウントで全アカウントの検出結果をSecurityHubで集約
    1. SecurityHubの有効化
  4. Kinesis Data Firehoseを使ってクロスアカウントでLogArchiveアカウントのS3に集約
    1. LogArchiveアカウントでS3バケットの作成とバケットポリシーの設定
    2. IAMロールの作成とKinesis Data Firehoseへのアタッチ
    3. Kinesis Data Firehoseの作成
    4. EventBridgeルールの作成
  5. オブジェクトの確認

詳細

前提

リソースの構築、設定にはAWS CLI(v2)を使用します。

1. システム概要

1.1. マルチアカウント戦略

AWSのベストプラクティスである、AWS Control Tower参考に
下記アカウント構成とします。

  • 管理アカウント
  • ログ集約アカウント
  • 監査アカウント

Inspector集約ブログ-ページ2.jpg

2. 各アカウントでAmazon Inspectorのセットアップ

Inspector集約ブログ-ページ3 (1).jpg

Amazon Inspectorを利用するには、下記手順を実施します。
なお今回は、EC2サーバーのみを対象としますが、AWS Lambdaなども診断可能です。
詳細は公式ドキュメントを参照してください

2.1. Amazon Inspectorエージェントのインストール

EC2サーバーに、Inspectorエージェントをインストールする必要があります。
Amazon Linux 2の場合、以下のコマンドを実行してエージェントをインストールします。

sudo yum install -y amazon-inspector

他のオペレーティングシステムに対応するコマンドは、公式ドキュメントを参照してください。

2.2. Amazon Inspectorの設定

Amazon Inspectorの設定では、アセスメントターゲットとアセスメントテンプレートを作成します。
アセスメントターゲットは検査対象のリソースを定義し、アセスメントテンプレートは検査の設定を定義します。

リソースグループの作成

リソースグループは、検査対象のリソース(この場合はEC2インスタンス)を定義するために使用されます。
リソースグループを、タグを用いてグループ化することができます。

以下のコマンドを使用して、リソースグループを作成します。

aws inspector create-resource-group --tags Key=<key>,Value=<value>

"key"と"value"には、対象のEC2インスタンスに設定されているタグのキーと値を指定します。

アセスメントターゲットの作成

以下のコマンドを使用して、アセスメントターゲットを作成します。

aws inspector create-assessment-target --assessment-target-name <target-name> --resource-group-arn <resource-group-arn>

"target-name"には、アセスメントターゲットの名前を指定します。
"resource-group-arn"には、先ほど作成したリソースグループのARNを指定します。

ルールセットの選択

Amazon Inspectorでは、検査に使用するルールセットを選択する必要があります。
以下のコマンドを実行して、利用可能なルールセットをリストします。

aws inspector list-rules-packages

後ほど使用するので、ルールセットのARNをメモしておいてください。

アセスメントテンプレートの作成

アセスメントテンプレートでは、アセスメントターゲット、ルールセット、検査の期間を指定します。
以下のコマンドを使用して、アセスメントテンプレートを作成します。

aws inspector create-assessment-template --assessment-target-arn <target-arn> --assessment-template-name <template-name> --duration-in-seconds <duration> --rules-package-arns <rules-package-arn1> <rules-package-arn2> ...

"target-arn"には、先ほど作成したアセスメントターゲットのARNを指定します。
"template-name"には、アセスメントテンプレートの名前を指定します。
"duration" には、検査の期間を秒単位で指定します(最小1800秒)。

検査期間に応じて実行されるジョブ数が増減するため、利用コストに影響します。

"rules-package-arn1" "rules-package-arn2"には、先ほどリストしたルールセットのARNを指定します。
複数のルールセットがある場合は、スペースで区切って指定します。

アセスメントが完了すると、検出結果がAmazon Inspectorで確認できます。

3. Auditアカウントで全アカウントの検出結果をSecurityHubで集約

Inspector集約ブログ-ページ4.jpg

Amazon Inspector の検出結果を Audit アカウントに集約するには、AWS Security Hub を使用することで実現できます。
以下の手順で、各アカウントのSecurityHubをAudit アカウントに集約します。

3.1 SecurityHubの有効化

AuditアカウントでSecurityHubを有効化

SecurityHubを"enable"(有効化)します。

aws securityhub enable-security-hub

個別アカウントでSecurityHubを有効化し、Auditアカウントと連携

下記を実行します。

aws securityhub enable-security-hub
aws securityhub create-members --account-details AccountId=<audit-account-id>,Email=<audit-account-email>
aws securityhub invite-members --account-ids <audit-account-id>

正常に完了すると、監査アカウントのSecurity hubに他アカウントのデータが集約されます。

4. Kinesis Data Firehoseを使ってクロスアカウントでLogArchiveアカウントのS3に集約

Inspector集約ブログ-ページ5.jpg
Kinesis Data Firehoseを用いて、AuditアカウントからLogArchiveアカウントのS3バケットに検出結果を集約する方法を説明します。

4.1. LogArchiveアカウントのS3バケット作成とバケットポリシー設定

LogArchiveアカウントでS3バケットを作成し、バケットポリシーを設定してAuditアカウントからのアクセスを許可します。
S3バケットを作成するには、以下のコマンドを実行してください。

aws s3api create-bucket --bucket <your-bucket-name> --region <your-region> --create-bucket-configuration LocationConstraint=<your-region>

次に、バケットポリシーを作成します。
jsonファイルを作成してください。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::<YourAuditAccountID>:root"
            },
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::<YourBucketName>/*"
        }
    ]
}

作成したバケットポリシーを適用します。

aws s3api put-bucket-policy --bucket <your-bucket-name> --policy file://bucket_policy.json

作成したS3のARNは、後ほど使用するので控えておいてください。

4.2. Kinesis Data FirehoseにアタッチするIAMロールの作成

以下のコマンドを実行して、Kinesis Data FirehoseにアタッチするためのIAMロールを作成します。

aws iam create-role --role-name <your-role-name> --assume-role-policy-document '{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "firehose.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}'

次に、以下のコマンドを実行して、作成したIAMロールにポリシーを追加します。
このポリシーは、Kinesis Data FirehoseがLogArchiveアカウントのS3バケットにオブジェクトをPUTする権限を与えます。

aws iam put-role-policy --role-name <your-role-name> --policy-name <your-policy-name> --policy-document '{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "s3:PutObject",
      "Resource": "arn:aws:s3:::<YourBucketName>/*"
    }
  ]
}'

作成したIAM RoleのARNは、後ほど使用するので控えておいてください。

4.3. Kinesis Data Firehoseの作成

Kinesis Data Firehoseデリバリーストリームを作成します。
以下のコマンドをAuditアカウントで実行し、DestinationBucketARNとDestinationRoleARNを
先ほど作成したものに置き換えてください。

aws firehose create-delivery-stream --delivery-stream-name inspector-results-firehose \
--s3-destination-configuration "RoleARN=<DestinationRoleARN>,BucketARN=<DestinationBucketARN>"

4.4. EventBridgeルールの作成

以下のコマンドを実行して、Amazon EventBridgeルールを作成します。
このルールは、Security Hubからのイベントをフィルタリングして、Amazon Inspectorの検出結果に基づいてアクションをトリガーします。

aws events put-rule --name <RuleName> --event-pattern '{
  "source": ["aws.securityhub"],
  "detail-type": ["Inspector Assessment Run State Change"],
   "detail" : {
      "findings" : {
        "ProductName" : ["Inspector"]
      }
   }
}'

次に、以下のコマンドを実行して、作成したルールにKinesis Data Firehoseをターゲットとして追加します。
これにより、ルールがトリガーされると、検出結果がKinesis Data Firehoseを通じてLogArchiveアカウントのS3バケットに送信されます。

aws events put-targets --rule <RuleName> --targets "Id=1,Arn=<FirehoseArn>,RoleArn=<RoleArn>"

以上で、Inspectorの検出結果がLogArchiveアカウントのS3バケットに集約されるようになります。

5. オブジェクトの確認

検出結果がLogArchiveアカウントのS3バケットに集約されていることを確認します。
以下のコマンドをLogArchiveアカウントで実行し、S3バケット内のオブジェクトを表示します。

aws s3 ls s3://<your-log-archive-bucket>/inspector-results/

まとめ

いかがでしたか?
本記事では、Amazon Inspectorのマルチアカウント戦略について解説しました。

この方法を用いることで、複数のアカウントでのAmazon Inspector検出結果を効率的に一元管理し、
セキュリティ分析や運用効率の向上に役立てることができます。是非、ご自身の環境に合わせて活用してみてください。

2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?