試しに下記の環境をCloudFormationを使って構築してみる。
下記、作成したCloudFormationのテンプレート。
https://github.com/khiraiwa/cloud-certifications/blob/1ab33227b014a4dc0679291729b1a117420a5cde/vpc/template.yml
YAML形式でやってみた。これだとコメントが書ける。
################################
#### VPC
################################
VPC:
Type: AWS::EC2::VPC
Properties:
CidrBlock:
Ref: VpcCidrBlock
EnableDnsSupport: 'true'
EnableDnsHostnames: 'true'
Tags:
- Key: Name
Value:
Ref: VpcName
また、最近だと短縮記法も使えるようになっている。
SubnetPublic1a:
Type: AWS::EC2::Subnet
Properties:
VpcId:
Ref: VPC
AvailabilityZone: !Sub
- "${AWS::Region}${AZ}"
- AZ: !Select [0, !Ref VpcAzs]
CidrBlock:
Ref: VpcSubnetCidrBlockPublic1a
MapPublicIpOnLaunch: true
Tags:
- Key: Name
Value:
Ref: VpcSubnetNamePublic1a
SubnetにセットするNetwork ACLにはデフォルトで*のルールが有る。
追加したルールに一致するものがなければ*のルールが使われる。
(つまり、拒否される)

参照: http://docs.aws.amazon.com/ja_jp/AmazonVPC/latest/UserGuide/VPC_ACLs.html#ACLRules
また、Network Aclはステートレス。例えばインバウンドでtcp/22を許可していいてもアウトバウンドは通さない。戻りのローカルポート(1024-65535とか)をアウトバウンドで開ける必要がある。
(逆にSecurityGroupはステートフル)
また、下記の図のように、あるサブネットからは特定のサブネットにしか通信できないようにするにはNetwork ACLで制御する(しかないのかな?)
VPCペアリングはペアリングしたVPCにしか通信できない。例えば下記の場合、AからCには行けない。