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

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

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

Kurt 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) バケット

  • 複数のアベイラビリティーゾーンにわたってパブリックサブネットとプライベートサブネットを持つ仮想プライベートクラウド (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

  • Service Quotas を使用すると、ターゲットアカウントで以下を作成できます。

    • 単一の VPC

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

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

    • 3 つの Elastic IP アドレス

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

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

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

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

制限事項

  • Malware Protection for S3 には、最大ファイルサイズなどのクォータが適用されます。詳細については、GuardDuty ドキュメントの「Quotas in Malware Protection for S3」と「Supportability of Amazon S3 features」を参照してください。

  • このソリューションでは、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 関数は UploadBucket Amazon S3 バケットをホームディレクトリとして返します。ユーザーは Transfer Family サーバーの IAM ロールを引き受け、Lambda 関数は正常に認証されたことをユーザーに通知します。

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

  5. GuardDuty は、マルウェアがないかファイルをスキャンします。スキャン結果には、NO_THREATS_FOUNDTHREATS_FOUNDUNSUPPORTEDACCESS_DENIED、および FAILED があります。結果サンプルについては、GuardDuty ドキュメントの「S3 object scan result」を参照してください。

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

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

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

    • NO_THREATS_FOUND スキャン結果のファイルは、CleanBucket Amazon S3 バケットに送信されます。

    • THREATS_FOUND スキャン結果のファイルは、MalwareBucket Amazon S3 バケットに送信されます。

    • UNSUPPORTED スキャン結果のファイルは、ErrorBucket Amazon S3 バケットに送信されます。

    • ACCESS_DENIED スキャン結果のファイルは、ErrorBucket Amazon S3 バケットに送信されます。

    • FAILED スキャン結果のファイルは、ErrorBucket Amazon S3 バケットに送信されます。

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

  9. ファイルが MalwareBucket Amazon S3 バケットに送信された場合、Lambda 関数は Amazon SNS トピックを開始します。Amazon SNS トピックは、お客様が設定した 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 and GuardDuty Malware Scanning Solution」リポジトリで入手できます。

ベストプラクティス

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

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

  • 分散型サービス拒否 (DDoS) の保護のために AWS Shield を実装する

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

  • 包括的な API ログ記録のために AWS CloudTrail を実装する

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

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

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

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

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

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

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

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

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

  • マルチアカウントセキュリティ管理のために 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 マネジメントコンソール し、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. 次のコマンドを入力して SMTP サーバーに接続します。

    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>