パブリック IP アドレスからのアクセスを許可する AWS セキュリティグループを自動的に監査する - AWS 規範ガイダンス

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

パブリック IP アドレスからのアクセスを許可する AWS セキュリティグループを自動的に監査する

Amazon Web Services、Eugene Shifer、Stephen DiCato

概要

セキュリティのベストプラクティスとして、絶対に必要なもののみへの AWS リソースの露出を最小限に抑えることが重要です。例えば、一般に公開されているウェブサーバーではインターネット経由の受信アクセスを許可する必要がありますが、不要な公開を可能な限り減らすために、他のワークロードへのアクセスは特定のネットワークに制限する必要があります。Amazon Virtual Private Cloud (Amazon VPC) のセキュリティグループは、リソースへのアクセスを制限できる効果的な制御機能です。ただし、セキュリティグループの評価は、とりわけマルチアカウントのアーキテクチャでは、面倒な作業になりがちです。AWS Config ルールAWS Security Hub CSPM コントロールを使用すれば、パブリックインターネット (0.0.0.0/0) から特定のネットワーク通信プロトコル (Secure Shell (SSH)、HTTP、HTTPS、Windows リモートデスクトッププロトコル (RDP) など) へのアクセスを許可しているセキュリティグループを特定することができます。ただし、これらのルールとコントロールは、サービスが非標準のポートで実行されている場合や、アクセスが特定のパブリック IP アドレスに制限されている場合には、適用されません。こういったことは、例えばウェブサービスが標準の TCP ポート 443 ではなく TCP ポート 8443 に関連付けられている場合などに起きる場合があります。また、開発者がテスト目的などでホームネットワークからサーバーにアクセスできる場合にも起きることがあります。

これに対処するには、このパターンで提供されているInfrastructure as Code (IaC) ソリューションを使用して、非プライベート (RFC 1918 非準拠) IP アドレスからユーザー AWS アカウント または AWS 組織内の任意のワークロードへのアクセスを許可するセキュリティグループを特定できます。AWS CloudFormation テンプレートは、カスタム AWS Config ルール、 AWS Lambda関数、および必要なアクセス許可をプロビジョニングします。単一のアカウントにスタックとしてデプロイすることも、組織全体にスタックセットとしてデプロイすることもできます AWS Organizations。

前提条件と制限

前提条件

  • アクティブな AWS アカウント

  • GitHub の使用経験がある

  • 単一の AWS アカウントにデプロイする場合:

  • AWS 組織にデプロイする場合:

    • CloudFormation スタックセットを作成する権限

    • AWS Organizations 統合で Security Hub CSPM をセットアップする

    • このソリューションをデプロイするアカウントでAWS Config をセットアップする

    • AWS Config と Security Hub CSPM の委任管理者 AWS アカウント として を指定する

制限事項

  • Security Hub CSPM が有効になっていない個々のアカウントにデプロイする場合は、 AWS Config を使用して検出結果を評価できます。

  • AWS Config および Security Hub CSPM の委任管理者を持たない組織にデプロイする場合は、個々のメンバーアカウントにログインして結果を表示する必要があります。

  • AWS Control Tower を使用して組織内のアカウントを管理および管理する場合は、 AWS Control Tower (CfCT) のカスタマイズを使用して、このパターンで IaC をデプロイします。CloudFormation AWS Control Tower コンソールを使用すると、ガードレールから設定ドリフトが作成され、組織単位 (OUs) またはマネージドアカウントを再登録する必要があります。

  • 一部の AWS のサービス は では使用できません AWS リージョン。利用可能なリージョンについては、「AWS のサービス (リージョン別)」を参照してください。特定のエンドポイントについては、「サービスエンドポイントとクォータ」ページを参照して、サービスのリンクを選択します。

アーキテクチャ

個人へのデプロイ AWS アカウント

次のアーキテクチャ図は、単一の 内の AWS リソースのデプロイを示しています AWS アカウント。CloudFormation コンソールから CloudFormation テンプレートを直接使用して、リソースをプロビジョニングします。Security Hub CSPM が有効になっている場合は、 AWS Config または Security Hub CSPM のいずれかで結果を表示できます。Security Hub CSPM が有効になっていない場合は、 の結果のみを表示できます AWS Config。

IaC テンプレートを単一の AWS アカウントに CloudFormation スタックとしてデプロイ。

この図表は、次のワークフローを示しています:

  1. CloudFormation スタックを作成します。これにより、Lambda 関数と AWS Config ルールがデプロイされます。ルールと関数の両方に、 AWS Config および ログでリソース評価を発行するために必要な AWS Identity and Access Management (IAM) アクセス許可が設定されます。

  2. この AWS Config ルールは検出評価モードで動作し、24 時間ごとに Lambda 関数を呼び出します。

  3. Lambda 関数はセキュリティグループを評価し、更新を送信します AWS Config。

  4. Security Hub CSPM はすべての AWS Config 検出結果を受け取ります。

  5. アカウントで設定したサービスに応じて AWS Config、Security Hub CSPM または で検出結果を表示できます。

AWS 組織にデプロイする

次の図は、 AWS Organizations と を通じて管理される複数のアカウントへのパターンのデプロイを示しています AWS Control Tower。CfCT を使用して CloudFormation テンプレートをデプロイします。評価結果は、委任管理者アカウントの Security Hub CSPM に一元化されます。図の AWS CodePipeline ワークフローセクションは、CfCT デプロイ中に発生するバックグラウンドステップを示しています。

IaC テンプレートを AWS Organizations に CloudFormation スタックセットとしてデプロイ。

この図表は、次のワークフローを示しています:

  1. 管理アカウントで、IaC テンプレートの圧縮 (ZIP) ファイルを、CfCT でデプロイされた Amazon Simple Storage Service (Amazon S3) バケットにアップロードします。

  2. CfCT パイプラインがこのファイルを解凍し、cfn-nag (GitHub) チェックを実行し、テンプレートを CloudFormation スタックセットとしてデプロイします。

  3. CfCT マニフェストファイルで指定した設定に応じて、CloudFormation StackSets はスタックを個々のアカウントまたは指定の OU にデプロイします。これにより、Lambda 関数と AWS Config ルールがターゲットアカウントにデプロイされます。ルールと関数の両方が、 AWS Config および ログでリソース評価を発行するために必要な IAM アクセス許可で設定されます。

  4. この AWS Config ルールは検出評価モードで動作し、24 時間ごとに Lambda 関数を呼び出します。

  5. Lambda 関数はセキュリティグループを評価し、更新を送信します AWS Config。

  6. AWS Config は、すべての検出結果を Security Hub CSPM に転送します。

  7. Security Hub CSPM の検出結果は、委任管理者アカウントに集約されます。

  8. 集約された検出結果は、委任管理者アカウントの Security Hub CSPM で表示できます。

ツール

AWS のサービス

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

  • AWS Config は、 のリソース AWS アカウント とその設定方法の詳細ビューを提供します。リソースがどのように相互に関連しているか、またそれらの構成が時間の経過とともにどのように変化したかを特定するのに役立ちます。An AWS Config rule は、リソースの理想的な構成設定を定義し、 AWS リソースがルールの条件に準拠しているかどうかを評価 AWS Config できます。

  • AWS Control Tower は、規範的なベストプラクティスに従って、 AWS マルチアカウント環境のセットアップと管理に役立ちます。AWS Control Tower (CfCT) のカスタマイズは、 AWS Control Tower ランディングゾーンをカスタマイズし、 AWS ベストプラクティスとの整合性を保つのに役立ちます。このソリューションのカスタマイズは、CloudFormation テンプレートと AWS Organizations サービスコントロールポリシー (SCPs

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

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

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

その他のツール

  • Python」は汎用のコンピュータープログラミング言語です。

コードリポジトリ

このパターンのコードは、GitHub の Detect vulnerable security groups リポジトリで入手できます。

ベストプラクティス

次のリソースのベストプラクティスに従うことをお勧めします。

エピック

タスク説明必要なスキル

デプロイ戦略を決定します。

ソリューションとコードを確認して、 AWS 環境のデプロイ戦略を決定します。単一のアカウントまたは AWS 組織にデプロイするかどうかを決定します。

アプリ所有者、AWS 全般

リポジトリをクローンする。

次のコマンドを入力して、Detect vulnerable security groups リポジトリのクローンを作成します。

git clone https://github.com/aws-samples/detect-public-security-groups.git
アプリ開発者、アプリオーナー

Python バージョンを検証します。

  1. クローンされたリポジトリの最上位ディレクトリに移動します。

    cd detect-public-security-groups
  2. Security-Group-Public-Assessment.yaml を開きます。

  3. SgPublicAccessCheckLambdaFunction リソースで、Python のバージョンがターゲットの AWS リージョンに適合していることを確認します。デフォルトでは、この関数は Python 3.12 を使用します。詳細については、「AWS Lambda が Python 3.12 のサポートを追加」を参照してください。必要に応じて、Python バージョンを更新します。

  4. Security-Group-Public-Assessment.yaml を保存して閉じます。

AWS 管理者、アプリ開発者
タスク説明必要なスキル

CloudFormation のテンプレートをデプロイします。

CloudFormation テンプレートを AWS 環境にデプロイします。次のいずれかを行います。

アプリ開発者、AWS 管理者、AWS 全般

デプロイメントを確認する。

CloudFormation コンソールで、スタックまたはスタックセットが正常にデプロイされていることを確認します。

AWS 管理者、アプリ所有者
タスク説明必要なスキル

AWS Config ルールの検出結果を表示します。

Security Hub CSPM で、次の操作を実行して個々の検出結果のリストを表示します。

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

  2. ナビゲーションペインで 調査検出結果 を選択します。

  3. [フィルターの追加] ボックスに、次のフィルターを追加します。

    • コンプライアンスのステータスFAILED

    • タイトルSgPublicAccessCheck

  4. [Apply] (適用) を選択します。

Security Hub CSPM で、以下を実行して、グループ化された検出結果の合計のリストを表示します AWS アカウント。

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

  2. ナビゲーションペインで、[Insights] (インサイト) を選択します。

  3. [インサイトの作成] を選択します。

  4. インサイトのグループ化属性を選択するには:

    1. 検索ボックスを選択して、フィルターオプションを表示します。

    2. [Group by] (グループ化の条件) を選択します。

    3. [AwsAccountId] を選択します。

    4. [Apply] (適用) を選択します。

  5. [フィルターの追加] ボックスに、次のフィルターを追加します。

    • タイトルSgPublicAccessCheck

    • コンプライアンスのステータスFAILED

  6. [インサイトの作成] を選択します。

  7. [インサイトの名前] を入力し、[インサイトの作成] を選択します。

検出結果のリスト AWS Configを表示するには、 AWS Config ドキュメントの「コンプライアンス情報と評価結果の表示」の手順に従います。

AWS 管理者、AWS システム管理者、クラウド管理者

トラブルシューティング

問題ソリューション

CloudFormation スタックセットの作成または削除に失敗する

AWS Control Tower がデプロイされると、必要なガードレールが適用され、 AWS Config アグリゲータとルールの制御が引き受けられます。これには、CloudFormation による直接的な変更の防止が含まれます。関連するすべてのリソースを含め、この CloudFormation テンプレートを適切にデプロイまたは削除するには、CfCT を使用する必要があります。

CfCT で CloudFormation テンプレートを削除できない

マニフェストファイルで必要な変更を行い、テンプレートファイルを削除した後も CloudFormation テンプレートが残っている場合は、マニフェストファイルに enable_stack_set_deletion パラメータが記述されていて、値が false に設定されていることを確認します。詳細については、CfCT ドキュメントの「Delete a stack set」を参照してください。

関連リソース