0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AWSマルチアカウント環境における脆弱性診断の自動化 ―Organizationsを使わない大規模組織での安全な実装

0
Posted at

AWSマルチアカウント環境における脆弱性診断の自動化 ―Organizationsを使わない大規模組織での安全な実装―

はじめに

エンタープライズ企業において、AWS環境が拡大する中、多くの組織では部門ごと、プロジェクトごと、環境ごと(本番・ステージング・開発)に複数のAWSアカウントを保有しています。各チームや部門が独自のAWSアカウントを持つことで、セキュリティ境界の確立、コスト管理の最適化、障害影響範囲の局所化を実現しています。

しかし、このようなマルチアカウント構成において、全社的なAWS Organizationsの管理権限は本社全体のIT部門やガバナンスチームが保持しており、個別のチームではOrganizationsを活用できないケースが一般的です。それでも、チーム内で保有する複数のAWSアカウントに対して統一的なセキュリティ管理を実現する必要があります。

本番環境の脆弱性診断における問題点

マルチアカウント環境において手動で脆弱性診断を実施する場合、数十のアカウントに対して月次で手動診断を行う工数が膨大になる他、アカウント間で診断実施時期にずれが生じてセキュリティリスクの全体把握が遅延します。また、診断処理そのものが本番環境の性能低下やサービス停止を引き起こすリスクがあり、このリスクはアカウント数に比例して増大します。手作業による診断は特定担当者への属人化も招きやすく、診断品質にばらつきが生じがちです。こうした問題を解消するために、本番環境に影響を与えない自動化されたアプローチが求められます。

本記事で提案する解決策

本記事では、AWS Organizationsを使用せずにマルチアカウント環境を運用しているチームが、本番の稼働環境に一切影響を与えずに脆弱性診断を自動化し、中央集約管理する考え方とアーキテクチャを解説します。

対象とするコンピューティングリソース:

  • EC2インスタンス
  • ECRコンテナイメージ
  • Lambda関数

脆弱性診断の対象リソース

本記事では、AWSマルチアカウント環境で広く利用される以下の4つのコンピューティングリソースを診断対象とします。

リソースタイプ 主な脆弱性リスク 診断ポイント マルチアカウント特有の課題
EC2インスタンス OS・ミドルウェアの脆弱性
設定不備
パッケージバージョン
セキュリティパッチ適用状況
ネットワーク設定
アカウント数×インスタンス数で
診断対象が膨大
ECRコンテナイメージ ベースイメージの脆弱性
依存パッケージの脆弱性
イメージレイヤーの脆弱性
ライブラリ・パッケージバージョン
イメージが複数アカウントの
ECRに分散保存
Lambda関数 ランタイムの脆弱性
依存ライブラリの脆弱性
IAM権限の過剰付与
依存パッケージのバージョン
ランタイムサポート状況
IAMロール設定
大量の関数が複数アカウントに
分散し全体把握が困難

これらの診断を、チーム全体で統一的かつ自動的に実施し、中央で集約管理する仕組みを構築します。

構成概要

マルチアカウント環境のアーキテクチャ全体像

本記事では、AWS Organizationsを使用しないマルチアカウント環境での脆弱性診断アーキテクチャを提案します。Organizations配下にない独立したアカウント群を、IAMクロスアカウントロールとSecurity Hubのクロスリージョン・クロスアカウント集約機能を活用して統合的に管理します。

architecture_diagram.drawio.png

アカウント構成の設計思想

Security/Scanning Account(セキュリティ集約アカウント)

チーム内で専用に用意するセキュリティ集約アカウントです。大量に存在するアカウントを統合的に管理するために1つのアカウントに情報を集約することを目的としています。

  • Security Hubの手動集約設定: Organizations APIを使わず、各メンバーアカウントをSecurity Hubに手動で関連付け(Invitation方式)
  • Amazon Inspector: Security Account自身のリソースをスキャンし、メンバーアカウントのInspectorからSecurity Hub経由で結果を受信
  • オーケストレーション機能(任意): Step FunctionsやLambdaでクロスアカウントロールを使用した診断処理の並列実行も可能
  • スキャン結果の一元管理: S3バケットにレポートを集約保存し、SNSで脆弱性アラートを通知

Member Accounts(メンバーアカウント)

チーム内の各プロジェクト・環境・部門が保有する独立したAWSアカウントで以下のような役割・特徴を持つことを想定しています。

  • 本番ワークロードの稼働: EC2、ECS (Fargate)、Lambda、ECR等のリソースが稼働
  • Inspector個別有効化: 各アカウントで個別にInspectorを有効化し、スキャン結果をSecurity Hubに送信
  • IAMクロスアカウントロール: Security AccountからのAssumeRoleを許可し、必要最小限の読み取り権限を提供
  • 本番環境への影響ゼロ: Security Accountは読み取り専用アクセスのみで、メンバーアカウントのリソースを変更しない

Organizationsを使わない理由と対処法

なぜOrganizationsを使わないのか?

多くの大企業では、AWS Organizationsは情報システム部門やIT統括部門が全社レベルで管理しており、個別のチームや事業部門が自由にOrganizationsの構成を変更したり、デリゲート管理者を設定したりする権限を持っていません。筆者のチームも同様に、社内のOrganizationsに対する管理権限を持っておらず、チーム内で保有する複数のAWSアカウントを独自に管理しています。そのため、チームレベルで複数のAWSアカウントを管理する場合、Organizationsに依存しない独立したマルチアカウント管理手法が必要になります。

Organizations機能の代替手段

Organizations機能 Organizations非依存の代替手段
デリゲート管理者(Inspector) 各メンバーアカウントで個別にInspectorを有効化し、Security HubにFindingsを送信
Security Hubの自動集約 Security Hubの「Invitation方式」で手動で各アカウントを関連付け
CloudFormation StackSets Terraformや独自スクリプトで各アカウントにIAMロールを個別デプロイ
組織ポリシー(SCP) 各アカウントのIAMポリシーで個別に権限制御
組織全体のAPI一括操作 クロスアカウントIAMロールを使用した個別アカウントへのAPI呼び出し

利用するAWSサービスと役割

AWSサービス 配置アカウント 役割
Amazon Inspector 全アカウント EC2、ECS (Fargate)、Lambda、ECRコンテナの脆弱性スキャン
CVEデータベースとの照合とリスク評価
AWS Security Hub Security/Scanning
(手動集約)
全メンバーアカウントの検出結果をInvitation方式で集約
統合ダッシュボードでチーム全体の脆弱性を可視化
Amazon ECR 各Member コンテナイメージの保存とEnhanced Scanningによる脆弱性検出
スキャン結果のSecurity Hub自動送信
AWS Step Functions Security/Scanning
(任意)
クロスアカウントロールを使用した並列診断ワークフロー制御
エラーハンドリングとリトライ制御
AWS Lambda Security/Scanning
(任意)
クロスアカウントアクセスによるリソース情報取得
スキャン結果の集約・通知処理
Amazon S3 Security/Scanning スキャンレポートの集約保存と履歴データの長期保管
Amazon SNS Security/Scanning Critical/High脆弱性の即時アラート通知
Amazon EventBridge Security/Scanning
(任意)
定期的なスキャン実行スケジューリング
IAM Cross-Account Roles 全Member
(任意)
Security Accountからの最小権限読み取りアクセスを許可

このアーキテクチャにより、Organizationsに依存せず、チームが管理する複数のメンバーアカウントに対して統一的な脆弱性診断を自動実行し、結果をSecurity Accountで一元管理できます。

本番環境への影響を回避する設計思想

マルチアカウント環境において脆弱性診断を自動化する上で、本番環境への影響を徹底的に排除するための設計方針を採用します。

1. アカウント分離によるリソース隔離

診断処理は専用のSecurity/Scanning Accountで実行され、メンバーアカウントの本番リソースとは完全に分離されています。各メンバーアカウントからは、AMI、コンテナイメージ、Lambda関数のメタデータのみをSecurity Accountと共有し、本番リソース自体には一切アクセスしません。

2. 読み取り専用アクセスの原則

Security Accountからメンバーアカウントへのクロスアカウントアクセス(実装する場合)は、必要最小限の読み取り権限のみを付与します。EC2インスタンスの停止・起動、Lambda関数の更新、ECRイメージの削除など、本番リソースを変更する権限は一切与えません。

3. Inspectorのマネージドスキャン活用

Amazon Inspector v2は、実行中のワークロード(EC2、ECS、Lambda)に対して最小限の影響(CPU使用率1%未満)で動作するよう最適化されています。スキャンはAWSマネージドサービスとして提供され、ユーザーが追加のインフラを構築・管理する必要はありません。

4. スケジューリングによる負荷分散

大量のアカウントを一度にスキャンすると、API制限に達する可能性があるため、以下の戦略でスキャンを分散します:

  • 非ピーク時間帯(深夜・休日)の実行
  • アカウントを複数のグループに分け、日を分けてスキャン
  • Step Functionsの並列実行制御による適切なスロットリング(実装する場合)

5. ECRスキャンのPush時自動実行

ECR Enhanced Scanningは、イメージがPushされた際に自動的にスキャンを実行し、Inspector経由でSecurity Hubに結果を送信します。追加の診断プロセスを実行する必要はなく、既存のCI/CDパイプラインへの影響はゼロです。

6. Security Hubへの統合集約

各メンバーアカウントのInspectorは、検出した脆弱性をSecurity Hub標準形式(AWS Security Finding Format: ASFF)でSecurity Accountに送信します。これにより、チーム全体の脆弱性を単一のダッシュボードで可視化し、統一的なガバナンスを実現できます。

Inspector のスキャンモード選択:エージェント vs エージェントレス

Amazon Inspector v2では、EC2インスタンスのスキャンにエージェントモードエージェントレスモードの2つのアプローチが利用可能です。マルチアカウント環境では、運用負荷とセキュリティガバナンスのバランスを考慮してモードを選択する必要があります。

エージェントモード(Agent-based Scanning)

EC2インスタンスにSSM Agent + Inspector Agentをインストールし、継続的にスキャンを実行する方式です。インスタンス内部から直接パッケージ情報を収集するため、リアルタイムでの継続的スキャンが可能であり、ネットワーク到達性が不要(Systems Manager経由で通信)という利点があります。

項目 内容
必要な設定 SSM Agentのインストール(Amazon Linux 2、Ubuntu等は標準搭載)
Inspector Agentの自動インストール(Inspector有効化時に自動デプロイ)
SSM用のIAMロール(AmazonSSMManagedInstanceCore)をEC2にアタッチ
メリット プライベートサブネットのインスタンスでもスキャン可能
停止せずにリアルタイムスキャン
より正確な脆弱性検出
デメリット 既存のEC2インスタンスにSSM Agentのセットアップが必要
既に数百台のインスタンスが稼働している環境では初期導入コストが高い

エージェントレスモード(Agentless Scanning)

EC2インスタンスのEBSスナップショットを作成し、Inspector管理下の専用環境でスキャンを実行する方式です。エージェントのインストールが一切不要で、Inspectorが自動的にEBSスナップショットを作成してスキャンを行います。本番インスタンスには一切影響を与えず、新しいインスタンスが起動すると自動的にスキャン対象に追加されます。

項目 内容
必要な設定 Inspectorを有効化するのみ(エージェントのインストール不要)
EBSスナップショット作成権限をInspectorに付与(自動設定)
メリット 既存インスタンスの変更が一切不要
数百台のインスタンスがあっても容易に導入が可能
運用負荷が低い
デメリット スキャン実行に若干の時間がかかる(スナップショット作成時間)
EBSスナップショット作成による一時的なI/O負荷(通常はほぼ無視できるレベル)
スキャン頻度がエージェントモードより低い(24時間に1回程度)

どちらを選ぶべきか?

評価項目 エージェントモード エージェントレスモード 推奨シーン
導入の容易さ △(既存インスタンスへの設定必要) ○(設定不要) 既に多数のインスタンスが稼働している場合はエージェントレス
運用負荷 △(エージェントの管理必要) ○(管理不要) 運用リソースが限られている場合はエージェントレス
スキャン速度 ○(リアルタイム) △(24時間に1回程度) 即座の脆弱性検出が必要ならエージェント
本番への影響 △(エージェント常駐) ○(スナップショットのみ) 本番環境への影響回避を最優先するならエージェントレス
ネットワーク要件 ○(SSM経由) ○(Inspectorが自動処理) 両方とも柔軟
スキャン精度 ○(より詳細) ○(十分な精度) 両方とも実用十分

本記事での推奨:エージェントレスモード

マルチアカウント環境で既に多数のEC2インスタンスが稼働している場合、エージェントレスモードを推奨します。既存インスタンスへの変更が一切不要で即座に導入でき、エージェントのバージョン管理やトラブルシューティングも不要なため運用負荷が極めて低くなります。スナップショット作成以外に本番環境への負荷はなく、各アカウントでInspectorを有効化するだけでマルチアカウント環境全体に展開できます。

ただし、リアルタイムでの継続的な脆弱性監視が求められる高セキュリティ環境や、新規構築のインフラではエージェントモードの採用も検討に値します。

技術的な特徴・アーキテクチャ設計

本アーキテクチャは、マルチアカウント環境において3つの主要機能を組み合わせることで、包括的な脆弱性診断ソリューションを提供しています。

①EC2インスタンスの脆弱性診断:Amazon Inspector による実現

マルチアカウント環境でのアーキテクチャ特徴

各メンバーアカウントで個別に有効化されたInspectorが、アカウント内のEC2インスタンスを自動的にスキャンします。Inspector v2はエージェントモード(SSM Agent経由)またはエージェントレスモード(EBSスナップショット経由)をサポートしており、大規模マルチアカウント環境ではエージェントレスモードの採用を推奨します。

処理フロー(エージェントレスモード)

  1. 自動検出フェーズ: Inspector がアカウント内のEC2インスタンスを自動検出
  2. スナップショット作成フェーズ: Inspector管理下でEBSスナップショットを自動作成
  3. 脆弱性スキャンフェーズ: スナップショットから専用環境で脆弱性を分析
  4. 結果送信フェーズ: スキャン結果をSecurity Hubに自動送信
  5. 集約フェーズ: Security/Scanning AccountのSecurity Hubで全アカウントの結果を可視化

本番環境への影響がない理由

  • エージェントレスモードでは本番インスタンスにエージェント導入が不要
  • スナップショット作成は一時的なI/O負荷のみ(通常は無視できるレベル)
  • 本番インスタンスへの変更は一切なし

②ECRコンテナイメージの脆弱性診断:ECR Enhanced Scanning による実現

マルチアカウント環境でのアーキテクチャ特徴

各メンバーアカウントのECRリポジトリで、Enhanced Scanningを有効化することで、コンテナイメージがPushされた瞬間に自動的に脆弱性スキャンが実行されます。ECS(Fargate)で稼働するコンテナもECRからイメージを取得するため、ECRレベルでのスキャンによりECS環境の脆弱性も包括的にカバーできます。Fargateはサーバーレスコンテナ実行環境でありユーザーがOSレベルの管理を行わないため、コンテナイメージ自体の脆弱性管理が特に重要です。スキャン結果はInspector v2経由でSecurity Hubに送信され、Security/Scanning Accountで一元管理されます。

処理フロー

  1. イメージPush: 開発者がCI/CDパイプラインからECRにイメージをPush
  2. 自動スキャン開始: Enhanced Scanningが自動的にイメージレイヤーをスキャン
  3. CVEデータベース照合: OSパッケージとアプリケーション依存関係の脆弱性を検出
  4. Inspector統合: スキャン結果をInspector v2経由でSecurity Hub標準形式(ASFF)に変換
  5. クロスアカウント集約: Security/Scanning AccountのSecurity Hubに結果を自動送信

CI/CDパイプラインとの統合

ECRスキャンの結果をCI/CDパイプライン(GitHub Actions、Jenkins、CodePipeline等)に組み込むことで、脆弱性のあるイメージが本番環境にデプロイされることを防止できます。Security Accountで集約された結果を定期的にチェックし、Critical/High脆弱性が検出された場合は開発チームにアラートを送信します。

③Lambda関数の脆弱性診断:Amazon Inspector による実現

マルチアカウント環境でのアーキテクチャ特徴

Lambda関数の脆弱性診断も、各メンバーアカウントのInspector v2で自動的に実施されます。Inspectorは、Lambda関数のデプロイパッケージやレイヤーを解析し、依存ライブラリの脆弱性を検出します。

処理フロー

  1. 関数検出フェーズ: 各アカウント内のLambda関数を自動検出
  2. コード解析フェーズ: デプロイパッケージから依存ライブラリを抽出
  3. 脆弱性照合フェーズ: CVEデータベースと照合して既知の脆弱性を特定
  4. ランタイムチェックフェーズ: 非推奨・サポート終了のランタイムを検出
  5. 結果送信フェーズ: Security Hubに検出結果を送信し、Security Accountで集約

Lambda特有の考慮事項

Lambda関数は、ランタイムとして提供されるPython、Node.js、Java等の言語バージョンと、アプリケーションコードに含まれる依存ライブラリの両方に脆弱性リスクがあります。Inspectorは両方を自動的にチェックし、定期的に最新のCVEデータベースと照合します。

スキャン結果の確認と運用

Security Hubでの統合管理

全てのスキャン結果がSecurity Hubに集約されるため、統一されたインターフェースで確認できます。

脆弱性対応のSLA設定

検出された脆弱性への対応優先度と期限を明確にします。

重要度 対応期限 対応方針
Critical 24時間以内 即座にパッチ適用または該当リソースの隔離
High 7日以内 計画的なパッチ適用とテスト
Medium 30日以内 次回メンテナンスウィンドウで対応
Low 90日以内 四半期レビュー時に対応検討

アラート通知の設計

Critical/High脆弱性が検出された場合の通知を設計します。この方法としてはメール通知の他SlackやTeamsへの通知、更にLambda等と組み合わせた自動処理などが考えられます。

まとめ

本記事では、Organizationsを使わないマルチアカウント環境における、AWS脆弱性診断の自動化アーキテクチャを紹介しました。

記事のポイント

  1. Organizationsに依存しないアーキテクチャ: チーム独自で管理する複数のAWSアカウントに対し、IAMクロスアカウントロールとSecurity Hub Invitation方式で脆弱性管理を実現
  2. 4つのコンピューティングリソースをカバー: EC2、ECS (Fargate)、ECR、Lambdaの包括的なスキャン
  3. Inspectorのスキャンモード選択: エージェントモードとエージェントレスモードの特徴を理解し、環境に応じて適切に選択
  4. 本番環境への影響ゼロ: 読み取り専用アクセス、マネージドスキャン、スナップショットベースのアプローチで安全に実施
  5. Security Hubによる統一管理: ASFF標準形式で全アカウントの脆弱性を単一ダッシュボードで可視化

セキュリティは継続的な取り組みが重要です。本記事のアーキテクチャパターンを参考に、ぜひ自社のマルチアカウント環境に合わせた脆弱性診断の自動化を検討してみてください。

参考資料


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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?