0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Amazon Inspectorで検出したソフトウェア脆弱性をAsanaに連携してみた

Posted at

やりたいこと

Amazon InspectorでSeverity(重大性)がCriticalもしくはHighのソフトウェアの脆弱性を検出した際に、Asanaにタスクを作成するパイプラインを構築する。

Amazon Inspector とは

Amazon Inspector は、Amazon EC2 インスタンス、コンテナ、Lambda 関数などのワークロードを自動的に検出し、ソフトウェアの脆弱性や意図しないネットワークの露出がないかをスキャンします。

Amazon Inspector

Asana とは

Asanaは、SaaSのプロジェクト管理ツールです。

Asana

実装方法

EventBridge API Destinationを用いて、Amazon InspectorのイベントをトリガーにAsana APIにリクエストを送信してタスクを作成する。

Asana APIの仕様に沿って整形するためにEventBridge 入力トランスフォーマーを使用します。

検証準備

  1. Asanaでプロジェクトを作成する。

    AWS Inspectorで検出した脆弱性をAsanaに連携してみる_03.png

    見やすいようにセクションとカスタムフィールドを設定しました。

  2. Asana APIで使用するトークンを発行する。

    AWS Inspectorで検出した脆弱性をAsanaに連携してみる_04.png

    トークンは発行時のみ確認できるので必ずコピーしておきます。

    Asana Developers マイアプリ

  3. Amazon Inspectorをアクティブ化する。

  4. EventBridge > 統合 > 接続 でAsana APIのトークンの情報を登録する。

    AWS Inspectorで検出した脆弱性をAsanaに連携してみる_05.png

    項目名 パラメータ値
    接続名 asana-api-connection
    APIタイプ パブリック
    認証を設定 カスタム設定
    認証タイプ APIキー
    APIキー名 / 値 Authorization / < Asana APIのトークン >
    暗号化 AWS所有キーを使用する
  5. EventBridge > 統合 > 接続 でAsana APIの情報を登録する。

    AWS Inspectorで検出した脆弱性をAsanaに連携してみる_06.png

    項目名 パラメータ値
    名前 asana-api-connection
    API送信先エンドポイント https://app.asana.com/api/1.0/*
    HTTPメソッド POST
    接続タイプ 既存の接続を使用 / asana-api-connection
  6. EventBridge > バス > ルール でルールを作成する。

    AWS Inspectorで検出した脆弱性をAsanaに連携してみる_07.png

    項目名 パラメータ値
    名前 create-asana-task-from-inspector-inspection
    イベントバス default
    ルールタイプ イベントパターンを持つルール
    イベントソース AWSイベントEventBridgeパートナーイベント
    作成のメソッド カスタムパターン(JSONエディタ)
    イベントパターン 下記参照
    ターゲットタイプ EventBridge APIの宛先
    API送信先 既存のAPI送信先の使用/asana-api-connection
    パスパラメータ tasks
    実行ロール この特定のリソースについて新しいロールを作成
    ロール名 Amazon_EventBridge_Invoke_Api_Destination_xxxxxxxx
    ターゲット入力を設定 入力トランスフォーマー
    入力トランスフォーマーを設定 > ターゲット入力トランスフォーマー > 入力パス 下記参照
    入力トランスフォーマーを設定 > ターゲット入力トランスフォーマー > テンプレート 下記参照
    • イベントパターン
    {
      "source": ["aws.inspector2"],
      "detail-type": ["Inspector2 Finding"],
      "detail": {
        "severity": ["HIGH", "CRITICAL"],
        "status": ["ACTIVE"]
      }
    }
    
    • 入力トランスフォーマーを設定 > ターゲット入力トランスフォーマー > 入力パス
    {
      "awsAccountId": "$.detail.awsAccountId",
      "description": "$.detail.description",
      "findingArn": "$.detail.findingArn",
      "firstObservedAt": "$.detail.firstObservedAt",
      "inspectorScore": "$.detail.inspectorScore",
      "vulnerabilityId": "$.detail.packageVulnerabilityDetails.vulnerabilityId",
      "instanceId": "$.detail.resources[0].id",
      "title": "$.detail.title"
    }
    
    • 入力トランスフォーマーを設定 > ターゲット入力トランスフォーマー > テンプレート
    {
      "data": {
        "name": "<title>",
        "notes": "<description>\n\nhttps://ap-northeast-1.console.aws.amazon.com/inspector/v2/home?region=ap-northeast-1#/findings/instances/<instanceId>",
        "projects": "1210218073982778",
        "custom_fields": {
          "1210218073982796": "1210218073982797",
          "1210218074125934": "<awsAccountId>",
          "1210218074125936": "<findingArn>",
          "1210218074125944": "<firstObservedAt>",
          "1210218074125946": "<inspectorScore>",
          "1210218074125948": "<vulnerabilityId>",
          "1210218074125942": "<instanceId>"
        }
      }
    }
    

    EventBridge 入力トランスフォーマーの部分はサンプルイベントを参考に必要なデータのみを抽出しました。またデバッグで出力したJSONデータをPostmanを用いてAsana APIにリクエストを送信してタスクを作成できるか確認しました。

    AWS Inspectorで検出した脆弱性をAsanaに連携してみる_09.png
    AWS Inspectorで検出した脆弱性をAsanaに連携してみる_10.png

    remediation(対策)もAsanaに連携したかったのですが、改行コードのエスケープがうまくいかず...今回は諦めました。

    プロジェクトIDはURLのproject/xxxxxxxxxxxxxxxxの16桁の数字にです。

    カスタムフィールドのGIDはAsana APIのGet a taskを用いて取得しました(GUIで確認できなさそうだったので...)。

    Asana Developers API Reference Tasks Create a tasj

検証シナリオ

EC2インスタンスでソフトウェアの脆弱性が確認されているバージョンのWiresharkをインストールし、Asanaでタスクが作成されるかを確認する。

dnf install wireshark --releasever=2023.0.20230315 -y

エージェントベースのスキャンではSSMを使用するため、EC2インスタンスにはAmazonSSMManagedInstanceCoreが含まれているIAMロールをアタッチします。

スキャン頻度を考慮し、WiresharkをインストールしてからIAMロールをアタッチしました。

AmazonSSMManagedInstanceCore

検証結果

Amazon InspectorでSeverity(重大性)がCritical/Highのソフトウェアの脆弱性を検出して、Asanaにタスクを作成されました。

AWS Inspectorで検出した脆弱性をAsanaに連携してみる_11.png
AWS Inspectorで検出した脆弱性をAsanaに連携してみる_12.png

所感

想定していたよりもシンプルな構成、かつ簡単に実装できたことに驚きました。
ただEventBridge 入力トランスフォーマーで必要なデータを抽出する部分が少しハマったので、ここら辺の知見は今後深めていきたいです。

0
1
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
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?