Transfer Family、Amazon Cognito、GuardDuty を使用してファイル転送を保護する - AWS 規範ガイダンス

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

Transfer Family、Amazon Cognito、GuardDuty を使用してファイル転送を保護する

Manoj Kumar、Amazon Web Services

概要

このソリューションは、 を使用して SFTP サーバーを介してファイルを安全に転送するのに役立ちます AWS Transfer Family。Amazon GuardDuty の機能である Malware Protection for S3 による自動マルウェアスキャン機能が含まれています。これは、外部関係者とファイルを安全に交換し、すべての受信ファイルが処理前にマルウェアをスキャンしていることを確認する必要がある組織向けに設計されています。

このパターンで提供される Infrastructure as Code (IaC) テンプレートは、以下をデプロイするのに役立ちます。

  • を介した Amazon Cognito 認証を使用した安全な SFTP サーバー AWS Lambda

  • マルウェアをスキャンしたアップロードおよび受信ファイル用の Amazon Simple Storage Service (Amazon S3) バケット

  • 複数のアベイラビリティーゾーンにまたがるパブリックサブネットとプライベートサブネットを備えた Virtual Private Cloud (VPC) ベースのアーキテクチャ

  • イングレストラフィックとエグレストラフィックの両方に対する IP ベースのアクセスコントロールと、設定可能な許可リストと拒否リスト

  • GuardDuty によるマルウェアの自動スキャン

  • Amazon EventBridge と Lambda を介したスキャン結果に基づくインテリジェントなファイルルーティング

  • Amazon Simple Notification Service (Amazon SNS) によるセキュリティインシデントのリアルタイム通知

  • Amazon S3 バケットと Lambda 環境変数の暗号化 AWS Key Management Service (AWS KMS)

  • インターネットに公開されていないアクセス用の Amazon Virtual Private Cloud (Amazon VPC) エンドポイント

  • Amazon CloudWatch 統合による包括的なログ記録

前提条件と制限

前提条件

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

  • IAM ロールをプロビジョニングする AWS CloudFormation テンプレートのデプロイなど、このパターンで説明されているアクションを実行するための AWS Identity and Access Management (IAM) のアクセス許可

  • ターゲットアカウントで有効になっている GuardDuty

  • ターゲットアカウントで有効になっている Malware Protection for S3

  • サービスクォータを使用すると、ターゲットアカウントで以下を作成できます。

    • 単一の VPC

    • 1 つのプライベートサブネット

    • 1 つのパブリックサブネット

    • 3 つの Elastic IP アドレス

    • 十分な Lambda 同時実行数の制限

  • セキュリティ関連の通知に有効な E メールアドレス

  • (オプション) 許可または拒否する IP アドレスまたは CIDR 範囲のリスト

  • (オプション) AWS Command Line Interface (AWS CLI)、インストールおよび設定済み

機能制限

  • Malware Protection for S3 は、最大ファイルサイズなどのクォータの対象となります。詳細については、GuardDuty ドキュメントの「Malware Protection for S3 のクォータ」とAmazon S3 機能のサポート可能性」を参照してください。

  • このソリューションでは、Amazon Cognito のユーザー名とパスワード認証のみを使用します。このテンプレートでは、証明書ベースの認証方法やその他の認証方法はサポートされていません。デフォルトでは、このソリューションは多要素認証 (MFA) を設定しません。

  • このソリューションは、セキュリティグループのみを通じて IP ベースのアクセスコントロールを実装します。

アーキテクチャ

次のアーキテクチャ図は、このパターンでデプロイされるリソースを示しています。このソリューションは、ユーザーの認証と認可に Amazon Cognito を使用します。SFTP AWS Transfer Family サーバーはファイルのアップロードに使用されます。ファイルは Amazon S3 バケットに保存され、Amazon GuardDuty はファイルをマルウェアをスキャンします。マルウェアが検出されると、Amazon SNS は E メール通知を送信します。

GuardDuty と Cognito を使用してAmazon S3バケットにファイルを安全に転送します。

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

  1. ユーザーは で SFTP サーバーエンドポイントに接続します AWS Transfer Family。これにより、Amazon Cognito ユーザープールで認証プロセスが開始されます。

  2. Lambda 関数は認証と認可プロセスを開始し、Amazon Cognito でユーザーの認証情報を検証します。

  3. Lambda 関数はUploadBucketAmazon S3バケットをホームディレクトリとして返します。ユーザーは Transfer Family サーバーの IAM ロールを引き受け、Lambda 関数は正常に認証されたことをユーザーに通知します。

  4. ユーザーは Transfer Family SFTP サーバーにファイルをアップロードします。ファイルは UploadBucket Amazon S3 バケットに保存されます。

  5. GuardDuty は、マルウェアがないかファイルをスキャンします。潜在的なスキャン結果は、NO_THREATS_FOUND、、THREATS_FOUNDUNSUPPORTEDACCESS_DENIED、および ですFAILED。サンプル結果については、GuardDuty ドキュメントのS3 オブジェクトスキャン結果」を参照してください。

  6. EventBridge ルールはスキャン結果イベントを検出します。

  7. EventBridge はファイルルーティング Lambda 関数を開始します。

  8. Lambda 関数はイベントを処理し、スキャン結果に基づいてファイルを次のようにフィルタリングします。

    • NO_THREATS_FOUND スキャン結果を持つファイルは、CleanBucketAmazon S3 バケットに送信されます。

    • THREATS_FOUND スキャン結果を持つファイルは、MalwareBucketAmazon S3 バケットに送信されます。

    • UNSUPPORTED スキャン結果を持つファイルは、ErrorBucketAmazon S3 バケットに送信されます。

    • ACCESS_DENIED スキャン結果を持つファイルは、ErrorBucketAmazon S3 バケットに送信されます。

    • FAILED スキャン結果を持つファイルは、ErrorBucketAmazon S3 バケットに送信されます。

    すべてのファイルは で暗号化されます AWS KMS key。

  9. ファイルが MalwareBucket Amazon S3 バケットに送信された場合、Lambda 関数は Amazon SNS トピックを開始します。Amazon SNS トピックは、設定した E メールアドレスに E メール通知を送信します。

ツール

AWS のサービス

  • Amazon CloudWatch は、 AWS リソースと で実行するアプリケーションのメトリクスを AWS リアルタイムでモニタリングするのに役立ちます。

  • Amazon Cognito は、ウェブおよびモバイルアプリの認証、認可、ユーザー管理を提供します。

  • Amazon EventBridge」 は、アプリケーションをさまざまなソースのデータに接続するために支援するサーバーレスイベントバスサービスです。例えば、 AWS Lambda 関数、API 送信先を使用する HTTP 呼び出しエンドポイント、その他のイベントバスなどです AWS アカウント。

  • Amazon GuardDuty は、ログを分析して処理し、 AWS 環境内の予期しないアクティビティや不正なアクティビティの可能性を特定する継続的なセキュリティモニタリングサービスです。

  • AWS Key Management Service (AWS KMS) は、データの保護に役立つ暗号化キーの作成と制御に役立ちます。

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

  • Amazon Simple Notification Service (Amazon SNS)」は、ウェブサーバーやメールアドレスなど、パブリッシャーとクライアント間のメッセージの交換を調整および管理するのに役立ちます。

  • Amazon Simple Storage Service (Amazon S3) は、任意の量のデータの保存、保護、取得に役立つクラウドベースのオブジェクトストレージサービスです。

  • AWS Transfer Family は、SFTP、FTPS、または FTP プロトコルを介して AWS ストレージサービスとの間でファイルを転送するのに役立ちます。

  • Amazon Virtual Private Cloud (Amazon VPC) は、定義した仮想ネットワークに AWS リソースを起動するのに役立ちます。この仮想ネットワークは、ユーザー自身のデータセンターで運用されていた従来のネットワークと似ていますが、 AWSのスケーラブルなインフラストラクチャを使用できるという利点があります。

コードリポジトリ

このパターンのコードは、GitHub AWS Transfer Family および GuardDuty Malware スキャンソリューションリポジトリで入手できます。

ベストプラクティス

提供されている CloudFormation テンプレートは、IAM ロールとポリシーの最小特権のアクセス許可、保管時と転送中の暗号化、自動キーローテーションなど、多くの AWS ベストプラクティスを組み込むように設計されています。本番環境では、次の追加の推奨事項を実装することを検討してください。

  • Amazon Cognito ユーザーの MFA を有効にする

  • 分散型サービス拒否 (DDoS) 保護AWS Shieldの実装

  • 継続的なコンプライアンスモニタリングAWS Configのために を設定する

  • 包括的な API ログ記録AWS CloudTrailの実装

  • マルウェアスキャン以外の脅威検出用に Amazon GuardDuty を設定する

  • 一元化されたセキュリティ管理AWS Security Hubのための の実装

  • 認証情報管理AWS Secrets Managerに を使用する

  • トラフィックミラーリングによるネットワークトラフィックモニタリングの実装

  • Amazon S3 で機密データの検出と保護のために Amazon Macie Amazon S3を設定する

  • 定期的なセキュリティ評価と侵入テストを実装する

  • 正式なインシデント対応計画を立てる

  • すべてのコンポーネントに自動パッチ適用を実装する

  • 管理者向けの定期的なセキュリティトレーニングを実施する

  • マルチアカウントセキュリティ管理AWS Organizationsの設定

エピック

タスク説明必要なスキル

リポジトリをクローン作成します。

次のコマンドを入力して、 AWS Transfer Family および GuardDuty マルウェアスキャンソリューションリポジトリをローカルワークステーションにクローンします。

git clone https://github.com/aws-samples/sample-secure-transfer-family-code.git
アプリ開発者、DevOps エンジニア

CloudFormation スタックを更新する。

  1. CloudFormation ドキュメントの指示に従って、CloudFormation コンソールまたは を使用してスタックを作成しますAWS CLI。次のパラメータを設定します。

    • UploadBucketName - バケット名をアップロードする

    • CleanBucketName - ファイルバケット名をクリーンアップする

    • MalwareBucketName - マルウェアファイルバケット名

    • ErrorBucketName - エラーファイルバケット名

    • SecurityTeamEmail - アラートの E メールアドレス

    • VpcCIDR - VPC の CIDR 範囲

    • PublicSubnet1CIDR - パブリックサブネット 1 の CIDR 範囲

    • PublicSubnet2CIDR - パブリックサブネット 2 の CIDR 範囲

    • PrivateSubnet1CIDR - プライベートサブネット 1 の CIDR 範囲

    • PrivateSubnet2CIDR - プライベートサブネット 2 の CIDR 範囲

    • AllowedIPAddresses - 許可された IP アドレスまたは CIDR 範囲

    • EnableEgressRules – セキュリティグループの出力ルールを有効にする場合は、「」と入力しますtrue。出力ルールを無効にする場合は、「」と入力しますfalse

  2. スタックのデプロイが完了するまで待ちます。

  3. スタック作成出力で、SFTP サーバーエンドポイントを書き留めます。この値は後で必要になります。

クラウド管理者、DevOps エンジニア
タスク説明必要なスキル

マルウェア保護をオンにします。

  1. にサインイン AWS Management Console し、GuardDuty コンソールを開きます。

  2. ナビゲーションペインで、[Malware Protection for S3] を選択します。

  3. 「保護されたバケット」セクションで、「有効化」を選択します。

  4. [S3 バケットの詳細を入力する] で、Amazon S3 バケット名を入力します。または、S3 を参照 を選択してバケットを選択します。UploadBucket Amazon S3 バケットを選択します。

  5. プレフィックス で、S3 バケット内のすべてのオブジェクトを選択します。

  6. スキャンされたオブジェクトのタグ付けで、オブジェクトのタグ付けを選択します。

  7. サービスアクセスセクションで、新しいサービスロールを作成して使用します

  8. [有効化] を選択します。

クラウド管理者、AWS 管理者

ユーザープールにユーザーを追加します。

Amazon Cognito ユーザープールに 1 人以上のユーザーを追加します。手順については、Amazon Cognito ドキュメントの「ユーザープールでのユーザーの管理」を参照してください。

クラウド管理者、AWS 管理者
タスク説明必要なスキル

SFTP サーバーエンドポイントに接続します。

  1. 次のコマンドを入力して SFTP サーバーエンドポイントを取得します。ここで、 <stack-name>は CloudFormation スタックの名前です。

    TRANSFER_ENDPOINT=$(aws cloudformation describe-stacks \   --stack-name <stack-name> \   --query 'Stacks[0].Outputs[?OutputKey==`TransferServerEndpoint`].OutputValue' \   --output text)
  2. SFTP サーバーに接続するには、次のコマンドを入力します。

    sftp user@company.com@$TRANSFER_ENDPOINT
  3. 次のプロンプトが表示されていることを確認します。

    sftp>

    これは、ファイル転送を実行するコマンドを入力できるようになったことを示します。

アプリ開発者、クラウド管理者、クラウドアーキテクト、DevOps エンジニア

トラブルシューティング

問題ソリューション

ユーザー認証が失敗する

  1. ユーザーが Amazon Cognito ユーザープールに存在することを確認します。

  2. ユーザーが確認され、有効になっていることを確認します。

  3. ユーザーが正しいパスワードを指定していることを確認します。

  4. CloudWatch Logs でエラーを確認します。

これらのトラブルシューティング手順の実行に役立つ AWS CLI コマンドのリストについては、「追加情報」セクションの「トラブルシューティングに役立つコマンド」を参照してください。

SFTP 認証が失敗する

  1. ユーザーが Amazon Cognito ユーザープールに存在することを確認します。

  2. ユーザーが確認され、有効になっていることを確認します。

  3. ユーザーが正しいパスワードを指定していることを確認します。

  4. AWS Transfer Family サーバーのセキュリティグループで IP アドレスが許可されていることを確認します。

  5. 認証 Lambda 関数のログにエラーがないか確認します。

  6. の IAM ロールに正しいアクセス許可 AWS Transfer Family があることを確認します。

これらのトラブルシューティング手順の実行に役立つ AWS CLI コマンドのリストについては、「追加情報」セクションの「トラブルシューティングに役立つコマンド」を参照してください。

ファイルのアップロードアクセスが拒否されました

  1. AWS KMS キーのアクセス許可が正しく設定されていることを確認します。

  2. Amazon S3 バケットポリシーを確認します。

  3. IAM ロールのアクセス許可が正しく設定されていることを確認します。

  4. VPC エンドポイントが正しく設定されていることを確認します。

  5. の IAM ロールに正しいアクセス許可 AWS Transfer Family があることを確認します。

これらのトラブルシューティング手順の実行に役立つ AWS CLI コマンドのリストについては、「追加情報」セクションの「トラブルシューティングに役立つコマンド」を参照してください。

マルウェアスキャンなし

  1. アカウントで GuardDuty を有効にします。

  2. Malware Protection for S3 を有効にします。

  3. Amazon EventBridge ルールがアクティブであることを確認します。

  4. ファイルルーティング Lambda 関数のログにエラーがないか確認します。

  5. Amazon SNS で通知が正しく設定されていることを確認します。

これらのトラブルシューティング手順の実行に役立つ AWS CLI コマンドのリストについては、「追加情報」セクションの「トラブルシューティングに役立つコマンド」を参照してください。

Lambda 関数エラー

  1. VPC 設定を確認します。

  2. VPC エンドポイントが正しく設定されていることを確認します。

  3. の IAM ロールに正しいアクセス許可 AWS Transfer Family があることを確認します。

  4. CloudWatch Logs でエラーを確認します。

  5. AWS KMS キーのアクセス許可が正しく設定されていることを確認します。

これらのトラブルシューティング手順の実行に役立つ AWS CLI コマンドのリストについては、「追加情報」セクションの「トラブルシューティングに役立つコマンド」を参照してください。

関連リソース

追加情報

トラブルシューティングに役立つコマンド

CloudFormation スタックのステータスを確認します。

aws cloudformation describe-stacks \ --stack-name <STACK_NAME>

Amazon Cognito ユーザープール内のすべてのユーザーを一覧表示します。

aws cognito-idp list-users \ --user-pool-id <USER_POOL_ID>

Lambda 関数のログを表示します。

aws logs describe-log-groups \ --log-group-name-prefix /aws/lambda/

GuardDuty のステータスを確認します。

aws guardduty list-detectors

セキュリティグループのルールを確認します。

aws ec2 describe-security-groups \ --group-ids <SECURITY_GROUP_ID> \ --output table

AWS Transfer Family サーバーのステータスを確認します。

aws transfer describe-server \ --server-id <SERVER_ID>

Amazon S3 バケット内のすべてのファイルを一覧表示します。

aws s3 ls s3://<BUCKET_NAME>/ \ --recursive

EventBridge ルールのステータスを確認します。

aws events describe-rule \ --name <RULE_NAME>