

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

# AWS Transfer Family サーバーで使用するストレージを設定する
<a name="configure-storage"></a>

このトピックでは、 で使用できるストレージオプションについて説明します AWS Transfer Family。Transfer Family サーバーのストレージとして Amazon S3 または Amazon EFS を使用できます。

**Contents**
+ [Amazon S3 バケットを設定する](#requirements-S3)
  + [Amazon S3 アクセスポイント](#access-points)
  + [Amazon S3 HeadObject の動作](#head-object-behavior)
    + [ファイルの書き込みとリストのみの権限を付与します。](#headobject-access-denied)
    + [大量のゼロバイトオブジェクトが遅延の問題を引き起こします。](#headobject-latency)
+ [Amazon EFS ファイルシステムを設定する](#requirements-efs)
  + [Amazon EFS ファイルの所有権](#efs-file-ownership)
  + [Transfer Family用にAmazon EFSユーザーを設定します。](#configure-efs-users-permissions)
    + [Amazon EFS上でTransfer Familyユーザーを設定します。](#set-up-efs-home-folders)
    + [Amazon EFS のルートユーザーの作成](#create-root-user-efs)
  + [サポートされている Amazon EFS コマンド](#efs-commands)

## Amazon S3 バケットを設定する
<a name="requirements-S3"></a>

AWS Transfer Family は Amazon S3 バケットにアクセスしてユーザーの転送リクエストを処理するため、ファイル転送プロトコル対応サーバーの設定の一環として Amazon S3 バケットを指定する必要があります。既存のバケットを使用するか、新しいバケットを作成することができます。

**注記**  
同じ AWS リージョンにあるサーバーと Amazon S3 バケットを使用する必要はありませんが、ベストプラクティスとしてそうすることをお勧めします。

ユーザーを設定する際に、各ユーザーに IAM ロールを割り当てます。このロールによって、Amazon S3 バケットへのユーザーのアクセスレベルが決まります。

新しいバケットの作成方法については、*Amazon Simple Storage Service ユーザーガイド*の「[S3 バケットを作成する方法](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/create-bucket-overview.html)」を参照してください。

**注記**  
 Amazon S3 Object オブジェクトロックを使用して、オブジェクトが固定期間または無期限に上書きされることを防止できます。これは、他のサービスの場合と同じように Transfer Family と連携します。オブジェクトが存在して保護されている場合、そのファイルへの書き込みや削除は許可されません。Amazon S3 オブジェクトロックの詳細については、*Amazon Simple Storage Service ユーザーガイド*の「[Amazon S3 オブジェクトロックの使用](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/object-lock.html)」を参照してください。

### Amazon S3 アクセスポイント
<a name="access-points"></a>

AWS Transfer Family は、共有データセットへのきめ細かなアクセスを簡単に管理できる Amazon [Amazon S3 の機能である Amazon S3 アクセスポイント](https://aws.amazon.com/s3/features/access-points/)をサポートしています。 Amazon S3 S3 Access Point のエイリアスは、S3 バケット名であればどこでも使用できます。Amazon S3 バケット内の共有データにアクセスするためのさまざまな権限を持つユーザーのために、Amazon S3 に何百ものアクセス ポイントを作成できます。

例えば、アクセスポイントを使用して、同じ共有データセットへのアクセスを3つの異なるチームに許可できます。1つのチームはS3からデータを読み取ることができ、2つ目のチームはS3にデータを書き込むことができ、3つ目のチームはS3からデータを読み取り、書き込み、削除することができます。上記で言及されているような細かいアクセス制御を実装するには、異なるチームに非対称なアクセスを与えるポリシーを含むS3アクセスポイントを作成できます。Transfer Family サーバーで S3 アクセス ポイントを使用すると、何百ものユースケースにまたがる複雑な S3 バケット ポリシーを作成しなくても、きめ細かいアクセス制御を実現できます。Transfer Family サーバーで S3 アクセスポイントを使用する方法の詳細については、「 [によるデータアクセスコントロールの強化 AWS Transfer Family 」およびAmazon S3](https://aws.amazon.com/blogs/storage/enhance-data-access-control-with-aws-transfer-family-and-amazon-s3-access-points/)ブログ記事」を参照してください。

**注記**  
AWS Transfer Family は現在、Amazon S3 マルチリージョンアクセスポイントをサポートしていません。

### Amazon S3 HeadObject の動作
<a name="head-object-behavior"></a>

**注記**  
Transfer Family サーバーを作成または更新すると、Amazon S3 ディレクトリのパフォーマンスを最適化できるため、`HeadObject`呼び出しが不要になります。

Amazon S3 では、バケットとオブジェクトが主要なリソースであり、オブジェクトはバケットに格納されます。Amazon S3 は階層ファイル システムを模倣できますが、一般的なファイル システムとは異なる動作をする場合があります。例えば、ディレクトリは Amazon S3 における第一級の概念ではなく、オブジェクト キーに基づいています。 AWS Transfer Family オブジェクトのキーをスラッシュ文字 (**[/]**) で分割し、最後の要素をファイル名として扱い、同じプレフィックスを持つファイル名を同じパスにグループ化することで、ディレクトリ パスを推測します。`mkdir` または Amazon S3 コンソールを使用して空のディレクトリを作成すると、フォルダーのパスを表すゼロバイトのオブジェクトが作成されます。これらのオブジェクトのキーは末尾のスラッシュで終わります。これらのゼロバイトのオブジェクトについては、Amazon S3 ユーザーガイドの[「フォルダーを使用した Amazon S3 コンソールでのオブジェクトの整理](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-folders.html)」で説明されています。

`ls` コマンドを実行し、一部の結果が Amazon S3 ゼロバイト オブジェクトである場合 (これらのオブジェクトにはスラッシュ文字で終わるキーがあります)、Transfer Familyはこれらの各オブジェクトに対する `HeadObject` リクエストを発行します (Amazon Simple Storage Service API の[「HeadObject」](https://docs.aws.amazon.com/AmazonS3/latest/API/API_HeadObject.html) を参照)詳細については参照してください)。これにより、Transfer Family で Amazon S3 をストレージとして使用する場合、次の問題が発生する可能性があります。

#### ファイルの書き込みとリストのみの権限を付与します。
<a name="headobject-access-denied"></a>

場合によっては、Amazon S3 オブジェクトへの書き込みアクセスのみを提供することができます。たとえば、バケット内のオブジェクトを書き込み (またはアップロード) および一覧表示するアクセス許可を付与し、オブジェクトの読み取り (ダウンロード) は許可しない場合があります。ファイル転送クライアントを使用して `ls`および `mkdir` コマンドを実行するには、Amazon S3 `ListObjects`および アクセス`PutObject`許可が必要です。ただし、Transfer Family がファイルの書き込みまたは一覧表示を`HeadObject`呼び出す必要がある場合、この呼び出しには アクセス`GetObject`許可が必要なため、呼び出しは失敗し、アクセスが**拒否**されます。

**注記**  
Transfer Family サーバーを作成または更新すると、Amazon S3 ディレクトリのパフォーマンスを最適化できるため、`HeadObject`呼び出しが不要になります。

この場合、スラッシュ AWS Identity and Access Management () で終わるオブジェクトにのみアクセス`GetObject`許可を追加する (IAM) ポリシー条件を追加することで、アクセスを許可できます`/`。この条件は、ファイルに対する`GetObject`呼び出し (読み取れないように) を防止しますが、ユーザーはフォルダを一覧表示してトラバースできます。次のポリシー例では、Amazon S3 バケットへの書き込みおよびリストアクセスのみを提供します。このポリシーを使用するには、 をバケットの名前`{{amzn-s3-demo-bucket}}`に置き換えます。

**注記**  
WinSCP のアップロード動作に対処するには、次のポリシー例にリストされている`"arn:aws:s3:::amzn-s3-demo-bucket/*.filepart"`行を追加してください。この行により、.filepart オブジェクトが適切に処理され、障害を防ぐことができます。

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowListing",
            "Effect": "Allow",
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket"
        },
        {
            "Sid": "AllowReadWrite",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:GetObjectVersion"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket/*"
            ]
         },
      {
            "Sid": "DenyIfNotFolder",
            "Effect": "Deny",
            "Action": [
                "s3:GetObject",
                "s3:GetObjectVersion"
            ],
            "NotResource": [
                "arn:aws:s3:::amzn-s3-demo-bucket/*/",
                "arn:aws:s3:::amzn-s3-demo-bucket/*.filepart"
            ]
         }
      ]
}
```

**注記**  
このポリシーでは、ユーザーがファイルを追加することはできません。つまり、このポリシーが割り当てられているユーザーは、ファイルを開いてコンテンツを追加したり、ファイルを変更したりすることはできません。さらに、`HeadObject` ファイルをアップロードする前に呼び出しが必要なユースケースでは、このポリシーは機能しません。

#### 大量のゼロバイトオブジェクトが遅延の問題を引き起こします。
<a name="headobject-latency"></a>

 Amazon S3 バケットにこれらのゼロバイトオブジェクトが多数含まれている場合、Transfer Family は大量の`HeadObject`呼び出しを発行するため、処理が遅れる可能性があります。この問題の推奨される解決策は、**Optimized Directory **を有効にしてレイテンシーを減らすことです。

たとえば、ホームディレクトリに移動し、10,000 個のサブディレクトリがあるとします。つまり、Amazon S3 バケットには 10,000 個のフォルダがあります。このシナリオでは、 `ls` (list) コマンドを実行すると、リストオペレーションに 6～8 分かかります。ただし、ディレクトリを最適化する場合、このオペレーションには数秒しかかかりません。このオプションは、サーバーの作成または更新手順中に**追加の詳細を設定する**画面で設定します。これらの手順については、[SFTP、FTPS、または FTP サーバーエンドポイントの設定](sftp-for-transfer-family.md)「」トピックで詳しく説明します。

**注記**  
GUI クライアントは制御できない`ls`コマンドを発行する可能性があるため、可能であればこの設定を有効にすることが重要です。

ディレクトリを最適化しない、または最適化できない場合は、この問題の代替解決策として、ゼロバイトオブジェクトをすべて削除します。次の点に注意してください。
+ 空のディレクトリは存在しなくなります。ディレクトリは、その名前がオブジェクトのキーに含まれている場合にのみ存在します。
+ 誰かが `mkdir` を呼び出して、物事を何度も壊すことを防ぐことはできません。ディレクトリの作成を防止するポリシーを作成することで、これを軽減できます。
+ 一部のシナリオでは、これらの 0 バイトのオブジェクトが使用されます。例えば、**[/inboxes/customer1000]** のような構造があり、受信トレイ ディレクトリは毎日クリーンアップされます。

最後に、さらに考えられる解決策の 1 つは、ポリシー条件を通じて表示されるオブジェクトの数を制限して、`HeadObject`呼び出しの数を減らすことです。これを実行可能な解決策とするためには、すべてのサブディレクトリの限られたセットしか表示できない可能性があることを受け入れる必要があります。

## Amazon EFS ファイルシステムを設定する
<a name="requirements-efs"></a>

AWS Transfer Family は Amazon Elastic File System (Amazon EFS) にアクセスして、ユーザーの転送リクエストを処理します。したがって、ファイル転送プロトコル対応サーバーの設定の一部として、Amazon EFS ファイルシステムを提供する必要があります。既存のファイルシステムを使用するか、または新しいファイルシステムを作成できます。

次の点に注意してください。
+ Transfer Family サーバーと Amazon EFS ファイルシステムを使用する場合、サーバーとファイルシステムは同じ にある必要があります AWS リージョン。
+ サーバーとファイルシステムは同じアカウントになくてもかまいません。サーバーとファイルシステムが同じアカウントに属していない場合、ファイルシステムポリシーでユーザーロールに明示的なアクセス許可を付与する必要があります。

  複数のアカウントを設定する方法については、「 *AWS Organizations ユーザーガイド*[」の「組織内の AWS アカウントの管理](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_accounts.html)」を参照してください。
+ ユーザーを設定する際に、各ユーザーに IAM ロールを割り当てます。このロールによって、ユーザーの Amazon EFS ファイルシステムへのアクセスレベルが決まります。
+ Amazon EFS ファイルシステムのマウントの詳細については、[「Amazon EFS ファイルシステムのマウント](https://docs.aws.amazon.com//efs/latest/ug/mounting-fs.html)」を参照してください。

 AWS Transfer Family と Amazon EFS の連携の詳細については、「Amazon Elastic File System ユーザーガイド」の[「 AWS Transfer Family を使用して Amazon EFS ファイルシステムのファイルにアクセスする](https://docs.aws.amazon.com//efs/latest/ug/using-aws-transfer-integration.html)」を参照してください。 *Amazon Elastic File System *

### Amazon EFS ファイルの所有権
<a name="efs-file-ownership"></a>

Amazon EFS は、Portable Operating System Interface (POSIX) ファイルアクセス許可モデルを使用して、ファイルの所有権を表します。

 POSIX では、システム内のユーザーは 3 つの異なるアクセス許可クラスに分類されます。Amazon EFS ファイルシステムに保存されているファイルへのアクセスをユーザーに許可する場合は AWS Transfer Family、「POSIX プロファイル」を割り当てる必要があります。このプロファイルは、Amazon EFS ファイルシステム内のファイルおよびディレクトリへのアクセス権を決定するために使用されます。
+ User (u): ファイルまたはディレクトリの所有者。通常、ファイルまたはディレクトリの作成者は所有者でもあります。
+ Group (g): 共有するファイルおよびディレクトリへの同一のアクセス権を必要とするユーザーのセット。
+ Other (o): 所有者およびグループメンバー以外でシステムへのアクセス権を持つ他のすべてのユーザー。このアクセス許可クラスは「Public」とも呼ばれます。

 POSIX アクセス許可モデルにおいて、すべてのファイルシステムオブジェクト (ファイル、ディレクトリ、シンボリックリンク、名前付きパイプ、ソケット) は、前述の 3 つのアクセス許可セットに関連付けられています。Amazon EFS オブジェクトには、Unix 形式のモードが関連付けられています。このモード値は、そのオブジェクトに対してアクションを実行するアクセス許可を定義します。

 さらに、Unix 形式のシステムでは、ユーザーとグループは Amazon EFS がファイルの所有権を表すために使用する数値 ID にマッピングされます。Amazon EFS オブジェクトは、単一の所有者と単一のグループによって所有されます。Amazon EFS; は、ユーザーがファイルシステムオブジェクトにアクセスしようとすると、マップされた数値 ID を使用してアクセス許可をチェックします。

### Transfer Family用にAmazon EFSユーザーを設定します。
<a name="configure-efs-users-permissions"></a>

Amazon EFSユーザーを設定する前に、以下のいずれかを実行できます:
+ Amazon EFS でユーザーを作成し、そのホームフォルダーを設定できます。詳細については、「[Amazon EFS上でTransfer Familyユーザーを設定します。](#set-up-efs-home-folders)」を参照してください。
+ ルートユーザーの追加に問題がない場合は、追加することができます [Amazon EFS のルートユーザーの作成](#create-root-user-efs)。

**注記**  
Transfer Family サーバーは、POSIX アクセス許可を設定するための Amazon EFS アクセス ポイントをサポートしていません。Transfer Family ユーザーの POSIX プロファイル (前のセクションで説明) は、POSIX 権限を設定する機能を提供します。これらのアクセス許可は、UID、GID、およびセカンダリ GID に基づいて、きめ細かなアクセスを実現するためにユーザー レベルで設定されます。

#### Amazon EFS上でTransfer Familyユーザーを設定します。
<a name="set-up-efs-home-folders"></a>

Transfer Family は、ユーザーを指定した UID/GID およびディレクトリにマップします。UID/GID/ディレクトリが EFS にまだ存在していない場合は、ユーザーへの転送で割り当てる前に、それらを作成する必要があります。「Amazon Elastic File System ユーザーガイド」の「[Network File System（NFS）レベルでユーザー、グループ、パーミッションを操作する](https://docs.aws.amazon.com/efs/latest/ug/accessing-fs-nfs-permissions.html)」に、Amazon EFS ユーザーを作成する詳細が記載されています。

**Transfer Family で Amazon EFS ユーザーを設定する手順**

1. [「`PosixProfile`」](https://docs.aws.amazon.com/transfer/latest/APIReference/API_PosixProfile.html) フィールドを使用して、Transfer Family のユーザーの EFS UID と GID をマップします。

1. ユーザーがログイン時に特定のフォルダーで開始するようにしたい場合は、[「`HomeDirectory`」 ](https://docs.aws.amazon.com/transfer/latest/APIReference/API_CreateUser.html#TransferFamily-CreateUser-request-HomeDirectory)フィールドの下に EFS ディレクトリを指定できます。

CloudWatch ルールと Lambda 関数を使用して、プロセスを自動化できます。EFS とやり取りする Lambda 関数の例については、[「サーバーレスアプリケーションでの AWS Lambda の Amazon EFS の使用](https://aws.amazon.com/blogs/compute/using-amazon-efs-for-aws-lambda-in-your-serverless-applications)」を参照してください。

さらに、Transfer Family ユーザーの論理ディレクトリを構成できます。詳細については、[Amazon EFS の論理ディレクトリを設定する](logical-dir-mappings.md#logical-dir-efs) [論理ディレクトリを使用して Transfer Family ディレクトリ構造を簡素化する](logical-dir-mappings.md) トピックのセクションを参照してください。

#### Amazon EFS のルートユーザーの作成
<a name="create-root-user-efs"></a>

もし組織がユーザーの設定を行うためにSFTP/FTPS経由でのルートユーザーアクセスを有効にすることに問題がなければ、UIDおよびGIDが0（ルートユーザー）であるユーザーを作成し、そのルートユーザーを使用してフォルダを作成し、残りのユーザーのためにPOSIX IDオーナーを割り当てることができます。このオプションの利点は、Amazon EFS ファイル システムをマウントする必要がないことです。

[Amazon EFS サービスマネージドユーザーの追加](service-managed-users.md#add-efs-user) で説明されている手順を実行し、ユーザー ID とグループ ID の両方に 0 (ゼロ) を入力します。

**ヒント**  
このスーパーユーザーアカウントを必要以上に長く存在させないでください。または、ルートユーザーアカウントを保持する場合は、適切に保護してください。

### サポートされている Amazon EFS コマンド
<a name="efs-commands"></a>

以下のコマンドは、 AWS Transfer Family Amazon EFS でサポートされています。
+ `cd`
+ `ls`/`dir`
+ `pwd`
+ `put`
+ `get`
+ `rename`
+ `chown`: root (つまり uid=0 のユーザー) のみがファイルとディレクトリの所有権とアクセス許可を変更できます。
+ `chmod`: ファイルとディレクトリの所有権とアクセス許可を変更できるのは root のみです。
+ `chgrp`: root またはファイルの所有者が、ファイルのグループを自分のセカンダリグループの 1 つに変更できる場合にのみサポートされます。
+  `ln -s`/`symlink`
+ `mkdir`
+ `rm`/`delete`
+ `rmdir`
+ `chmtime`