Amazon Web Services ブログ

IP ホワイトリストを使用して AWS Transfer for SFTP サーバーを保護する

異なる業界からの AWS のお客様は、標準の SSH ファイル転送プロトコル (SFTP) を使って他の組織とデータを交換する必要があります。このようなデータの例には、財務記録、メディアファイル、あるいは健康記録や個人の財務データなどの機密情報が含まれます。SFTP は、SSH プロトコルで採用されているものと同じ公開キーや秘密キーの暗号化メカニズムを使用し、これらのファイルを転送するための安定したかつセキュアな転送メカニズムを提供します。AWS Transfer for SFTP (AWS SFTP) は、データが Amazon Simple Storage Service (Amazon S3) に保存されている場合、SFTP 経由の転送を可能にする完全マネージドサービスを提供し、こうしたニーズを満たします。

パブリックエンドポイントまたは Virtual Private Cloud (VPC) がホストするエンドポイントを使用することで、AWS SFTP サーバーをデプロイできます。パブリックエンドポイントを使用して、AWS SFTP サーバーに迅速かつ簡単にアクセスできます。または、VPC ホストのエンドポイントを使うことで、SFTP サーバーへのアクセスをより詳細に制御できます。

VPC でホストするエンドポイントのセキュリティを高めるため、VPC セキュリティグループと Elastic IP アドレスのサポートを最近追加しました。セキュリティグループを使用すれば、SFTP アクセスを特定のパブリック IPv4 アドレス範囲または IPv4 アドレス範囲に制限するルールを適用できます。許可された IP アドレスリストに含まれないエンドユーザーは、サーバーに接続できません。加えて、Elastic IP アドレスをサーバーエンドポイントに関連付けることができます。このため、ファイアウォールの背後にいるエンドユーザーを、静的 IP またはフェイルオーバー用の IP ペアで SFTP サーバーへのアクセスをホワイトリストに登録できます。

このブログでは、これらの新機能を使用して AWS SFTP サーバーのセキュリティをさらに向上させる方法をご紹介します。まず、AWS SFTP の一般的なデプロイシナリオでの基本的なアーキテクチャコンポーネントについて説明します。次に、このアーキテクチャの設定方法を見ていきます。最後に、アーキテクチャが正しく設定されていることをテストする方法について解説します。

アーキテクチャ

次の図は、セキュアな AWS SFTP サーバーを構築し、インターネット経由で SFTP クライアントが利用できるようにするための主要なコンポーネントを示しています。これらのコンポーネントには、サーバー自体、VPC エンドポイント、2 つのアベイラビリティーゾーンの Elastic IP アドレス、セキュリティグループ、サーバーへのインターネットアクセスを提供するインターネットゲートウェイが含まれます。

データセンター内のクライアントは、パブリック IPv4 Elastic IP または CNAME がサービス提供の URL (<server-id>.server.transfer.<region>.amazonaws.com) を指すカスタムドメインを使用して、エンドポイントにグローバルにアクセスできます。さらに、SFTP サーバーは、プライベートエンドポイントアドレスを使用して、同じ VPC 内のクライアント、VPC ピアリングを使用する他の VPC、または AWS Direct Connect もしくは VPN を介したオンプレミス環境からアクセスが可能です。これは便利な機能ですので、こうした VPC 接続環境で発生したトラフィックに対して、インターネットゲートウェイの料金をお支払いいただく必要はありません。

こちらの図は、セキュアな AWS SFTP サーバーを構築し、インターネット経由で SFTP クライアントが利用できるようにするための主要なコンポーネントを示しています。

サーバーを作成する際、それをホストする VPC を選択し、Elastic IP アドレスを関連付けます。サービスは VPC でホストするサーバーエンドポイントを自動的に作成し、Elastic IP アドレス (および上記のプライベート IP アドレス) を介してエンドポイントにアクセスできるようにします。そのため、IP アドレスルールを使用してセキュリティグループを作成し、それらを VPC エンドポイントに適用して、SFTP クライアントがエンドポイントにアクセスできるホストを指定できます。オプションで、VPC または VPC 接続環境のどのリソースがこのエンドポイントにアクセスできるかに関するルールを設定することもできます

次のセクションでは、これらの各手順について詳しく説明していきます。

セットアップ

開始するには、AWS CloudFormation テンプレート (こちらにある) を使用して、AWS リージョンに上記の VPC 環境を作成します。テンプレートは、VPC、2 つのサブネット、およびインターネットゲートウェイを作成するときに、2 つの Elastic IP アドレスを割り当てます。 AWS SFTP では、マルチ AZ アーキテクチャを使って高可用性を実現しています。SFTP サービスは、2 つのサブネットを作成しそれぞれに Elastic IP アドレスを割り当てることにより、アベイラビリティーゾーンの損失に耐えることができます。

注: 今回のソリューションでは Elastic IP アドレスを使用しますが、EC2 BYOIP を使って独自の静的 IP アドレスをインポートすることもできます。既存の SFTP サーバーから移行中で、同じエンドポイント IP アドレスを維持する必要がある場合には、BYOIP 機能は特に便利です。

AWS CloudFormation スタックが作成されると、出力タブに以下が表示されます。

AWS CloudFormation スタックが作成されると、VPC の ID、サブネットを作成した AZ、Elastic IP アドレスが表示されます

VPC の ID、サブネットを作成したアベイラビリティーゾーン、Elastic IP アドレスを確認できます。これらのリソースを作成したら、AWS SFTP サーバーの作成に進むことができます。

まず、AWS SFTP マネジメントコンソールに移動し、[サーバーを作成する] をクリックします。次に、[エンドポイントの設定] で、VPC がホストするエンドポイントとして [VPC] を選択します。今回は、インターネット向けサーバーを作成するので、そのオプションを選択します。[VPC] ドロップダウンメニューから、AWS CloudFormation テンプレートの出力からメモした ID の VPC を選択します。オプションで、クライアントがエンドポイントに接続するのに使用できるカスタムホスト名を割り当てることができます。この例では、サービスが提供するホスト名を使用します (これが Elastic IP にどう関連するかについては、次のセクションで詳しく説明します)。次のスクリーンショットをご参照ください。

エンドポイントの設定

VPC を選択すると、選択できる 2 つのアベイラビリティーゾーンだけが、AWS CloudFormation テンプレートがサブネットを作成するために選択したものであることがわかります。それぞれを選択してから、各アベイラビリティーゾーンの左側のドロップダウンメニューで [サブネット ID] を、右側のドロップダウンメニューで [Elastic IP] の 1 つをクリックします。

選択できるアベイラビリティーゾーンは 2 つだけで、サブネットを作成するために AWS CloudFormation テンプレートが選択したものであることがわかります

: このサービスでは最大 3 つのアベイラビリティーゾーンを選択できます。HA のために、複数のアベイラビリティーゾーンを選択することをお勧めします。

上記のようにすべて選択したら、[サーバーを作成する] ボタンをクリックします。 SFTP サーバーの作成には数分かかります。作成を完了し、サーバーのステータスが [オンライン] と表示されたら、新しいサーバーを選択して詳細を取得します。

サーバーが作成されると、サービスが自動的に作成した 2 つの主要なリソースが表示されます

上のスクリーンショットでは、サービスが自動的に作成した 2 つの主要なリソースを確認できます。

1 つ目に、サーバーを VPC にデプロイすることを選択したため、VPC エンドポイントをサービスにが自動的に (上記の「エンドポイントタイプ」に示すように) 作成しています。SFTP サーバー間のすべてのネットワークトラフィックは、このエンドポイントを通過します。このエンドポイントにセキュリティグループを適用して、SFTP クライアントをホワイトリストに登録します。

2 つ目に、サーバーをインターネットに接続することを選択したため、サーバーに DNS 名が指定されています。このDNS名は、SFTPクライアントがサーバーにアクセスするために使用するホスト名です (「エンドポイント」の下に示されています)。AWS SFTP は、「<serverid>.transfer.<region>.amazonaws.com.」という形式の DNS 名のエイリアスレコードを自動的に作成しました。 サーバーに割り当てた 2 つの Elastic IP アドレスを含む ANAME レコードを作成しました。サービスコンソールには、Route 53 CNAME を使用してエンドポイントにアクセスするためにクライアントが使用できるホスト名に、カスタムドメインを割り当てるオプションがあります。

デフォルトでは、VPC のセキュリティグループはエンドポイントに割り当てられています。別のセキュリティグループを作成して使用できます。このグループで、SFTP サーバーにアクセスするためにクライアントの IP アドレスを最終的にホワイトリストに登録します。[VPC] サービスに AWS マネジメントコンソールで移動し、[セキュリティグループ] をクリックします。ページの上部で、[セキュリティグループを作成する] をクリックします。次のページで名前と説明を指定し、AWS CloudFormation テンプレートが作成した VPC にセキュリティグループを割り当てます。[作成する] をクリックし、セキュリティグループを作成します。このセキュリティグループを作成したら、それを VPC エンドポイントにも割り当てる必要があります。AWS SFTP サーバーのコンソールページに戻ります。[エンドポイントのタイプ] で、VPC エンドポイントのリンク (vpce-<endpointid>) 先に移動します。これで、VPC エンドポイントのエンドポイントコンソールページが起動します。[セキュリティグループ] タブで、[セキュリティグループを編集する] をクリックします。スクリーンショットの例をご覧ください。

[セキュリティグループ] タブで、[セキュリティグループを編集する] をクリックします

セキュリティグループを管理するページで、[デフォルトのVPCセキュリティグループ] のボックスをオフにし、新しく作成したセキュリティグループのボックスをオンにします。[保存] をクリックしてプロセスを完了します。

プライベート VPC アクセスのオプション設定

同じ VPC、他の VPC (ピアリング経由)、またはオンプレミス環境 (ダイレクトコネクト/ VPN 経由) のクライアントからのトラフィックが、パブリック IP スペースを経由せずに SFTP サーバーのエンドポイントに到達できるようにすることもできます。場合によっては、特定の VPC がインターネットへのトラフィックの通過を許可されておらず、NAT ゲートウェイまたはインターネットゲートウェイがない場合があります。これらのユースケースでは、クライアントはエンドポイントのプライベート IP アドレスを使用して、サーバーのエンドポイントにアクセスできます。これらのアドレスとそれに関連する DNS 名を取得するには、VPC コンソールのエンドポイント領域にある SFTP サーバーエンドポイントの [詳細] タブと [サブネット] タブを確認します。

[詳細] タブのスクリーンショット

[詳細] タブのスクリーンショット

[サブネット] タブのスクリーンショット

[サブネット] タブのスクリーンショット

他の VPC からのトラフィックが SFTP サーバーに到達できるようにするには、VPC ピアリングセッションを確立する必要があります。 VPC ピアリングセッションは、単一のアカウント内の VPC に限定されず、他のアカウントまたはパートナー組織への直接アクセスを提供するために使用される場合もあります。VPC ピアリングセッションが確立されたら、適切なルートを追加して、それらの VPC 内のサブネットが相互に到達できるようにする必要があります。ピア VPC から発信されたトラフィックが SFTP サーバーエンドポイントに到達できるようにするには、最後に、特定の IP またはセキュリティグループの範囲をホワイトリストに登録します。ホワイトリストに登録した IP を追加する例については、以下のテスト手順をご参照ください。

テスト

Linux も敷くは macOS システムのターミナルを介して、または Cyber​​duck、WinSCP、Filezilla などのサードパーティツールを使用して、SFTP サーバーへのアクセスを簡単にテストできます。サーバーに接続する前に、サーバーがユーザーアカウントを作成できるように、まず AWS SFTP コンソールページに戻る必要があります。

注: この例では、SFTP サーバーにサービスが管理する ID プロバイダーを使用し、SSH キーを使ってユーザーを認証します。AWS Transfer for SFTP ではカスタム認証方法もサポートしているため、パスワード認証サードパーティプロバイダーを介した認証を行うことができます。

ユーザーアカウントを作成すると、ユーザーの作成時に使用した公開キーに対応する秘密キーを使用して、SFTP サーバーへの接続を試みることができます。SFTP サーバーのホスト名を使用して、優先する SFTP クライアントを使って接続を試みます。この時点で、次のスクリーンショットに示されているようなタイムアウトが発生します。これは、適切なポート経由で VPC に到達するように IP アドレスが設定されていないためです。

SFTP サーバーのホスト名を使用して、優先する SFTP クライアントを使って接続を試みます。この時点で、タイムアウトが発生します

以前に作成したセキュリティグループの AWS マネジメントコンソールの設定ページに戻ります。設定ページで、[インバウンドルール] タブをクリックし、[ルールを編集する] を選択します。[SSH] を [タイプ] として選択します。これで、SFTP の適切なプロトコルとポート範囲が自動的に選択されます。この演習では、[マイ IP] ([ソース] の下にある) を選択します。これで、コンソールにログインした IP アドレスが自動的に入力されます。説明を入力し、[ルールを保存する] をクリックします。

説明を入力し、[ルールを保存する] をクリックします。

新しいルールをセキュリティグループに追加したら、[閉じる] をクリックします。セキュリティグループに、ポート 22 経由で VPC への IP アドレスアクセスを許可するインバウンドルールが表示されます。これで、SFTP サーバーにアクセスできます。

このルールが整ったので、SFTP クライアントからセッションへの接続を再度試みます。次のスクリーンショットに示すように、SFTP セッションに接続できるようになります。オプションで、ファイルをアップロードし、S3 コンソールで表示できます。

このルールが整ったので、SFTP クライアントからセッションへの接続を再度試みます。

クリーンアップ

この投稿の中で作成したリソースをクリーンアップするには、AWS SFTP サーバーを削除します。サーバーを削除したら、前にデプロイした AWS CloudFormation スタックの削除に進むことができます。これらの手順を実行すると、この投稿に沿った手順を行ったことで起こる追加費用が発生しなくなります。

まとめ

このブログでは、VPC セキュリティグループを使用して、AWS SFTP サーバーへのアクセスをホワイトリストに登録する方法をご紹介しました。まず、AWS CloudFormation テンプレートをデプロイし、アーキテクチャのサンプルを設定するために必要なネットワーク要素を設定しました。次に、VPC 内でホストされているエンドポイントを持つ新しい AWS SFTP サーバーを作成しました。その後、その VPC に関連付けられたセキュリティグループを使用して、特定の IP のみへのサーバーエンドポイントへのアクセスをホワイトリストに登録し、オプションでアカウント内外のピアリングされた VPC にアクセスする方法を示しました。

この投稿で説明している新機能を利用すれば、SFTP エンドポイントへの AWS 転送を、信頼できる顧客やビジネスパートナーの IP に制限できるようになります。 これにより、セキュリティの層が追加され、AWS SFTP がサポートしている認証メカニズムに加えて、不明または信頼できないエンティティがエンドポイントに到達することを禁止できます。さらに、2 つの Elastic IP でエンドポイントをホストする主な利点には、ファイアウォールが URL ベースのフィルタリングをサポートしていない場合に、顧客が SFTP アウトバウンドをフィルタリングできるということがあります。これらの利点は、財務記録や個人の健康情報 (PHI) などの厳しく規制されたデータを操作するときに役立ちます。

このブログ投稿をお読みいただき、ありがとうございます。ご質問があれば、コメント欄にご記入ください。AWS Transfer for SFTP の詳細については、次のリンクをご参照ください。