クラウドコンピューティングは柔軟性や拡張性など多くのメリットをがあります。また一方で、設定ミスや悪意のあるアクターによる潜在的なセキュリティ問題にも対処しなければなりません。Amazon Web Services(AWS)を利用している場合、Amazon GuardDutyはこれらの問題に対処するのに役立ちます。この記事では、GuardDutyをAWS CloudTrailやNew Relic Oneと組み合わせて、クラウドサービスの脅威を監視する方法をご紹介します。

Amazon GuardDutyは、AWSアカウント、ワークロード、データを保護する脅威検知サービスで、CloudTrailは、AWSインフラ全体のアクティビティを監視し、ログを記録することができるサービスです。

それらのツールをNew Relicのオブザーバビリティ・プラットフォームと統合することで、以下のことが可能になります:

  • AWSのセキュリティおよびコンプライアンスイベントを、メトリクス、イベント、ログ、トレースなど、他のテレメトリデータと関連付け
  • それらのイベントをNew Relic Oneのダッシュボードやプログラム可能なアプリで可視化し、レポートや表示への利用
  • 迅速なセキュリティイベントの解決のための、チームへの警告
  • GuardDutyの調査結果に関連するデータを、AWSが提供するクオータを超えてNew Relicに保持

次の画像は、GuardDuty の報告されたセキュリティ問題を New Relic ダッシュボードで可視化したものです。

Dashboard shows visualization of GuardDuty security issues in New Relic One.

AWS GuardDutyの設定

New Relic Logsを使ったAWS GuardDutyをセットアップするには、まず、GuardDutyからイベントを受信するためにAmazon EventBridgeを設定します。次にEventBridgeからイベントを受信してNew Relic LogsにストリーミングするためにAmazon Kinesis Firehoseの配信ストリームを設定する必要があります。そのアーキテクチャを次の図に示します。

Boxes show that information flows from GuardDuty to EventBridge to Kinesis to New Relic Logs.

EventBridgeとKinesis Firehoseの配信ストリームを介して、GuardDutyからアラートを送信する準備をする時が来ました。手順は次のとおりです:

  1. AWSからNew Relicにログを送るために、Kinesis Firehoseの配信ストリームを作成します。
  2. 監視対象のAWSアカウントのGuardDutyを有効にします
  3. EventBridgeでルールを作成します。次の画像で示すように、各設定項目を以下のように設定してください。
設定項目名 設定値
設定項目名Event matching pattern 設定値Pre-defined pattern by service
設定項目名Service provider 設定値AWS
設定項目名Service name 設定値GuardDuty
設定項目名Event type 設定値All Events

 

The Define pattern screen with configuration included.

 

  1. Select targetsの項目では、Firehose delivery streamを選択し、ステップ1で作成したFirehoseの配信ストリームを選択してください。

 

Select targets screen.

 

  1. New Relic Oneで、Query your dataボタンをクリックし、以下のNRQLクエリを入力します。

    FROM Log SELECT * WHERE detail.service.serviceName = 'guardduty'

    データが表示されない場合は、GuardDuty コンソールで GuardDuty がすでに何かの発見を報告しているかどうかを確認します。各発見事項は、New Relic One の1つのログエントリになります。

CloudTrailの設定

New Relic One は、API ポーリングを使用してイベントを取り込む CloudTrail の統合を提供しています。このガイドを参考に、APIポーリング方式でAWSアカウントとNew Relic Oneを接続し、New Relic OneアカウントでCloudTrailイベントの取り込みを開始してください。

すでにCloudWatch Metric Streamsを使用してAmazon CloudWatchからメトリックデータを受信している場合でも、CloudTrailイベントを受信するためのAPIポーリング統合を設定する必要があります(これらはメトリックではなくイベントなので)。また、APIポーリング・インテグレーションを作成する際には、メトリクスの重複を防ぐためにCloudTrailのチェックボックスのみをチェックするようにしてください。

Check CloudTrail when selecting which AWS services to monitor.

ダッシュボード・ビジュアライゼーションの追加

これらの調査結果をレポートするためには、QuickstartsダッシュボードライブラリからAWS Security & Complianceをインストールする必要があります。

New Relic Oneで、トップナビゲーションメニューのAppsの右にある虫眼鏡を選択し、Quickstartsを検索します。Quickstarts を使用したことがない場合は、Quickstarts を有効にするためのオプションが表示されます。

Search for and select quickstarts.

 

  1. AWS Securityを検索してダッシュボードにインポートしてください。

 

続いて、セットアップ手順を完了した後の、この統合の使用例を紹介します。

SSHブルートフォースアタック

FROM Log SELECT * WHERE detail.type = 'UnauthorizedAccess:EC2/SSHBruteForce' SINCE 7 days ago

GuardDutyは、SSHブルートフォースアタックを検出します。ブルートフォースアタックは、攻撃者が潜在的なパスワードの辞書を使用してパスワードを推測し、SSH経由でAmazon EC2インスタンスへのアクセスを試みるものです。

Examples of GuardDuty detecting brute force attacks.

このような攻撃を軽減する方法のひとつとして、鍵ベースのSSH認証を設定するか、Bastionホストなどの既知のIPアドレスからのSSH接続のみを許可するセキュリティグループを使用することが挙げられます。

S3バケットに許可された公開または匿名アクセス

FROM Log SELECT * WHERE detail.type = 'Policy:S3/BucketAnonymousAccessGranted' SINCE 7 days ago

一般に公開されているS3バケットは、多くの有名なデータ漏洩やセキュリティインシデントの原因となっています。攻撃者は、安全でないS3バケットに保存された機密データにアクセスできる可能性があります。GuardDutyは、S3バケットの設定の変更を検知し、問題を引き起こす可能性のある設定ミスをハイライトします。

GuardDutyの調査結果に基づく警告

NRQL アラートを使用すると、GuardDuty がこれらの調査結果のいずれかを表面化したときに通知を受け取ることができます。上記の例を参考に、アラートに使用するクエリを以下に示します。

S3バケットに許可された公開または匿名アクセス

FROM Log SELECT count(*) WHERE detail.type = 'Policy:S3/BucketAnonymousAccessGranted'

SSHブルートフォースアタック

FROM Log SELECT count(*) WHERE detail.type = 'UnauthorizedAccess:EC2/SSHBruteForce'

次の図に示すように、GuardDuty がセキュリティイベントを検出するたびに通知されるように、静的な閾値を 1 に設定します。

Set condition threshold for above 1 at least once in 2 minutes.

結論

AWSのセキュリティおよびコンプライアンスイベントをNew Relic Oneアカウントに統合すると、AWS環境のセキュリティ問題を可視化することができます。また、適切なチームメンバーにアラートを通知し、その他のlogsやmetricsなどのテレメトリーデータとイベントを相関させることで、修正を加速させることができます。