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 オプションを追加しました。