

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

# 論理ディレクトリを使用して Transfer Family ディレクトリ構造を簡素化する
<a name="logical-dir-mappings"></a>

論理ディレクトリは AWS Transfer Family サーバーディレクトリ構造を簡素化します。論理ディレクトリを使用すると、ユーザーが Amazon S3 バケットまたは Amazon EFS ファイルシステムに接続するときにナビゲートするわかりやすい名前で仮想ディレクトリ構造を作成できます。これにより、ユーザーは実際のディレクトリパス、バケット名、およびファイルシステム名を表示できなくなります。

**注記**  
エンドユーザーが実行を許可したオペレーションのみを実行できるように、セッションポリシーを使用する必要があります。  
論理ディレクトリを使用して、エンドユーザー向けの使いやすい仮想ディレクトリを作成し、バケット名を抽象化する必要があります。論理ディレクトリマッピングでは、ユーザーは指定された論理パスとサブディレクトリにのみアクセスでき、論理ルートを通過する相対パスは禁止されます。  
Transfer Family は、相対要素を含む可能性のあるすべてのパスを検証し、これらのパスを Amazon S3 に渡す前に、これらのパスの解決をアクティブにブロックします。これにより、ユーザーは論理マッピングを超えて移動できなくなります。  
Transfer Family は、エンドユーザーが論理ディレクトリ外のディレクトリにアクセスできないようにしていますが、ストレージレベルで最小特権を適用するには、一意のロールまたはセッションポリシーを使用することをお勧めします。

## chroot とディレクトリの構造について
<a name="chroot-dir-structure"></a>

**chroot** オペレーションを使用すると、ユーザーのルートディレクトリをストレージ階層内の任意の場所に設定できます。これにより、ユーザーは設定されたホームディレクトリまたはルートディレクトリに制限され、高レベルのディレクトリにアクセスできなくなります。

Amazon S3 ユーザーが に制限されている場合を考えてみましょう`amzn-s3-demo-bucket/home/${transfer:UserName}`。**chroot** を使用しない場合、一部のクライアントはユーザーが /amzn-s3-demo-bucket/home に移動することを許可し、適切なディレクトリに戻るためにログアウトとログインが必要になる場合があります。**chroot** オペレーションを実行すると、この問題は防止されます。

複数のバケットとプレフィックスにまたがってカスタムディレクトリ構造を作成できます。これは、ワークフローでバケットプレフィックスだけでは提供できない特定のディレクトリレイアウトが必要な場合に便利です。また、Amazon S3 内の複数の非連続な場所にリンクすることもでき、これはディレクトリパスがファイルシステム内の別の場所を参照する Linux ファイルシステム内にシンボリックリンクを作成するのと似ています。

## 論理ディレクトリを使用する際のルール
<a name="logical-dir-rules"></a>

このセクションでは、論理ディレクトリを使用する際のルールやその他の考慮事項について説明します。

### マッピングの制限
<a name="key-mapping-rules"></a>
+ `Entry` が の場合、マッピングは 1 つだけ許可されます `"/"` (重複するパスは許可されません）。
+ 論理ディレクトリは、カスタム IDP および AD ユーザーの場合は最大 2.1 MB、サービスマネージドユーザーの場合は最大 2,000 エントリのマッピングをサポートします。マッピングサイズは次のように計算できます。

  1. 一般的なマッピングを 形式で記述します。ここで`{"Entry":"/{{entry-path}}","Target":"/{{target-path}}"}`、 `{{entry-path}}`と `{{target-path}}`は使用する実際の値です。

  1. その文字列の文字をカウントし、1 つ (1) を追加します。

  1. その数にサーバー用のマッピングのおおよその数を掛けます。

  ステップ 3 で推定した数が 2.1 MB 未満の場合、マッピングは許容制限内です。

### ターゲットパスの要件
<a name="target-path"></a>
+ バケットまたはファイルシステムパスがユーザー名に基づいてパラメータ化されている場合は、 `${transfer:UserName}`変数を使用します。
+ 関連付けられた IAM ロールがそれらのストレージロケーションにアクセスするために必要なアクセス許可を持っている限り、ターゲットは異なる Amazon S3 バケットまたはファイルシステムを指すように設定できます。
+ すべてのターゲットはスラッシュ (`/`) で始まる必要がありますが、スラッシュで終わることはできません。例えば、 `/amzn-s3-demo-bucket/images`は正しいが、 `amzn-s3-demo-bucket/images `と `/amzn-s3-demo-bucket/images/`は正しくない。

### ストレージに関する考慮事項
<a name="storage-considerations"></a>
+ Amazon S3 は、フォルダが仮想概念としてのみ存在するオブジェクトストアです。Amazon S3 ストレージを使用する場合、Transfer Family は末尾にスラッシュが付いたゼロバイトオブジェクトがない場合でも、STAT オペレーションでプレフィックスをディレクトリとしてレポートします。末尾にスラッシュが付いた適切な 0 バイトのオブジェクトも、STAT オペレーションのディレクトリとして報告されます。この動作については、[「Amazon Simple Storage Service ユーザーガイド」の「フォルダを使用した Amazon S3 コンソールでのオブジェクトの整理](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-folders.html)」で説明されています。 **
+ ファイルとフォルダを区別する必要があるアプリケーションの場合は、Transfer Family ストレージオプションとして Amazon Elastic File System (Amazon EFS) を使用します。
+ ユーザーに論理ディレクトリ値を指定する場合、使用する パラメータはユーザーのタイプによって異なります。
  + サービス管理型ユーザーの場合、論理ディレクトリの値を `HomeDirectoryMappings` に指定してください。
  + カスタム ID プロバイダーユーザーの場合は、 で論理ディレクトリ値を指定します`HomeDirectoryDetails`。

### ユーザーディレクトリ値
<a name="user-dir-values"></a>
+ 論理ディレクトリ値を指定するための パラメータは、ユーザータイプによって異なります。
  + サービス管理型ユーザーの場合、論理ディレクトリの値を `HomeDirectoryMappings` に指定してください。
  + カスタム ID プロバイダーユーザーの場合は、 で論理ディレクトリ値を指定します`HomeDirectoryDetails`。
+ LOGICAL HomeDirectoryType を使用する場合、サービスマネージドユーザー、Active Directory アクセス、および HomeDirectory HomeDirectoryDetails 値を指定できます。指定しない場合、HomeDirectory はデフォルトで になります`/`。

論理ディレクトリの実装方法の詳細については、「」を参照してください[論理ディレクトリの実装](implement-log-dirs.md)。

## Amazon EFS の論理ディレクトリを設定する
<a name="logical-dir-efs"></a>

Transfer Family サーバーが Amazon EFS を使用している場合は、ユーザーが論理ホームディレクトリで作業するには、ユーザーのホームディレクトリを読み取りおよび書き込みアクセスで作成する必要があります。ユーザーは自分の論理ホームディレクトリに対する `mkdir` の権限がないため、このディレクトリを自分で作成することはできません。

ユーザーのホームディレクトリが存在せず、ユーザーが `ls` コマンドを実行すると、システムは次のように応答します。

```
sftp> ls
remote readdir ("/"): No such file or directory
```

親ディレクトリへの管理アクセス権を持つユーザーは、ユーザーの論理ホームディレクトリを作成する必要があります。

## カスタム AWS Lambda レスポンス
<a name="auth-lambda-response"></a>

論理ディレクトリは、カスタム ID プロバイダーに接続する Lambda 関数で使用できます。そのためには、Lambda 関数で`HomeDirectoryType`を**LOGICAL**として指定し、`HomeDirectoryDetails`パラメータに`Entry`と`Target`の値を追加します。例えば、次のようになります。

```
HomeDirectoryType: "LOGICAL"
HomeDirectoryDetails: "[{\"Entry\": \"/\", \"Target\": \"/amzn-s3-demo-bucket/theRealFolder"}]"
```

以下のコードは、カスタム Lambda 認証コールからの成功レスポンスの例です。

```
aws transfer test-identity-provider \
    --server-id s-1234567890abcdef0 \
    --user-name myuser
{
    "Url": "https://a1b2c3d4e5.execute-api.us-east-2.amazonaws.com/prod/servers/s-1234567890abcdef0/users/myuser/config", 
    "Message": "", 
    "Response": "{\"Role\": \"arn:aws:iam::123456789012:role/bob-usa-role\",
                  \"HomeDirectoryType\": \"LOGICAL\",
                  \"HomeDirectoryDetails\": \"[{\\\"Entry\\\":\\\"/myhome\\\",\\\"Target\\\":\\\"/amzn-s3-demo-bucket/theRealFolder\\\"}]\",
                  \"PublicKeys\": \"[ssh-rsa myrsapubkey]\"}", 
    "StatusCode": 200
}
```

**注記**  
`"Url":` の行は、カスタム ID プロバイダーとして API Gateway メソッドを使用している場合にのみ返されます。