プライベート環境のWindowsサーバーにRDP接続し、S3にファイルをアップロード

プライベート環境のEC2(Windowsサーバ)にSSMポートフォワードを使ってRDP接続しS3へファイルアップロード
2021.10.28

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは!
AWS事業本部コンサルティング部の繁松です!

今回はプライベート環境のEC2(Windowsサーバ)にSSMポートフォワードを使ってRDP接続しS3へファイルアップロードを行います。
コンソール画面からVPC、EC2を構築する手順も記載します。
環境構築済みの場合はSSMをつかったRDP接続の準備から初めてください。

構成図

前提

  • EC2はWindows 2019 でprivate環境に構築
  • S3のエンドポイントはゲートウェイ型を選択
  • ローカルPCのAWS CLIは設定済みで、SSMに接続可能な権限がある

VPC,Subnetの作成

VPC

まずVPCの作成を行います。

AWSコンソールよりVPCを開き、[VPCを作成]を選択

名前タグ:test-vpc
IPv4 CIDRブロック:10.0.0.0/16
※名前タグ、IPの範囲は環境に合わせて変更してください。
[VPCを作成]を選択

Subnet

VPCの作成が完了したら、Subnetを作成します。

[サブネット] → [サブネットを作成]を選択

VPC ID:先ほど作成したVPCを選択
サブネット名:test-private-subnet
アベイラビリティーゾーン:指定なし
IPv4 CIDRブロック:10.0.1.0/24
※サブネット名、IPの範囲は環境に合わせて変更してください。
[サブネットを作成]を選択

EC2(Windowsサーバー)の作成

EC2インスタンスを作成します。

[インスタンス] → [インスタンスを起動]を選択

今回AMIは[Microsoft Windows Server 2019]を選択します。
インスタンスタイプは必要なサイズを選択してください。

ネットワーク:先ほど作成したVPCを選択
サブネット:先ほど作成したPrivate subnetを選択
今回はその他の箇所はデフォルトで作成していきます。

セキュリティグループ名を入力し、ルールを削除し、[確認と作成]
警告が出ますが、今回セキュリティグループのインバウンドは不要なのでそのまま進みます。

キーペアの作成しダウンロード後、[インスタンスの作成]を選択

SSMをつかったRDP接続の準備

接続用パスワードの取得

RDP接続時に必要なパスワードを取得します。

作成したインスタンスを選択し、[接続]

[RDPクライアント] → [パスワードを取得]を選択

先ほどダウンロードしたキーファイルを参照し、パスワードを復号化
ここのパスワードはRDP接続を行う時に使用するので、メモしてください。

EC2にロール権限の追加

EC2にSSM接続用と、S3へのアップロード用のロールを作成、権限追加します。

[VPC] → [ロールの作成]を選択

[AWSサービス][EC2]を選択し、[次のステップ:アクセス権限]

アクセス権限ポリシーはSSM接続用とS3アップロード用で2つの権限を追加します。

S3アップロード用は対象のバケットのみ操作可能なポリシーを作成します。
[ポリシーの作成] を選択

別ウィンドウが開くのでJSONに切り替え以下の内容を入力し、[次のステップ:タグ]

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::バケット名",
                "arn:aws:s3:::バケット名/*"
            ]
        }
    ]
}

今回S3バケット名は[windows-test-20211027]なので以下の内容で作成しています。

ポリシーの名前を入力し、[ポリシーの作成]

ロール作成の画面に戻り、先ほど作成したS3アップロード用のポリシーとSSM接続用のポリシーを選択します。
SSM接続用:AmazonSSMManagedInstanceCore
S3アップロード用に作成したポリシー:s3-windows-test

ロール名を入力し[ロールの作成]
作成したら、EC2の画面を開きます。

作成したEC2を選択し
[アクション] → [セキュリティ] → [IAMロールの変更]を選択

作成したIAMロールを選択し、[保存]

VPCエンドポイントの作成(SSM接続用)

private環境なのでエンドポイントの作成を行います。
以下のVPCエンドポイントを作成します。
- com.amazonaws.ap-northeast-1.ssm
- com.amazonaws.ap-northeast-1.ssmmessages
- com.amazonaws.ap-northeast-1.ec2messages

VPCのDNSホスト名が有効化されていない場合は有効化します。
作成したVPCを選択し[アクション] → [DNSホスト名の編集]

有効化にチェックを入れ、[変更を保存]

[VPC] → [エンドポイント] → [エンドポイントの作成]を選択

対象の[サービス][VPC][サブネット]を選択します。

エンドポイント用のセキュリティグループを作成します。

インバウンドルールは以下のように設定し作成します。

タイプ プロトコル ポート範囲 ソース
HTTPS TCP 443 EC2のセキュリティグループID

エンドポイント作成画面に戻り作成したセキュリティグループを選択し、エンドポイントを作成します。

VPCエンドポイントの作成(S3用)

S3用のエンドポイントはインターフェイス型ではなくゲートウェイ型を使用します。
ゲートウェイ型は料金が無料なので、今回はゲートウェイ型を選択しました。
以下のVPCエンドポイントを作成します。
- com.amazonaws.ap-northeast-1.s3

対象の[サービス][VPC][ルートテーブル]を選択します。

RDP接続を行い、S3にファイルアップロード

準備が整ったのでRDP接続し、S3にファイルをアップロードてみます。

RDP接続

まず以下のコマンドでローカルPCからEC2(Windowsサーバ)間をセッションマネージャーポートフォワードさせます。

[ローカルPCから実行]

$ aws ssm start-session --target <踏み台サーバのEC2インスタンスID> --region ap-northeast-1 \
--document-name AWS-StartPortForwardingSession \
--parameters '{"portNumber":["3389"],"localPortNumber":["33890"]}'

つぎにリモートデスクトップで、[127.0.0.1:33890]を指定し接続します。

パスワードが聞かれるので、接続用パスワードの取得でメモしたパスワードを入力し接続します。

接続できました。

S3にファイルアップロード

ファイルをアップロードする前にRDP接続先のEC2(Windowsサーバ)にAWS CLIをインストールする必要があるので
一度ローカルのPCにAWS CLI インストーラーをダウンロードし、RDP接続先にファイルを転送します(コピー&ペーストで転送できます。)

インストールして転送してください。

転送後インストールを進めます。
インストールが完了したら、[EC2(Windowsサーバ)]でコマンドプロンプトを開きます。
aws cliがインストールされていることを確認

aws --version

ファイル転送

aws s3 cp 転送元のファイル S3://S3のバケット名/

実行結果です。

S3バケット:windows-test-20211027にtest20211027.txtをアップロードしました。
コンソールからファイルがアップロードされていることを確認しました。

さいごに

今回はprivate環境のEC2(windowsサーバ)を構築し、SSMポートフォワードを使った接続と、S3へのファイルのアップロードするまでの一連の流れについて書きました。
お役に立てれば光栄です!

参考