0
2

More than 1 year has passed since last update.

イントラネットからSSH転送でELBやS3に接続する

Last updated at Posted at 2022-08-26

1. はじめに

イントラネットから接続するAWSの開発環境があって、

イントラネット内PC → AWS踏み台(Linux) → EC2(Windows) → ELB → EC2(OS知らない)
                                                        └→ EC2(OS知らない)

イントラネット内PC → AWS踏み台(Linux) → EC2(Windows) → S3

と、なっています。
EC2(Windows)にSSH転送でリモートデスクトップする手順だけ提供されました。

ローカルポート リモートアドレス リモートポート
任意 EC2(Windows)のローカルIPアドレス 3389

ELBの80番ポートに通信するクライアントライブラリがEC2(Windows)にあるけれども、Oracleがない。
Oracleと通信するアプリケーションからELBに接続したい。また、そのアプリケーションからAWS CLIを呼び出してS3にも接続したい。

このため、SSH転送を使用して、Oracleに接続できるイントラネット内PCから上記のELBとS3に接続するようにしました。
Tera Termにはイントラネット内のプロキシサーバの設定を行っています。

AWSは詳しくないので、以降の説明の部分URLはおかしいところがあるかもしれません。VPCもあるようです。

2. イントラネット内PCから接続

下記の通り、EC2(Windows)を無視します。

イントラネット内PC → AWS踏み台(Linux) → ELB → EC2(OS知らない)
                                         └→ EC2(OS知らない)

イントラネット内PC → AWS踏み台(Linux) → S3

イントラネット内PCでTera Teramを起動し、踏み台にログインする。

SSH転送設定(ELB)

ローカルポート リモートアドレス リモートポート
10080 ホスト.リージョン.elb.amazonaws.com 80

ローカルポート80番がうまくいかなかったので、10080にしました。
EC2(Windows)から ホスト.リージョン.elb.amazonaws.com に接続する代わりに、イントラネット内PCで localhost:10080 に接続します。

SSH転送設定(S3)

ローカルポート リモートアドレス リモートポート
10443 bucket.ホスト.リージョン.vpce.amazonaws.com 443
443 s3.リージョン.amazonaws.com 443

S3については、endpointのSSH転送と、AWS CLI(awsコマンド)が接続するアドレス(s3.リージョン.amazonaws.com)のSSH転送を行います。
awsコマンドがそのアドレスにhttpsで接続しに行きます。1行目のendpointのほうだけ設定してawsコマンドを実行すると、s3.リージョン.amazonaws.com に接続できなかったと標準エラー出力に出力されるので分かります。hostsファイルにそのホストをlocalhostと指定し、SSH転送のローカルポートは443としています。これにより、https://localhost:443 → SSH転送の s3.リージョン.amazonaws.com:443 と繋がります。

イントラネット内PCのhosts(S3接続用)

127.0.0.1 s3.リージョン.amazonaws.com

EC2(Windows)から endpoint bucket.ホスト.リージョン.vpce.amazonaws.com に接続する代わりに、localhost:10443 に接続します。

Tera TermマクロでSSH転送を設定する場合には、connectのオプションに、

/ssh-L10080:ホスト.リージョン.elb.amazonaws.com:80,10443:bucket.ホスト.リージョン.vpce.amazonaws.com:443,443:s3.リージョン.amazonaws.com:443

と指定します。

/ssh-Llocalhost:10080:ホスト.リージョン.elb.amazonaws.com:80,localhost:10443:bucket.ホスト.リージョン.vpce.amazonaws.com:443,localhost:443:s3.リージョン.amazonaws.com:443

でも同じで、リッスンは空欄となります。

3. イントラネット内PCにHyper-Vを入れて、Hyper-VゲストからELBとS3に接続

イントラネットに直接接続していないHyper-Vゲストから接続します。

Hyper-Vゲスト → イントラネット内PC(Hyper-Vホスト) → AWS踏み台(Linux) → ELB → EC2(OS知らない)
                                                                      └→ EC2(OS知らない)

Hyper-Vゲスト → イントラネット内PC(Hyper-Vホスト) → AWS踏み台(Linux) → S3
PC IPアドレス
Hyper-Vホスト 192.168.0.1 と イントラネットIPアドレス
Hyper-Vゲスト 192.168.0.2

イントラネット内PC(Hyper-Vホスト)でTera Teramを起動し、踏み台にログインする。

SSH転送設定(ELB)

リッスン ローカルポート リモートアドレス リモートポート
192.168.0.1 10080 ホスト.リージョン.elb.amazonaws.com 80

SSH転送設定(S3)

リッスン ローカルポート リモートアドレス リモートポート
192.168.0.1 10443 bucket.ホスト.リージョン.vpce.amazonaws.com 443
192.168.0.1 443 s3.リージョン.amazonaws.com 443

リッスンが空欄だとlocalhostからのみの接続となります。
リッスンを192.168.0.1にして、192.168.0.2からの通信を受け付けるようにしています。
試していませんが、イントラネットからも受け付けたければ、0.0.0.0 にすれば良いと思います。

Hyper-Vゲストのhosts(S3接続用)

192.168.0.1 s3.リージョン.amazonaws.com

Hyper-Vゲストで、192.168.0.1:10080 で ELB に接続することができます。
AWS CLIのendpointを 192.168.0.1:10443 にすると、S3に接続することができます。

Tera TermマクロでSSH転送を設定する場合には、connectのオプションに、

/ssh-L192:168.0.1:10080:ホスト.リージョン.elb.amazonaws.com:80,192:168.0.1:10443:bucket.ホスト.リージョン.vpce.amazonaws.com:443,192:168.0.1:443:s3.リージョン.amazonaws.com:443

と指定します。
リッスンを空欄(その後の:はあり)にすると、0.0.0.0 になります。

あと、443、10080、10443ポートをファイヤーウォールの穴開けをします。

4. イントラネット内PCにNIC 2枚挿しにして、ローカルIPアドレス側にPCを接続してそこからELBとS3に接続

イントラネットに直接接続していないローカルPCから接続します。
Hyper-Vのケースと同じなので、できました。

ローカルPC → イントラネット内PC → AWS踏み台(Linux) → ELB → EC2(OS知らない)
                                                     └→ EC2(OS知らない)

ローカルPC → イントラネット内PC → AWS踏み台(Linux) → S3
PC IPアドレス
イントラネット内PC 192.168.0.1 と イントラネットIPアドレス
ローカルPC 192.168.0.2

5. その他

EC2(Windows)には証明書が入っているのですが、イントラネット内PCやHyper-Vゲストにはその証明書がないため、そのままではAWS CLIがエラーになります。
これを回避するため、awsコマンドに --no-verify-ssl オプションを追加しました。

0
2
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
0
2