プライベートサブネット上のEC2インスタンス(LinuxとWindows)に、クライアント端末からファイルをアップロードする構成2選

2023.09.29

はじめに

プライベートサブネット上のEC2インスタンスに、クライアント端末からファイルをアップロードしたい場合、どのような構成がよいか、以下の点を考慮し考えましたので紹介します。

  • 「セキュアで運用負荷が低い接続方法」
  • 「アップロード方法」
  • 「アクセスキーやキーペアの有無」
  • 「EC2インスタンスのOS(LinuxまたはWindows)」

具体的なニーズや要件により、最適な構成は異なりますので、紹介した構成は一例であるという点をご理解ください。

接続方法

EC2インスタンスへの接続方法として、パブリックIPアドレスが不要で、かつ、踏み台ホストやキーペアの管理が不要な次の2つの接続方法がおすすめです。(後述しますがキーペアに関しては必要な場合があります。)

  • Systems Manager Session Manager(以降、セッションマネージャー)
  • EC2 Instance Connect Endpoint(以降、EICエンドポイント)

どちらの方法もクライアント端末からAWS CLIコマンドやマネジメントコンソールで接続できます。

2つの違いは、以下にまとめています。

コストを重視するなら、EICエンドポイントが最適であり、可用性を重視するなら、セッションマネージャーがよいでしょう。

アップロード方法

アップロード方法は、以下の2つがよいかと思います。

  • S3バケット経由でEC2インスタンスにファイルをアップロード
  • クライアント端末からSSHを使用したSCPコマンドやリモートデスクトッププロトコル(以降、RDP)接続を利用したファイルのアップロード

それぞれのアップロード方法を以下で詳細に説明します。

1 アップロード方法:S3バケット経由

この方法では、AWSマネジメントコンソール上でローカルのファイルをS3にアップロードし、その後接続したEC2インスタンスからS3バケット内のファイルをダウンロードします。

セッションマネージャーでWindowsサーバーに接続する場合、RDP接続での方法の他に、AWSマネジメントコンソール上でSystems Managerを使用したPowerShellへの接続が可能です。

Systems Managerを使用したPowerShellへの接続やLinuxサーバーの場合、AWSマネジメントコンソールだけで完結し、アクセスキーやキーペアが不要です。(ただし、WindowsサーバーにRDP接続する方法はキーペアが必要になります)

この方法のデメリットとしては、ストレージのコストが発生することや、クライアント端末からのファイルアップロードと比較するとS3バケットを経由する手間があることです。

2 アップロード方法:クライアント端末からSCPコマンドやRDP接続

次に、クライアント端末から直接SCPコマンドやRDP接続を使用してローカルのファイルをEC2インスタンスに転送する方法を説明します。

Linuxの場合

SCP(Secure Copy)コマンドは、SSH(Secure Shell)を利用したセキュアなファイル転送が可能です。

したがって、OSがLinuxの場合は、SCPコマンドを利用してファイル転送を行います。

Windows

Windowsサーバーの場合、RDP接続を通じて、クライアント端末からWindowsサーバーにファイル転送することができます。

先程説明した、AWSマネジメントコンソール上でSystems Managerを使用したPowerShellへの接続の場合、クライアント端末から直接ファイル転送はできません。

大量のファイルやサイズが大きいファイルを一度に転送すると、転送速度が遅くなり、効率的に大量のファイルを転送することは難しいです。

また、アクセスキーを発行しクライアント端末に設定したり、キーペアが必要になるというデメリットも存在します。

構成1

アップロード方法として、S3バケットを経由したファイルアップロードが最もおすすめです。

これは、アクセスキーやキーペアが不要という利点があります。(RDP接続は除く)

以下に、この構成の図を示します。

下記の構成では、接続方法にEICエンドポイントとセッションマネージャーのどちらでも選択可能であるため、1つの構成図に含めています。

2つの接続方法で、アクセスキーやキーペアの有無や、AWSマネジメントコンソールで完結するかどうかを表にまとめます

接続方法:EICエンドポイント

項目 Windows(RDP接続) Linux
アクセスキー 必要 不要
キーペア 必要 不要
マネコンで完結 しない する

Linuxサーバーであれば、マネジメントコンソールで完結し、キーペアやアクセスキーが不要です。

一方、Windowsサーバーではクライアント端末からAWS CLIを利用する必要があるため、アクセスキーやキーペアが必要となります。

接続方法の具体的な手順については、以下の記事をご覧ください。

S3バケットへのファイルアップロードは、AWSマネジメントコンソール上で行います。

EC2インスタンスがS3バケット内のファイルをダウンロードするコマンドは、下記が参考になります。

接続方法:セッションマネージャー

セッションマネージャーでは、OSがWindowsの場合、RDP接続とPowerShell接続の2種類があります。

項目 Windows(RDP接続) Windows(PowerShell) Linux
アクセスキー 必要 不要 不要
キーペア 必要 不要 不要
マネコンで完結 しない する する

Windowsサーバーの場合、Systems Managerを使用したPowerShellへの接続では、AWSマネジメントコンソール上で完結し、キーペアやアクセスキーが不要です。

マネジメントコンソールからの接続方法は、下記をご参考ください

構成2

ファイル転送はS3バケット経由ではなく、クライアント端末から直接ファイルを転送する必要がある場合は、こちらの構成が考えられます。

接続方法は、下記の通り、EICエンドポイントとセッションマネージャーどちらも1つの構成図にいれてます。

接続方法:EICエンドポイント

項目 Windows(RDP接続) Linux
アクセスキー 必要 必要
キーペア 必要 必要
マネコンで完結 しない しない

クライアント端末からAWS CLIコマンドを利用するため、キーペアやアクセスキーが必須です。

Linuxの場合

Linuxサーバーの場合は、下記のコマンドで、EC2インスタンスへの接続やファイル転送が可能です。

//接続のみ
$ ssh -i my-key-pair.pem ec2-user@i-0123456789example \
    -o ProxyCommand='aws ec2-instance-connect open-tunnel --instance-id i-0123456789example'

//ファイル転送
$ scp -i my-key-pair.pem \
 -o ProxyCommand='aws ec2-instance-connect open-tunnel --instance-id i-0123456789example' \
 ./test.txt ec2-user@i-0123456789example:/home/ec2-user/

Windowsの場合

下記の記事通りに、EICエンドポイントでRDP接続設定まで行います。

ファイル転送方法については、次節で解説します。

RDP接続時のファイル転送方法

私のPCがMacなので、MacからRDP接続してファイル転送する方法を解説します。もちろんWindowsでもファイル転送可能です。

クライアント端末がMacの場合、WindowsサーバーにRDP接続するため、Microsoft Remote Desktopアプリケーションを開きます。

編集から、PC nameをlocalhost:13389(EICエンドポイントのローカルポート)にし、Foldersタブで、Windowsサーバーに転送したいファイルが存在するローカルのフォルダを指定します。

ファイル転送と言いましたが、厳密には、転送ではなくクライアント端末のフォルダをWindowsサーバーと共有します。

今回は、Mac内の/Users/hiraiyuji/testフォルダをWindowsサーバーと共有します。

クライアント端末の/Users/hiraiyuji/test配下には、以下のファイルが存在します。

設定完了後、RDP接続を行います。ユーザー名とパスワードを入力するとRDP接続ができます。

Windowsサーバー内で、クライアント端末との共有フォルダが確認できます。

中身もクライアント端末のファイルと同じです。

このファイルをWindowsサーバーの別のディレクトリに移動させることで、クライアント端末のファイルをWindowsサーバーに転送(コピー)できます。

今回、手動でのファイル転送を紹介しました。基本的には、AWS が提供するツールを使って、ローカルPCからタスクスケジューラーなどを利用した自動、かつ、インターネット経由で直接プライベートサブネット上のWindowsサーバーへのファイル転送は実現できません。

Windowsサーバーに自動でファイル転送するには、以下の方法が考えられます。どちらもパブリックサブネットにサーバーやロードバランサーを起動します。

  • パブリックサブネットに踏み台サーバー(Windowsサーバー)を起動して、踏み台サーバー経由でファイル転送する
  • パブリックサブネットにApplication Load Balancer (ALB)を設置し、Windowsサーバー側でファイルアップロードを受け付ける設定をWebサーバーのIISで行う。そして、PC側のコマンドでURLを指定してファイル転送を行う。

接続方法:セッションマネージャー

項目 Windows(RDP接続) Linux
アクセスキー 必要 必要
キーペア 必要 必要
マネコンで完結 しない しない

EICエンドポイントと同じで、クライアント端末からAWS CLIコマンドを利用するため、キーペアやアクセスキーが必須です。

実際の接続方法は、下記をご参考ください

WindowsサーバーにRDP接続によるファイル転送方法は、EICエンドポイントと同じ、クライアント端末とのフォルダ共有によって実現できます。 先ほどと同様、AWS が提供するツールを使って、自動でのファイル転送はできません。

最後に

プライベートサブネット上のEC2インスタンスに、ファイルをアップロードする構成を2つご紹介しました。

これらの構成が全ての要件に最適というわけではありませんが、ご参考頂ければ幸いです。

参考