

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

# Transfer Family、Amazon Cognito、GuardDuty を使用してファイル転送を保護する
<a name="secure-file-transfers"></a>

*Kurt Kumar、Amazon Web Services*

## 概要
<a name="secure-file-transfers-summary"></a>

このソリューションは、 を使用して SFTP サーバーを介してファイルを安全に転送するのに役立ちます AWS Transfer Family。本ソリューションには、Amazon GuardDuty の機能である [Malware Protection for S3](https://docs.aws.amazon.com/guardduty/latest/ug/gdu-malware-protection-s3.html) による自動マルウェアスキャン機能が含まれます。外部関係者とファイルを安全に交換し、処理前にすべての受信ファイルでマルウェアのスキャンが行われていることを確認する必要がある組織向けに設計されています。

このパターンで提供される Infrastructure as Code (IaC) テンプレートは、以下のデプロイに役立ちます。
+ を介した Amazon Cognito 認証を使用した安全な SFTP サーバー AWS Lambda
+ マルウェアをスキャンしたアップロードファイルおよび受信ファイル用の Amazon Simple Storage Service (Amazon S3) バケット
+ 複数のアベイラビリティーゾーンにわたってパブリックサブネットとプライベートサブネットを持つ仮想プライベートクラウド (VPC) ベースのアーキテクチャ
+ イングレストラフィックとエグレストラフィックの両方に対する IP ベースのアクセス制御と、設定可能な許可リストと拒否リスト
+ GuardDuty によるマルウェアの自動スキャン
+ Amazon EventBridge と Lambda を介したスキャン結果に基づくインテリジェントなファイルルーティング
+ Amazon Simple Notiﬁcation Service (Amazon SNS) によるセキュリティインシデントのリアルタイム通知
+ Amazon S3 バケットと Lambda 環境変数の暗号化 AWS Key Management Service (AWS KMS)
+ インターネットに公開しないアクセス用の Amazon Virtual Private Cloud (Amazon VPC) エンドポイント
+ Amazon CloudWatch 統合による包括的なログ記録

## 前提条件と制限事項
<a name="secure-file-transfers-prereqs"></a>

**前提条件**
+ アクティブな AWS アカウント
+ IAM ロールをプロビジョニングする AWS CloudFormation テンプレートのデプロイなど、このパターンで説明されているアクションを実行するための AWS Identity and Access Management (IAM) のアクセス許可
+ ターゲットアカウントで[有効](https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_settingup.html)になっている GuardDuty
+ ターゲットアカウントで[有効](https://docs.aws.amazon.com/guardduty/latest/ug/malware-protection-s3-get-started-independent.html)になっている Malware Protection for S3
+ Service Quotas を使用すると、ターゲットアカウントで以下を作成できます。
  + 単一の VPC
  + 1 つのプライベートサブネット
  + 1 つのパブリックサブネット
  + 3 つの Elastic IP アドレス
  + 十分な Lambda の同時実行数の制限
+ セキュリティ関連の通知用の有効な E メールアドレス
+ (オプション) 許可または拒否する IP アドレスまたは CIDR 範囲のリスト
+ (オプション) AWS Command Line Interface (AWS CLI)、[インストール](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html)および[設定](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)済み

**制限事項**
+ Malware Protection for S3 には、最大ファイルサイズなどのクォータが適用されます。詳細については、GuardDuty ドキュメントの「[Quotas in Malware Protection for S3](https://docs.aws.amazon.com/guardduty/latest/ug/malware-protection-s3-quotas-guardduty.html)」と「[Supportability of Amazon S3 features](https://docs.aws.amazon.com/guardduty/latest/ug/supported-s3-features-malware-protection-s3.html)」を参照してください。
+ このソリューションでは、Amazon Cognito のユーザー名とパスワード認証のみを使用します。このテンプレートでは、証明書ベースの認証方法やその他の認証方法はサポートされていません。デフォルトでは、このソリューションに多要素認証 (MFA) は設定されません。
+ このソリューションは、セキュリティグループのみを通じて IP ベースのアクセス制御を実装します。

## アーキテクチャ
<a name="secure-file-transfers-architecture"></a>

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

![GuardDuty と Cognito を使用して Amazon S3 バケットにファイルを安全に転送します。](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/39d98ebe-2844-4ccd-a497-9b796b7da5e8/images/05567010-e189-40e7-acab-74e77c4f8525.png)


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

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

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

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

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

1. GuardDuty は、マルウェアがないかファイルをスキャンします。スキャン結果には、`NO_THREATS_FOUND`、`THREATS_FOUND`、`UNSUPPORTED`、`ACCESS_DENIED`、および `FAILED` があります。結果サンプルについては、GuardDuty ドキュメントの「[S3 object scan result](https://docs.aws.amazon.com/guardduty/latest/ug/monitor-with-eventbridge-s3-malware-protection.html#s3-object-scan-status-malware-protection-s3-ev)」を参照してください。

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

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

1. 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。

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

## ツール
<a name="secure-file-transfers-tools"></a>

**AWS のサービス**
+ [Amazon CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html) は、 AWS リソースと で実行するアプリケーションのメトリクスを AWS リアルタイムでモニタリングするのに役立ちます。
+ [Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/what-is-amazon-cognito.html) は、ウェブおよびモバイルアプリの認証、認可、およびユーザー管理機能を提供します。
+ [Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html) は、アプリケーションをさまざまなソースのリアルタイムデータに接続できるようにするサーバーレスイベントバスサービスです。例えば、 AWS Lambda 関数、API 送信先を使用する HTTP 呼び出しエンドポイント、その他のイベントバスなどです AWS アカウント。
+ [Amazon GuardDuty](https://docs.aws.amazon.com/guardduty/latest/ug/what-is-guardduty.html) は、ログを分析して処理し、 AWS 環境内の予期しないアクティビティや不正なアクティビティの可能性を特定する継続的なセキュリティモニタリングサービスです。
+ [AWS Key Management Service (AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) は、データの保護に役立つ暗号化キーの作成と制御に役立ちます。
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) は、サーバーのプロビジョニングや管理を行うことなくコードを実行できるコンピューティングサービスです。必要に応じてコードを実行し、自動的にスケーリングするため、課金は実際に使用したコンピューティング時間に対してのみ発生します。
+ 「[Amazon Simple Notiﬁcation Service (Amazon SNS)](https://docs.aws.amazon.com/sns/latest/dg/welcome.html)」は、ウェブサーバーやメールアドレスなど、パブリッシャーとクライアント間のメッセージの交換を調整および管理するのに役立ちます。
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) は、あらゆる量のデータを保存、保護、取得できるクラウドベースのオブジェクトストレージサービスです。
+ [AWS Transfer Family](https://docs.aws.amazon.com/transfer/latest/userguide/what-is-aws-transfer-family.html) は、SFTP、FTPS、または FTP プロトコルを介して AWS ストレージサービスとの間でファイルを転送するのに役立ちます。
+ [Amazon Virtual Private Cloud (Amazon VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html) は、定義した仮想ネットワークに AWS リソースを起動するのに役立ちます。この仮想ネットワークは、ユーザー自身のデータセンターで運用されていた従来のネットワークと似ていますが、 AWSのスケーラブルなインフラストラクチャを使用できるという利点があります。

**コードリポジトリ**

このパターンのコードは、GitHub の「[AWS Transfer Family and GuardDuty Malware Scanning Solution](https://github.com/aws-samples/sample-secure-transfer-family-code)」リポジトリで入手できます。

## ベストプラクティス
<a name="secure-file-transfers-best-practices"></a>

提供されている CloudFormation テンプレートは、IAM ロールとポリシーの最小特権のアクセス許可、保管中と転送中の暗号化、自動キーローテーションなど、多くの AWS ベストプラクティスを組み込むように設計されています。本番環境では、次の追加の推奨事項を実装することを検討してください。
+ Amazon Cognito ユーザーの [MFA](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-mfa.html) を有効にする
+ 分散型サービス拒否 (DDoS) の保護のために [AWS Shield](https://docs.aws.amazon.com/waf/latest/developerguide/shield-chapter.html) を実装する
+ 継続的なコンプライアンスモニタリングのために [AWS Config](https://docs.aws.amazon.com/config/latest/developerguide/WhatIsConfig.html) を設定する
+ 包括的な API ログ記録のために [AWS CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html) を実装する
+ マルウェアスキャン以外の脅威検出のために [Amazon GuardDuty](https://docs.aws.amazon.com/guardduty/latest/ug/what-is-guardduty.html) を設定する
+ 一元化されたセキュリティ管理のために [AWS Security Hub CSPM](https://docs.aws.amazon.com/securityhub/latest/userguide/what-is-securityhub-v2.html) を実装する
+ 認証情報管理のために [AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html) を使用する
+ [トラフィックミラーリング](https://docs.aws.amazon.com/vpc/latest/mirroring/what-is-traffic-mirroring.html)によるネットワークトラフィックモニタリングを実装する
+ Amazon S3 での機密データの検出と保護のために [Amazon Macie](https://docs.aws.amazon.com/macie/latest/user/what-is-macie.html) を設定する
+ 定期的なセキュリティ評価と侵入テストを実装する
+ 正式なインシデント対応計画を立てる
+ すべてのコンポーネントに自動パッチ適用を実装する
+ 管理者向けの定期的なセキュリティトレーニングを実施する
+ マルチアカウントセキュリティ管理のために [AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html) を設定する

## エピック
<a name="secure-file-transfers-epics"></a>

### リソースのデプロイ
<a name="deploy-the-resources"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| リポジトリのクローン作成 | 次のコマンドを入力して、「[AWS Transfer Family および GuardDuty マルウェアスキャンソリューション](https://github.com/aws-samples/sample-secure-transfer-family-code)」リポジトリのクローンをローカルワークステーションに作成します。<pre>git clone https://github.com/aws-samples/sample-secure-transfer-family-code.git</pre> | アプリ開発者、DevOps エンジニア | 
| CloudFormation スタックを更新する。 | [See the AWS documentation website for more details](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/secure-file-transfers.html) | クラウド管理者、DevOps エンジニア | 

### リソースを設定する
<a name="configure-the-resources"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| マルウェア保護をオンにします。 | [See the AWS documentation website for more details](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/secure-file-transfers.html) | クラウド管理者、AWS 管理者 | 
| ユーザーをユーザープールに追加します。 | Amazon Cognito ユーザープールに 1 人以上のユーザーを追加します。手順については、Amazon Cognito ドキュメントの「[ユーザープール内のユーザーを管理する](https://docs.aws.amazon.com/cognito/latest/developerguide/managing-users.html)」を参照してください。 | クラウド管理者、AWS 管理者 | 

### SFTP サーバーをテストする
<a name="test-the-sftp-server"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| SFTP サーバーエンドポイントに接続します。 | [See the AWS documentation website for more details](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/secure-file-transfers.html) | アプリ開発者、クラウド管理者、クラウドアーキテクト、DevOps エンジニア | 

## トラブルシューティング
<a name="secure-file-transfers-troubleshooting"></a>


| 問題 | ソリューション | 
| --- | --- | 
| ユーザー認証が失敗する | [See the AWS documentation website for more details](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/secure-file-transfers.html)これらのトラブルシューティング手順の実行に役立つ AWS CLI コマンドのリストについては、[「追加情報](#secure-file-transfers-additional)」セクションの*「トラブルシューティングに役立つコマンド*」を参照してください。 | 
| SFTP 認証が失敗する | [See the AWS documentation website for more details](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/secure-file-transfers.html)これらのトラブルシューティング手順の実行に役立つ AWS CLI コマンドのリストについては、[「追加情報](#secure-file-transfers-additional)」セクションの*「トラブルシューティングに役立つコマンド*」を参照してください。 | 
| ファイルのアップロードアクセスが拒否される | [See the AWS documentation website for more details](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/secure-file-transfers.html)これらのトラブルシューティング手順の実行に役立つ AWS CLI コマンドのリストについては、[「追加情報](#secure-file-transfers-additional)」セクションの*「トラブルシューティングに役立つコマンド*」を参照してください。 | 
| マルウェアのスキャンが行われない | [See the AWS documentation website for more details](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/secure-file-transfers.html)これらのトラブルシューティング手順の実行に役立つ AWS CLI コマンドのリストについては、[「追加情報](#secure-file-transfers-additional)」セクションの*「トラブルシューティングに役立つコマンド*」を参照してください。 | 
| Lambda 関数エラー | [See the AWS documentation website for more details](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/secure-file-transfers.html)これらのトラブルシューティング手順の実行に役立つ AWS CLI コマンドのリストについては、[「追加情報](#secure-file-transfers-additional)」セクションの*「トラブルシューティングに役立つコマンド*」を参照してください。 | 

## 関連リソース
<a name="secure-file-transfers-resources"></a>
+ [Transfer Family ウェブアプリ](https://docs.aws.amazon.com/transfer/latest/userguide/web-app.html) (Transfer Family ドキュメント)

## 追加情報
<a name="secure-file-transfers-additional"></a>

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

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