Jira ソフトウェア AWS Security Hub との双方向統合 - AWS 規範ガイダンス

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Jira ソフトウェア AWS Security Hub との双方向統合

Joaquin Rinaudo、Amazon Web Services

概要

このソリューションは、 AWS Security Hub と Jira の双方向統合をサポートしています。このソリューションを使用すると、Security Hub の検出結果から Jira チケットを自動的に手動で作成および更新できます。セキュリティチームはこのインテグレーションを使用して、対処が必要な重大なセキュリティ検出結果を開発チームに通知できます。

このソリューションは次のことに役立ちます。

  • Jira でチケットを自動的に作成または更新する Security Hub コントロールを選択します。

  • Security Hub コンソールで、Security Hub カスタムアクションを使用して Jira のチケットを手動でエスカレーションします。

  • で定義されている AWS アカウント タグに基づいて、Jira でチケットを自動的に割り当てます AWS Organizations。このタグが定義されていない場合、既定の担当者が使用されます。

  • Jira で誤検出または許容リスクとしてマークされた Security Hub の検出結果を自動的に非表示にします。

  • 関連する検出結果がSecurity Hub にアーカイブされると、Jira チケットを自動的に閉じます。

  • Security Hub 検出結果が再発したら、Jira チケットを再度開きます。

Jira ワークフロー

このソリューションでは、開発者がリスクを管理および文書化できるカスタム Jira ワークフローを使用しています。課題がワークフロー内を移動するにつれて、双方向統合により、Jira チケットと Security Hub の検出結果のステータスが両方のサービスのワークフロー間で確実に同期されます。このワークフローは、Dinis Cruz による SecDevOps Risk Workflow の派生であり、Apache License バージョン 2.0 でライセンスされています。セキュリティチームのメンバーだけがチケットのステータスを変更できるように、Jira ワークフロー条件を追加することをお勧めします。

Jira 課題のワークフロー図。問題を解決したり、リスクを受け入れることも、誤検出としてマークすることもできます。

このソリューションによって自動的に生成される Jira チケットの例については、このパターンの「追加情報」セクションを参照してください。

前提条件と制限

前提条件

  • このソリューションをマルチアカウント AWS 環境にデプロイする場合:

    • マルチアカウント環境はアクティブで、 によって管理されます AWS Organizations。

    • Security Hub は で有効になっています AWS アカウント。

    • で AWS Organizations、Security Hub 管理者アカウントを指定しました。

    • AWS Organizations 管理アカウントへのアクセスAWSOrganizationsReadOnlyAccess許可を持つクロスアカウント AWS Identity and Access Management (IAM) ロールがある。

    • (オプション) に AWS アカウント をタグ付けしましたSecurityContactID。このタグは、Jira チケットを定義済みのセキュリティ連絡先に割り当てるために使用されます。

  • このソリューションを 1 つの 内にデプロイする場合 AWS アカウント:

    • アクティブな AWS アカウントがあります。

    • Security Hub は で有効になっています AWS アカウント。

  • Jira データセンターインスタンス

    重要

    このソリューションは、Jira Cloud の使用をサポートしています。ただし、Jira Cloud は XML ワークフローのインポートをサポートしていないため、Jira でワークフローを手動で再作成する必要があります。移行とステータスは、GitHub リポジトリにあります。

  • Jira の管理者権限

  • 次の Jira トークンのいずれか:

    • Jira エンタープライズの場合は、個人アクセストークン (PAT) です。詳細については、「個人アクセストークンの使用」 (アトラシアンサポート) を参照してください。

    • Jira クラウドの場合は Jira API トークンです。詳細については、「API トークンの管理」 (Atlassian サポート) を参照してください。

アーキテクチャ

このセクションでは、開発者とセキュリティエンジニアがリスクを受け入れるか、問題を解決するかを決定したときなど、さまざまなシナリオにおけるソリューションのアーキテクチャを示しています。

シナリオ 1: 開発者が問題に対処する

  1. Security Hub は、 AWS Foundational Security Best Practices 標準のものなど、指定されたセキュリティコントロールに対して検出結果を生成します。

  2. 検出結果とアクションに関連付けられた Amazon CloudWatch イベントが AWS Lambda 関数CreateJIRAを開始します。

  3. Lambda 関数は、GeneratorId 設定ファイルと結果のフィールドを使用して、検出結果をエスカレートする必要があるかどうかを評価します。

  4. Lambda 関数は、結果をエスカレーションする必要があると判断し、 AWS 管理SecurityContactIDアカウントの AWS Organizations からアカウントタグを取得します。この ID は開発者に関連付けられ、Jira チケットの担当者 ID として使用されます。

  5. Lambda 関数は、 に保存されている認証情報 AWS Secrets Manager を使用して Jira でチケットを作成します。Jira は開発者に通知します。

  6. 開発者は基礎となるセキュリティ検出結果に対処し、Jira ではチケットのステータスを TEST FIX に変更します。

  7. Security Hub は検出結果を ARCHIVED として更新し、新しいイベントが生成されます。このイベントにより、Lambda 関数は Jira チケットを自動的に閉じます。

開発者が課題を修正したときの Jira と Security Hub の統合を示すアーキテクチャ図。

シナリオ 2: 開発者がリスクを受け入れることを決定

  1. Security Hub は、 AWS Foundational Security Best Practices 標準のものなど、指定されたセキュリティコントロールに対して検出結果を生成します。

  2. 検出結果と CreateJIRA アクションに関連付けられた CloudWatch イベントは、Lambda 関数を開始します。

  3. Lambda 関数は、GeneratorId 設定ファイルと結果のフィールドを使用して、検出結果をエスカレートする必要があるかどうかを評価します。

  4. Lambda 関数は、結果をエスカレーションする必要があると判断し、 AWS 管理SecurityContactIDアカウントの AWS Organizations からアカウントタグを取得します。この ID は開発者に関連付けられ、Jira チケットの担当者 ID として使用されます。

  5. Lambda 関数は、Secrets Manager に保存されている認証情報を使用して Jira にチケットを作成します。Jira は開発者に通知します。

  6. 開発者はリスクを受け入れることを決定し、Jira ではチケットのステータスを AWAITING RISK ACCEPTANCE に変更します。

  7. セキュリティエンジニアはリクエストを検討し、ビジネス上の正当性が適切であると判断します。セキュリティエンジニアは Jira チケットのステータスを ACCEPTED RISK に変更します。これにより Jira チケットは終了します。

  8. CloudWatch の日次イベントは、閉じた Jira チケットを識別し、関連する Security Hub の検出結果を として更新する更新 Lambda 関数を開始しますSUPPRESSED

アーキテクチャ図表では、開発者が検出結果のリスクを受け入れる場合、 Jira と セキュリティハブを表示します。

ツール

AWS のサービス

  • AWS CloudFormation は、 AWS リソースをセットアップし、迅速かつ一貫してプロビジョニングし、 AWS アカウント および リージョン全体のライフサイクルを通じてリソースを管理するのに役立ちます。

  • Amazon CloudWatch Events は、ルールを使用してイベントを照合し、関数またはストリームにルーティングすることで、 AWS リソースのシステムイベントをモニタリングするのに役立ちます。

  • AWS Lambda は、サーバーのプロビジョニングや管理を行うことなくコードを実行できるコンピューティングサービスです。必要に応じてコードを実行し、自動的にスケーリングするため、課金は実際に使用したコンピューティング時間に対してのみ発生します。

  • AWS Organizations は、作成して一元管理する AWS アカウント 組織に複数の を統合するのに役立つアカウント管理サービスです。

  • AWS Secrets Manager を使用すると、コード内のハードコードされた認証情報 (パスワードを含む) を Secrets Manager への API コールで置き換えて、プログラムでシークレットを取得することができます。

  • AWS Security Hub は、 のセキュリティ状態の包括的なビューを提供します AWS。また、セキュリティ業界標準とベストプラクティスに照らして AWS 環境を確認するのにも役立ちます。

コードリポジトリ

このパターンのコードは、GitHub 内の「aws-securityhub-jira-ソフトウェア統合」リポジトリで利用できます。このソリューションのサンプルコードと Jira ワークフローが含まれています。

エピック

タスク説明必要なスキル

ワークフローをインポートします。

Jira の管理者として、issue-workflow.xmlファイルを Jira データセンターインスタンスにインポートします。Jira Cloud を使用する場合は、 ファイルassets/jira-cloud-transitions.pngassets/jira-cloud-status.png ファイルに従ってワークフローを作成する必要があります。

ファイルは、GitHub の aws-securityhub-jira-software-integration リポジトリにあります。手順については、「XML を使用したワークフローの作成」 (Jira ドキュメント) を参照してください。

Jira 管理者

ワークフローを有効化して割り当てます。

ワークフローは、ワークフロースキームに割り当てるまで非アクティブです。次に、そのワークフロースキームをプロジェクトに割り当てます。

  1. プロジェクトについて、そのプロジェクト用の課題タイプスキームを特定したことを確認します。新しい課題タイプを作成することも、既存の課題タイプ (Bug など) から選択することもできます。

  2. ワークフローの有効化 (Jira ドキュメント)」 の指示に従って、インポートしたワークフローをワークフロースキームに割り当てます。

  3. ワークフロースキームをプロジェクトに関連付ける (Jira ドキュメント)」 の指示に従って、ワークフロースキームをプロジェクトに割り当てます。

Jira 管理者
タスク説明必要なスキル

ソリューションパラメータを設定します。

  1. conf フォルダーで、params_prod.shfile を開きます。

  2. 次のパラメータの値を指定します。

    • ORG_ACCOUNT_ID – AWS Organizations 管理アカウントのアカウント ID。このソリューションは、アカウントタグを読み取り、それらの AWS アカウント タグで定義された特定のセキュリティ連絡先にチケットを割り当てます。

    • ORG_ROLE – AWS Organizations 管理アカウントへのアクセスに使用される IAM ロールの名前。このロールには、 OrganizationsReadOnlyAccess のアクセス許可が必要です。

    • EXTERNAL_ID — 外部IDを使用して ORG_ROLE で定義されている IAM ロールを引き継ぐ場合のオプションパラメータ。詳細については、「外部 ID の使用方法」 (IAM ドキュメント)を参照してください。

    • JIRA_DEFAULT_ASSIGNEE – これは、すべてのセキュリティ問題の Jira のデフォルト担当者です。このデフォルトの担当者は、アカウントが適切にタグ付けされていない場合、またはロールを引き受けることができない場合に使用されます。

    • JIRA_INSTANCE – 次の形式の Jira エンドポイントの HTTPS アドレス。 team-<team-id>.atlassian.net/

    • JIRA_PROJECT_KEY — チケットの作成に使用される Jira プロジェクトキーの名前 (SECTEST など)。このプロジェクトは Jira 内に既に存在している必要があります。 

    • ISSUE_TYPE — Jira 内のプロジェクトに割り当てられている課題タイプスキームの名前 (BugSecurity Issue など)。

    • REGIONS – など、このソリューションをデプロイする AWS リージョン コードのリストeu-west-1

  3. ソリューションパラメータファイルを保存して閉じます。

AWS システム管理者

自動化したい検出結果を特定してください。

  1. Security Hub コンソールを開きます。

  2. Security Hub ナビゲーションペインで、[Findings] (結果) を選択します。

  3. 結果のタイトルを選択します。

  4. 検出結果 ID を選択します。これにより、検出結果の完全な JSON が表示されます。

  5. JSON で、GeneratorId フィールド内の文字列をコピーします。この値は AWS Security Finding 形式 (ASFF) です。たとえば、Security Control の検出結果に応じて、S3 aws-foundational-security-best-practices/v/1.0.0/S3.1 の Block Public Access 設定を有効にする必要があります。

  6. GeneratorID 自動化したい検出結果の値をすべてコピーするまで、これらの手順を繰り返します。

検出結果を設定ファイルに追加します。

  1. src/code で、config.jsonconfig ファイルを開きます。

  2. 前の記事で取得した GeneratorID 値を default パラメーターに貼り付け、各 ID をコンマで区切ります。

  3. 設定ファイルを保存して閉じます。

次のコード例は、aws-foundational-security-best-practices/v/1.0.0/SNS.1 および aws-foundational-security-best-practices/v/1.0.0/S3.1 の検出結果を自動化する方法を示しています。

{ "Controls" : { "eu-west-1": [ "arn:aws:securityhub:::ruleset/cis-aws-foundations-benchmark/v/1.2.0/rule/1.22" ], "default": [ aws-foundational-security-best-practices/v/1.0.0/SNS.1, aws-foundational-security-best-practices/v/1.0.0/S3.1 ] } }
注記

それぞれに異なる検出結果を自動化することを選択できます AWS リージョン。結果の重複を防ぐには、単一のリージョンを選択して IAM に関連するコントロールの作成を自動化することをお勧めします。

AWS システム管理者
タスク説明必要なスキル

統合をデプロイします。

コマンドライン端末で、次のコマンドを入力します。

./deploy.sh prod
AWS システム管理者

Jira 認証情報を Secrets Manager にアップロードします。

  1. Secrets Manager コンソールを開きます。

  2. [Secrets] (シークレット) で、[Store a new secret] (新しいシークレットを保存する) を選択します。

  3. [Secret type] (シークレットタイプ) で、[Other type of secret] (他の種類のシークレット) を選択します。

  4. Jira Enterprise を使用している場合は、キーと値のペアに対して次の操作を行います。

    • 1 auth 行目にキーボックスに入力し、token_auth 次に値ボックスに入力します。

    • 2 token 行目を追加してキーボックスに入力し、バリューボックスに個人アクセストークンを入力します。

    Jira Cloud を使用している場合、キーと値のペアでは次の操作を行います。

    • 1 auth 行目にキーボックスに入力し、basic_auth 次に値ボックスに入力します。

    • 2 token 行目を追加してキーボックスに入力し、値ボックスに API トークンを入力します。

    • 3 email 行目を追加してキーボックスに入力し、値ボックスにメールアドレスを入力します。

  5. [次へ] を選択します。

  6. シークレット名に対して、 Jira-Token を入力して、ページの下部で次へを選択します。

  7. [Secret rotation] (シークレットローテーション) ページは [Disable automatic rotation] (自動ローテーションを無効にする) のままにし、ページ下部で [Next] (次へ) を選択します。

  8. [Review] (レビュー) ページで、シークレットの詳細を確認し、[Store] (保存) をクリックします。

AWS システム管理者

セキュリティハブカスタムアクションを作成します。

  1. それぞれについて AWS リージョン、 AWS Command Line Interface (AWS CLI) で create-action-target コマンドを使用して、 という名前の Security Hub カスタムアクションを作成しますCreateJiraIssue

    aws securityhub create-action-target --name "CreateJiraIssue" \  --description "Create ticket in JIRA" \  --id "CreateJiraIssue" --region $<aws-region>
  2. Security Hub コンソールを開きます。

  3. Security Hub ナビゲーションペインで、[Findings] (結果) を選択します。

  4. 検出結果のリストから、エスカレートしたい検出結果を選択します。

  5. アクションメニューで CreateJiraIssue を選択します。

AWS システム管理者

関連リソース

追加情報

Jira チケットの例

指定した Security Hub の検出結果が発生すると、このソリューションは自動的に Jira チケットを作成します。チケットには、次の情報が含まれます。

  • タイトル — タイトルは次の形式でセキュリティ上の問題を識別します。

    AWS Security Issue :: <AWS account ID> :: <Security Hub finding title>
  • 説明 — チケットの説明セクションには、検出結果に関連するセキュリティコントロールについての説明と、Security Hub コンソールの検出結果へのリンク、および Jira ワークフローにおけるセキュリティ問題の処理方法に関する簡単な説明が記載されています。

以下は、自動生成された Jira チケットの例です。

タイトル

AWS セキュリティの問題 :: 012345678912 :: Lambda.1 Lambda 関数ポリシーはパブリックアクセスを禁止する必要があります。

説明

問題は何か? 担当する AWS アカウント 012345678912 内でセキュリティ上の検出結果が検出されました。

このコントロールは、Lambda リソースにアタッチされた AWS Lambda 関数ポリシーがパブリックアクセスを禁止しているかどうかをチェックします。Lambda 関数ポリシーがパブリックアクセスを許可している場合、コントロールは失敗します。

<セキュリティハブの検出結果へのリンク>

チケットはどうする必要がありますか?

  • アカウントにアクセスして設定を確認します。チケットを「修正済み」に移動して処理中のチケットを承認します。修正後、 をテスト修正に移行し、セキュリティが問題に対処したことを検証します。

  • リスクを受け入れるべきだと思う場合は、「リスクの受け入れ待ち」に移動します。これには、セキュリティエンジニアによるレビューが必要です。

  • 誤検知と思われる場合は、「誤検知としてマークする」に移行します。これはセキュリティエンジニアによってレビューされ、それに応じて再オープン/クローズされます。