で使用するストレージを設定する AWS Transfer Family - AWS Transfer Family

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

で使用するストレージを設定する AWS Transfer Family

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

Amazon S3 バケットを設定する

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

注記

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

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

新しいバケットの作成方法については、Amazon Simple Storage Service ユーザーガイドの「S3 バケットを作成する方法」を参照してください。

注記

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

Amazon S3 アクセスポイント

AWS Transfer Family は、Amazon S3データセットへのきめ細かなアクセスを簡単に管理できる Amazon S3 の機能である Amazon S3 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 によるデータアクセスコントロールの強化」を参照してください。

注記

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

Amazon S3 HeadObject の動作

注記

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

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

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

ファイルの書き込みとリストのみの権限を付与します。

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

注記

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

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

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowListing", "Effect": "Allow", "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET" }, { "Sid": "AllowReadWrite", "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject", "s3:GetObjectVersion" ], "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" ] }, { "Sid": "DenyIfNotFolder", "Effect": "Deny", "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "NotResource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*/" ] } ] }
注記

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

大量のゼロバイトオブジェクトが遅延の問題を引き起こします。

Amazon S3 バケットにこれらのゼロバイト オブジェクトが多数含まれている場合、Transfer Family HeadObject は大量の呼び出しを発行し、処理が遅延する可能性があります。

この問題に対する考えられる解決策の 1 つは、ゼロバイトのオブジェクトをすべて削除することです。次の点に注意してください。

  • 空のディレクトリは存在しなくなります。ディレクトリは、その名前がオブジェクトのキーに含まれている場合にのみ存在します。

  • 誰かが mkdir を呼び出して、物事を何度も壊すことを防ぐことはできません。ディレクトリの作成を防止するポリシーを作成することで、これを軽減できます。

  • 一部のシナリオでは、これらの 0 バイトのオブジェクトが使用されます。たとえば、[/inboxes/customer1000] のような構造があり、受信トレイ ディレクトリは毎日クリーンアップされます。

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

Amazon EFS ファイルシステムを設定する

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

次の点に注意してください。

  • Transfer Family サーバーと Amazon EFS ファイルシステムを使用する場合、サーバーとファイルシステムは同じ に存在する必要があります AWS リージョン。

  • サーバーとファイルシステムは同じアカウントになくてもかまいません。サーバーとファイルシステムが同じアカウントに属していない場合、ファイルシステムポリシーでユーザーロールに明示的なアクセス許可を付与する必要があります。

    複数のアカウントを設定する方法については、「 ユーザーガイド」の「組織内の AWS アカウントの管理AWS Organizations 」を参照してください。

  • ユーザーを設定する際に、各ユーザーに IAM ロールを割り当てます。このロールによって、ユーザーの Amazon EFS ファイルシステムへのアクセスレベルが決まります。

  • Amazon EFS ファイルシステムのマウントの詳細については、「Amazon EFS ファイルシステムのマウント」を参照してください。

AWS Transfer Family と Amazon EFS の連携の詳細については、「Amazon Amazon Elastic File Systemユーザーガイド」の「 AWS Transfer Family を使用して Amazon EFS ファイルシステム内のファイルにアクセスする」を参照してください。

Amazon EFS ファイルの所有権

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ユーザーを設定します。

Amazon EFSユーザーを設定する前に、以下のいずれかを実行できます:

注記

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

Amazon EFS上でTransfer Familyユーザーを設定します。

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

Transfer Family で Amazon EFS ユーザーを設定する手順
  1. PosixProfile フィールドを使用して、Transfer Family のユーザーの EFS UID と GID をマップします。

  2. ユーザーがログイン時に特定のフォルダーで開始するようにしたい場合は、HomeDirectoryフィールドの下に EFS ディレクトリを指定できます。

CloudWatch ルールと Lambda 関数を使用して、プロセスを自動化できます。EFS とやり取りする Lambda 関数の例については、「サーバーレスアプリケーションでの AWS Lambda の Amazon EFS の使用」を参照してください。

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

Amazon EFS のルートユーザーの作成

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

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

サポートされている Amazon EFS コマンド

以下のコマンドは、 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