プライベート環境のWindowsサーバーにRDP接続し、S3にファイルをアップロード
こんにちは!
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へのファイルのアップロードするまでの一連の流れについて書きました。
お役に立てれば光栄です!