4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

AWS Transfer Family を利用した FTP を触ってみた

Last updated at Posted at 2022-03-06

はじめに

AWS Transfer Family は、AWS で提供されている SFTP, FTPS, FTP のプロトコルが使える安全なファイル転送のサービスです。転送先は、S3 と EFS を選べます。オンプレミスで FTP などを利用しているシステムがある場合、マネージドサービスとして AWS に管理負担を任せられます。

今回は、AWS Transfer Family で FTP の利用方法を検証する記事です。以下の チュートリアルを基に進めていきます。
チュートリアル : https://docs.aws.amazon.com/ja_jp/transfer/latest/userguide/getting-started.html

FTP のサポートしているモード

FTP や FTPS では、アクティブモードとパッシブモードの2種類の通信方式があります。AWS Transfer Family では、パッシブモードのみ利用可能です。アクティブモードは利用できません。

次の Document に記載されています。
https://docs.aws.amazon.com/ja_jp/transfer/latest/userguide/transfer-file.html

  • File Transfer Protocol (FTP) および FTPS では、パッシブモードのみがサポートされています。

また、パッシブモードの時にデータチャネルとして利用されるポートの範囲は「8192–8200」です。

これも次の Document に記載されています。
https://docs.aws.amazon.com/ja_jp/transfer/latest/userguide/create-server-ftp.html

Transfer Family 用の FTP サーバは、ポート 21(コントロールチャネル)およびポート範囲 8192-8200(データチャネル)で動作します。

Security Group の作成

Transfer Family の FTP サーバーに割り当てる Security Group が必要です。インバウンドルールとして、ポート21 と、8192-8200 を許可しましょう。

image-20220306123349906.png

Transfer Family の作成

マネージメントコンソールで、Transfer Family のページに移動して作成を進めていきます。

image-20220306121125592.png

FTP を使いたいので、FTP のみ選択します。複数選択することも可能です。

image-20220306121451332.png

FTP を利用する場合は、AWS Directory Service か Custom Identity Provider で認証情報を連携する必要があります。今回は、AWS Directory Service で Microsoft AD を利用していきます。(Microsoft AD は、事前に作成しているものを利用します)

image-20220306122350664.png

Transfer Family が稼働する VPC と Subnet を選択します。

image-20220306123605274.png

Security Group も選択して、Next を押します

image-20220306123645163.png

連携先として S3 を選択して、Next を押します

image-20220306123721351.png

デフォルトの設定のまま進めます。

  • CloudWatch Log に出力するための IAM Role を自動作成
  • セキュリティーポリシーはデフォルトのまま

image-20220306123950340.png

Banner には適当な文字列をいれて Next を押します

image-20220306124104213.png

Create を押します

image-20220306124120397.png

State が Starting のものが作成されました

image-20220306124158924.png

一定時間後、Online になります。自分の環境では1分くらいで Online になりました。

image-20220306124240795.png

VPC Endpoint の確認

Transfer Family を作成すると、自動的に裏側で VPC Endpoint が作成されています。この DNS names を使って、FTP アクセスをしていく形です。

vpce-0d70af354f8cf57ff-gltij020.vpce-svc-0775a3f847520ae1d.ap-northeast-1.vpce.amazonaws.com

image-20220306130633320.png

Microsoft AD の Group にアクセス権限を付与

Microsoft AD と Transfer Family を連携しました。Microsoft AD から特定のグループをピックアップして、FTP のアクセス権限を付与できます。今回は、2 つのグループと、それに紐づくユーザーを作成していきます。

次に構成図を載せます。

image-20220306143827291.png

Microsoft AD 上に、2つのグループを作成します

  • transferfamily-admin-group01 : 全部の S3 Bucket にアクセスできるように、IAM Policy は none を指定
  • transferfamily-normal-group01 : 特定の S3 Bucket にしかアクセスできない IAM Policy を自動生成

上記構成図のリソースを作成していきましょう。

S3 Bucket の作成

2つのバケットを作成しました。

image-20220306132708374.png

Microsoft AD 上でグループとユーザーの作成

Microsoft AD のユーザーとコンピューターを開いて、グループを作成します。

image-20220306132916626.png

グループ名を指定します

image-20220306133011575.png

作成されました

image-20220306133046491.png

2つのグループを作成します

image-20220306133120632.png

ユーザーを作成します

image-20220306133144672.png

ユーザー名を指定して、次へ

image-20220306133255807.png

パスワードを指定して次へ

image-20220306133328931.png

作成

image-20220306133346087.png

User が作成されました

image-20220306133401122.png

同様に2つ目のユーザーも作成しました

image-20220306133445328.png

グループに追加をしていきます。

image-20220306133526885.png

指定します。

image-20220306133608371.png

2つ目のユーザーも同様にグループに追加します。

Microsoft AD のグループ SID を確認

Powershell を開いて、次のコマンドを実行して、作成したグループの SID を確認します。

Get-ADGroup -Filter {samAccountName -like "transferfamily*"} -Properties * | Select SamAccountName,ObjectSid

実行例

PS C:\Users\Admin> Get-ADGroup -Filter {samAccountName -like "transferfamily*"} -Properties * | Select SamAccountName,ObjectSid

SamAccountName                ObjectSid
--------------                ---------
transferfamily-admin-group01  S-1-5-21-3250835705-2212778946-1831747600-2119
transferfamily-normal-group01 S-1-5-21-3250835705-2212778946-1831747600-2120


PS C:\Users\Admin>

IAM Role の作成

Create Role

image-20220306134034830.png

Transfer を選択

image-20220306134114547.png

Amazon S3 Full Access を選択

image-20220306134621295.png

名前を入力

image-20220306134656258.png

Create

image-20220306134708072.png

Transfer Family 上でグループに権限付与

Transfer Family で、Microsoft AD で作成したグループに対して権限を付与します。該当のサーバーを選択します。

image-20220306134900809.png

Add access で権限設定をしていきます。

image-20220306134952496.png

transferfamily-admin-group01 用のアクセス権限です。

Polocy を None しており、IAM Role も全部の S3 Bucket へのアクセス許可を入れているため、すべてのBucket にアクセスが出来ます。

image-20220306135140287.png

更に、normal-group の設定を進めていきます。Add access を押します。

image-20220306135303920.png

transferfamily-normal-group01 の権限設定です。このグループは、S3 Bucket の transferfamily-bucket01 に限定してアクセスを許可する設定になっています。

  • Home Directory : S3 Bucket の名前を指定。また、S3 上の特定のディレクトリ名として homedir を指定

image-20220306142740058.png

なお、この時に自動生成される IAM Policy の内容は次の通りです。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowListingOfUserFolder",
      "Action": [
        "s3:ListBucket"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::${transfer:HomeBucket}"
      ],
      "Condition": {
        "StringLike": {
          "s3:prefix": [
            "${transfer:HomeFolder}/*",
            "${transfer:HomeFolder}"
          ]
        }
      }
    },
    {
      "Sid": "HomeDirObjectAccess",
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:GetObject",
        "s3:DeleteObject",
        "s3:GetObjectVersion"
      ],
      "Resource": "arn:aws:s3:::${transfer:HomeDirectory}*"
    }
  ]
}

設定されました

image-20220306140130112.png

S3 上で HomeDir の作成

権限設定の時に指定した、Home Directory を作成しました

image-20220306143308438.png

アクセス確認

VPC Endpoint 宛に FTP で確認していきましょう!

Amazon Linux2 : Admin

まず、アップロード用のテストファイルを生成します

mkdir ~/temp/transferfamily/
cd ~/temp/transferfamily/
echo "Hi! I am Test File with Transfer Family!" > test.txt

ftp コマンドで VPC Endpoint に接続をします。

ftp vpce-0d70af354f8cf57ff-gltij020.vpce-svc-0775a3f847520ae1d.ap-northeast-1.vpce.amazonaws.com

ユーザー名の入力を求められました。

> ftp vpce-0d70af354f8cf57ff-gltij020.vpce-svc-0775a3f847520ae1d.ap-northeast-1.vpce.amazonaws.com
Trying 10.0.102.129...
Connected to vpce-0d70af354f8cf57ff-gltij020.vpce-svc-0775a3f847520ae1d.ap-northeast-1.vpce.amazonaws.com (10.0.102.129).
220 Service ready for new user.
Name (vpce-0d70af354f8cf57ff-gltij020.vpce-svc-0775a3f847520ae1d.ap-northeast-1.vpce.amazonaws.com:ec2-user):

Microsoft AD 上の transferfamily-admin を入力します。なお、下記の「ユーザーログイン名 (Windows 2000 より前)」の名前を入力する必要があります。

image-20220306141117962.png

パスワードの入力を求められました。

Name (vpce-0d70af354f8cf57ff-gltij020.vpce-svc-0775a3f847520ae1d.ap-northeast-1.vpce.amazonaws.com:ec2-user): transferfamily-admin
331-Koreha Transfer Family no Test desu.
331 User name okay, need password for transferfamily-admin-user01.
Password:

パスワードを入れると正常にログインできます

Password:
230 User logged in, proceed.
Remote system type is UNIX.
ftp>

ls と打つと、すべての S3 Bucket が確認できます。admin 権限を付与している想定なので、正しい挙動です。

ftp> ls
227 Entering Passive Mode (10,0,101,37,32,5)
150 File status okay; about to open data connection.
drwxr--r--   1 - -            0 Jan  1  1970 aes-siem-11111111111111-geo
drwxr--r--   1 - -            0 Jan  1  1970 aes-siem-11111111111111-log
drwxr--r--   1 - -            0 Jan  1  1970 aes-siem-11111111111111-snapshot
drwxr--r--   1 - -            0 Jan  1  1970 alb-hostbaserouting-accesslog01
<省略>

current directory は、トップの / です

ftp> pwd
257 "/" is current directory.

cd で移動します

ftp> cd transferfamily-bucket01
250 Directory changed to /transferfamily-bucket01

バイナリモードに変更します

ftp> bin
200 Command TYPE okay.

Put コマンドで手元の text ファイルをアップロードします

ftp> put test.txt
local: test.txt remote: test.txt
227 Entering Passive Mode (10,0,101,37,32,7)
150 File status okay; about to open data connection.
226 Transfer complete.
41 bytes sent in 2.1e-05 secs (1952.38 Kbytes/sec)

image-20220306141750310.png

正常にダウンロードできました!

image-20220306141819304.png

ftp は exit で抜けておきましょう

ftp> exit
221 Goodbye.

Amazon Linux 2 : Normal

次に、特定の Bucket にのみアクセス許可を与えているグループの挙動を確認してみます。

ftp vpce-0d70af354f8cf57ff-gltij020.vpce-svc-0775a3f847520ae1d.ap-northeast-1.vpce.amazonaws.com

ユーザー名 transferfamily-norma を入力します

Name (vpce-0d70af354f8cf57ff-gltij020.vpce-svc-0775a3f847520ae1d.ap-northeast-1.vpce.amazonaws.com:ec2-user): transferfamily-norma

パスワードを聞かれるので、入力してログイン出来ました。

Password:
230 User logged in, proceed.
Remote system type is UNIX.
ftp>

ログイン直後のディレクトリは、権限設定時の homedirとなっています。

ftp> pwd
257 "/transferfamily-bucket01/homedir" is current directory.
ftp>

なお、一個上のディレクトリに移動しても、そこのファイルは何も見えません

ftp> pwd
257 "/transferfamily-bucket01" is current directory.
ftp> ls -la
227 Entering Passive Mode (10,0,100,88,32,7)
150 File status okay; about to open data connection.
226 Closing data connection.
ftp>

一番上のルートディレクトリに移動しても、これも他の S3 Bucket は見えませんでした。

ftp> cd /
250 Directory changed to /
ftp> pwd
257 "/" is current directory.
ftp> ls -la
227 Entering Passive Mode (10,0,100,88,32,6)
150 File status okay; about to open data connection.
226 Closing data connection.
ftp>

Homedir に戻ります

ftp> cd /transferfamily-bucket01/homedir
250 Directory changed to /transferfamily-bucket01/homedir
ftp>

バイナリモードに変更します

ftp> bin
200 Command TYPE okay.

Put コマンドで手元の text ファイルをアップロードします

ftp> put test.txt
local: test.txt remote: test.txt
227 Entering Passive Mode (10,0,101,37,32,7)
150 File status okay; about to open data connection.
226 Transfer complete.
41 bytes sent in 2.1e-05 secs (1952.38 Kbytes/sec)

S3 上にアップロードできました

image-20220306143725233.png

Windows : Admin

WinSCP で接続をしてみます

  • ホスト名 : VPC Endpoint を指定
  • ユーザー名 : Microsoft AD のユーザー名とパスワードを指定

image-20220306144251380.png

右側の画面が、すべての S3 Bucket が見えています。

image-20220306144441166.png

特定の Bucket を開いて、ファイルのアップロード・ダウンロードが出来ました

image-20220306144625235.png

Windows : Normal

今度は、アクセス制限をしている Normal Group でも接続をしてみます。

image-20220306144745936.png

接続が正常に出来て、Homedir が開けました。正常にファイルのダウンロード・アップロードが出来ます。

image-20220306144840311.png

また、上のディレクトリに移動してみましょう。

image-20220306144931263.png

何もファイルは見えません

image-20220306144942144.png

更に上に登っても、他の S3 Bucket は見えません

image-20220306144957825.png

検証を通じてわかったこと

  • Transfer Family を利用して、Linux・Windows ともに FTP 転送が出来た
  • パッシブモードのみサポートなど制限がある。詳細は Document を参照
  • Transfer Family の権限設定ページで、どのグループが、どの S3 Bucket に対してアップロードできるかコントロール可能
  • 指定した S3 Bucket 以外は、存在自体確認できない

参考URL

クライアントを使用してファイルを転送する
https://docs.aws.amazon.com/ja_jp/transfer/latest/userguide/transfer-file.html

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?