☁️くもをもくもくまなぶ

クラウドコンピューティングサービスの学んだことを中心につらつらと書いています

プライベートなEC2へSSH接続

背景


背景

社内のプロジェクトで以下の話が上がってきて対応した記録です。

  • 普段、Amazon WorkspacesでプライベートなEC2にアクセスしている
  • 今回、一時的に作業効率を上げたく直接アクセスしたい

簡単な構成


簡単な構成
  • Amazon WorkspacesからEC2へアクセスする
  • EC2はNAT Gatewayでインターネットから必要なパッケージをDLする
Image in a image block

想像したこと1

リスク
  • インターネットからアクセスしてはいけないポリシーがある(はず)
  • 同一サブネットにある他のリソースにアクセスできないようにする
コスト
  • インターネットからアクセスできる経路を確保するには追加コストが拠点側・AWS側のどこかで発生する

想像したこと2

ルートテーブル
  • プライベートサブネットなので、インターネットに出るためにNAT Gatewayを向いている(はず)か
セキュリティグループ
  • 既設でインターネットからinboundで許可するグループ、あるいは一時的に新設が可能か

検討したこと

  • パブリックサブネットにインターネットからinboudを受けるSSHエージェント転送サーバを作る
    • パブリックサブネット側のルートテーブルが複雑で、新たに切り出したあとの制御などのタイムコストで断念
  • E.IPを付与する
    • 既存のプライベートサブネットにあるルートテーブルが複雑なので、対象インスタンス用に新たに切り出すための調査などのタイムコストで断念
  • AWS Client VPN環境を作る
    • VPNエンドポイントを作っただけでは他のインスタンスにもアクセスできてしまうので、制御が難しいと断念
  • ELB - CLBを作る
    • CLBのターゲットインスタンスを対象のEC2インスタンスのみに絞ればよくて、CLBのセキュリティグループを新設すれば、アクセス元も制御できる
参考にしたこと

実際作ってみた

Image in a image block

ベース

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)の定義

Image in a image block
Image in a image block

Private EC2の定義

IPv4パブリック IPは割り当たっていません。

Image in a image block

Public EC2の定義

Private EC2にアクセスができるよう IPv4パブリック IPは割り当てています。

Image in a image block

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 ~]$

Rlogin

を使って、エージェント転送設定しています。

Image in a image block

Public EC2 から Private EC2へアクセス確認

Tera Termを使ってELB(CLB)経由でアクセスします。

Image in a image block
Image in a image block
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日現在