EC2をprivate subnetに移し、SSH用のbastionサーバの構築

### 既存のWebサーバのAMIを取得
Instances -> Actions -> Image -> Create Image

### purivate subnetのインスタンスの作成
作成したAMIから、再度インスタンスを作る
${appName}-prd-01-private
vpc:dev-vpc
subnet:dev-subnet-private1
Public IP:enable
IAM role: s3readonly
Security group: prd

${appName}-prd-02-private
vpc:dev-vpc
subnet:dev-subnet-private2
Public IP:enable
IAM role: s3readonly
Security group: prd

### public subnetのインスタンス削除
instance -> instance state -> terminate

### ALBのターゲットグループに追加
TargetGroup -> Target -> 追加
->ALBのDNSを叩いて動作確認
->コンソールからinstanceのpublic ipを叩いてssh接続できない事を確認

### bastionのサーバ構築
Instance Type: t2.nano
VPC: dev-vpc
subnet: dev-public-subnet
Auto-assign Public IP: enable
storage size: 8Gib
tag: ${appName}-prd-bastion
security group: create ${appName}-sg-bastion, Custom TCP
key pair: 新規推奨

### bastionのkey pair
bastionサーバにログインし、home/ec2-user/.sshに 秘密鍵(***.pem)を配置する
bastionにSSHログイン

$ ssh ec2-user@*** -i  ~/.ssh/***.pem
$ sudo chmod 600 /home/ec2-user/.ssh/***.pem
$ cd .ssh
$ ls -l

### Webサーバのセキュリティグループ
ssh接続のソースをmyIPに変更

### bastionからprivate subnetのweb serverにログイン
$ ssh ec2-user@${private_ip} -i .ssh/aws-dev.pem

$ curl https://www.google.co.jp/
-> timeout
-> private subnetは、インターネットゲートウェイのルーティングが存在しないことが原因

### NATゲートウェイ作成
VPC -> NATGateways -> create
subnet: dev-subnet-public1
Elastic IP: 割り当て

Private route table
NAT Gateway 割り当て

curl https://www.google.co.jp/
-> レスポンスが返るようになる。

VPCセキュリティグループの作成

セキュリティグループとは?
-> セキュリティグループとはインスタンスに関連付ける仮想ファイアウォール
-> インバウンドトラフィックとアウトバウンドトラフィックを許可する形でルール追加
-> 拒否するルールは設定できない
-> セキュリティグループはsubnetの中

### Security groupの作成
Security group name: dev-security-group
Description: Allow SSH Access
VPC: dev-vpc

Edit inbound rules
Type: SSH
Protocol: TCP
PortRange: 22
Source: MyIP(全てのipを許可する場合は0.0.0.0/0)

VPC、public subnet、InternetGateway、RouteTableの作成

EC2の構成を見ると、VPCの中にsubnetがあり、その中にEC2が入る。
従って、EC2の前にVPC、subnetを作成していく。

1. VPCの作成
CIDR block

2. Subnetの作成
どこと通信できるか設定

3. Route Tableの作成
Subnet間や外部通信用の設定
SubnetとInternet Gatewayの設定

4. Internet Gatewayの作成
インターネットと通信することをRoute Tableに許可
VPCにアタッチして、Route Tableに紐づけ

5. Network ACLの設定
SubnetのInBound(内部への通信)とOutBound(外部への通信)制御の設定

6. Security Groupの設定
インスタンスのInBound(内部への通信)とOutBound(外部への通信)制御の設定

### 1. VPCの作成
name-tag: dev-vcp
IPv4 CIDR block: 192.168.0.0/16 (10.0.0.0/16などでも可)
※「/16」は16個のアドレスができるという意味。ネットマスク
※CIDRとはIPアドレスの記述形式

CIDR block: A.B.C.D/E
AはVPC作成時に設定(内部のルーティング)
BはVPC作成時に設定(内部のルーティング)
EはVPC作成時に設定
CはSubnet作成時に設定(subnetごとに分ける)
DはSubnet作成後に自動設定(Cから自動生成)

VPC作成時に、VPCのトラフィックをルーティングするためのルールを登録する「ルートテーブル」というリソースも作成される

### 2. subnetの作成
name-tag: dev-subnet-public
vpc: dev-vpc
VPC CIDRs: 192.168.0.0/16
IPv4 CIDR block: 192.168.1.0/28

### 3. Internet Gateway
name-tag: dev-igw
作成後、actionでdev-vcpにattach

### 4. RouteTable作成
どのIPアドレス宛の通信をInternet Gatewayにむけるか決める
name-tag: dev-routetable
vpc: dev-vpc

– ルートテーブルにインターネットゲートウェイへのルートを登録する
->ルートの編集
Destination: 0.0.0.0/0
Target: Internet-gateway igw-********
※VPC内宛以外の通信に関してはインターネットゲートウェイに向く

ルートテーブルからサブネットに紐付け
Subnet Associationsタブをクリック

以上で、VPC(dev-vcp)の中にpublic subnet(dev-subnet-public)ができて、RouteTable(dev-routetable)で、Internet Gatewayに紐付けられている状態ができました。

defaultVPCではなく、実際に作ることで、VPC、public subnet、InternetGateway、RouteTableについて、大幅に理解が深まります。

AWS subnet

A subnet is an address space that further divides the VPC. A subnet is always created in one AZ, and it is not possible to create a subnet that spans multiple AZs.

AWS 0.0.0.0/0

VPC default security group
The VPC automatically uses the default security group. If you do not specify another security group when launching an instance, each EC2 instance launced in VPC is automatically associated with the security group named “launch-wizard-xx”. For example, the security group name of the first EC2 instance to launch is “launch-wizard-1”.

outpoud
Destination: 0.0.0.0/0
Protocol: all
Port: all
Range: Allow all outgoing IPv4 traffic

AWS direct connect

AWS direct connect is a cloud service solution that simplifies building a dedicated network connection from premises to AWS. You can use AWS Direct Connect to establish a private connection between AWS and your data center, office, or colocation environment. This often reduced the cost of the network, improved bandwidth throughput, and provided customers with a more consistent network experience than Internet-based connections.

AWS direct connect allows you to establish a dedicated network connection between your network and one of the AWS Direct Connect locations. You can divide this delicated connection into multiple virtual interfaces using the industry standard 802.1q VLAN. In this way, public resources can be accessed using the same connection, using public IP address space, and private resources (for example, within Amazon Virtual Private Cloud).The Amazon EC2 instance running on can be accessed using private IP space, so you can separate the network between public and private environment. Virtual interfaces can be configured at any time as your needs change.

VPC NAT gateway

You can use Network Address Translation(NAT) gateways to allow instances from your private subnet to connect to the Internet and other AWS services, but not from the Internet to initiate connections with these instances.

It is “public subnet” that is set so that 0.0.0.0/0 (communication to the default gateway) flows to the internet gateway in Route tables is “private subnet”.

Since 0.0.0.0/0 flows to igw-xxxxxx (Internet gateway), subnet for which this route table is set is a public subnet.