背景背景簡単な構成簡単な構成想像したこと1リスクコスト想像したこと2ルートテーブルセキュリティグループ検討したこと参考にしたこと実際作ってみたベースVPCSubnetRoute TableRoute Table ARoute Table B検証構成Security GroupGroup A for ELB(CLB)Group B for Public EC2Group C for Private EC2ELB(CLB)の定義Private EC2の定義Public EC2の定義Public EC2 から Private EC2へアクセス確認Public EC2 から Private EC2へアクセス確認まとめ注意事項
背景
背景
社内のプロジェクトで以下の話が上がってきて対応した記録です。
- 普段、Amazon WorkspacesでプライベートなEC2にアクセスしている
- 今回、一時的に作業効率を上げたく直接アクセスしたい
簡単な構成
簡単な構成
- Amazon WorkspacesからEC2へアクセスする
- EC2はNAT Gatewayでインターネットから必要なパッケージをDLする
想像したこと1
リスク
- インターネットからアクセスしてはいけないポリシーがある(はず)
- 同一サブネットにある他のリソースにアクセスできないようにする
コスト
- インターネットからアクセスできる経路を確保するには追加コストが拠点側・AWS側のどこかで発生する
想像したこと2
ルートテーブル
- プライベートサブネットなので、インターネットに出るためにNAT Gatewayを向いている(はず)か
セキュリティグループ
- 既設でインターネットからinboundで許可するグループ、あるいは一時的に新設が可能か
検討したこと
- パブリックサブネットにインターネットからinboudを受けるSSHエージェント転送サーバを作る
- パブリックサブネット側のルートテーブルが複雑で、新たに切り出したあとの制御などのタイムコストで断念
- E.IPを付与する
- 既存のプライベートサブネットにあるルートテーブルが複雑なので、対象インスタンス用に新たに切り出すための調査などのタイムコストで断念
- AWS Client VPN環境を作る
- VPNエンドポイントを作っただけでは他のインスタンスにもアクセスできてしまうので、制御が難しいと断念
- ELB - CLBを作る
- CLBのターゲットインスタンスを対象のEC2インスタンスのみに絞ればよくて、CLBのセキュリティグループを新設すれば、アクセス元も制御できる
参考にしたこと
実際作ってみた
ベース
Public SubnetとPrivate Subnetに分ける普通の構成です。
VPC
Subnet
Route Table
Route Table A
| Destination | Target | Status | Propagated |
|:----------:|:----------:|:---------:|:---------:|:---------:|
| 10.1.0.0/16 | Local | Active | No |
| 0.0.0.0/0 | Internet Gateway | Active | No |
Route Table B
| Destination | Target | Status | Propagated |
|:----------:|:----------:|:---------:|:---------:|:---------:|
| 10.1.0.0/16 | Local | Active | No |
| 0.0.0.0/0 | NAT Gateway | Active | No |
検証構成
Security Group
Group A for ELB(CLB)
Group B for Public EC2
Group C for Private EC2
ELB(CLB)の定義
Private EC2の定義
IPv4パブリック IP
は割り当たっていません。
Public EC2の定義
Private EC2にアクセスができるよう IPv4パブリック IP
は割り当てています。
Public EC2 から Private EC2へアクセス確認
Public EC2(10.1.1.117) から Private EC2(10.1.2.94)へアクセスします。
Last login: Sat Mar 7 13:08:41 2020 from XXX.XXX.XXX
__| __|_ )
_| ( / Amazon Linux 2 AMI
___|\\___|___|
<https://aws.amazon.com/amazon-linux-2/>
1 package(s) needed for security, out of 26 available
Run "sudo yum update" to apply all updates.
[ec2-user@ip-10-1-1-117 ~]$
[ec2-user@ip-10-1-1-117 ~]$ ssh ec2-user@10.1.2.94
Last login: Sat Mar 7 13:08:45 2020 from 10.1.1.117
__| __|_ )
_| ( / Amazon Linux 2 AMI
___|\\___|___|
<https://aws.amazon.com/amazon-linux-2/>
[ec2-user@ip-10-1-2-94 ~]$
[ec2-user@ip-10-1-2-94 ~]$
を使って、エージェント転送設定しています。
Public EC2 から Private EC2へアクセス確認
Tera Termを使ってELB(CLB)経由でアクセスします。
Last login: Sat Mar 7 13:27:07 2020 from 10.1.1.117
__| __|_ )
_| ( / Amazon Linux 2 AMI
___|\\___|___|
<https://aws.amazon.com/amazon-linux-2/>
[ec2-user@ip-10-1-2-94 ~]$
まとめ
- ELB(CLB)で、TCPのポートフォワーディングが簡単でセキュアに実装できる
- ELB(CLB)の作成
- ELB(CLB)の対象にPrivateなEC2を指定
- Security Group(ELB , EC2)の作成
- CLBはSingle-AZで構成可能なので、 ELB:EC2 = 1:1 で作れば他のPrivateなEC2に影響がない
注意事項
- ELBはCLBのみSingle-AZで起動可能
- ALBの場合は、Multi-AZ前提となるため、対象のインスタンス1台のみといった指定はできない
- プロキシの役割をするAmazon EC2や直接EC2にE.IPをアタッチするより料金は高い
Elastic Load Balancing(Classic Load Balancer) の料金
※ 2020年3月7日現在