この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。
皆様こんにちは。
今回はCloudFormationを利用して高可用性アーキテクトの構築をしていきます。
この記事ではセキュリティグループの作成を行います。
1.高可用性アーキテクト構築目次
2.セキュリティグループについて
セキュリティグループは仮想ファイアウォールとして機能し、関連付けられたリソースに到達および離れるトラフィックを制御します。例えば、セキュリティグループを EC2 インスタンスに関連付けると、インスタンスのインバウンドトラフィックとアウトバウンドトラフィックが制御されます。
参照:セキュリティグループを使用してリソースへのトラフィックを制御
- アウトバウンド
EC2インスタンスから出る通信を制御する - インバウンド
EC2インスタンスへの通信を制御する
類似サービス
- ネットワークACL
サブネット単位で設定するファイアウォール機能
セキュリティグループとネットワークACLの主な違い
セキュリティグループ | ネットワークACL(デフォルト) | |
---|---|---|
適用範囲 | インスタンス単位 | サブネット単位 |
デフォルト動作 | インバウンド:全て拒否 アウトバウンド:全て許可 |
インバウンド:全て許可 アウトバウンド:全て許可 |
ルールの評価 | 全てのルールが適用される | ルールの番号順で適用される |
ステータス | ステートフル | ステートレス |
3.構築したいセキュリティグル ープ構成図
- ALB用はRoute53のパブリックホストゾーンからのトラフィックを受け入れる必要があります。ソースは0.0.0.0/0にします。通信は暗号化されている必要があるのでタイプはHTTPSにします。パブリックホストゾーンには、トラフィックをインターネットでどのようにルーティングするか指定するレコードが含みます。
- EC2用はALBからのトラフィックを受け入れる必要があります。ソースは、ALB用のSGを指定します。VPC内部の通信は暗号化されている必要がないのでタイプはHTTPにします。また指定のPCよりEC2インスタンスと通信するために、SSHでソースはMyIPを指定します。
- RDS用はEC2に対するDBサーバーとして扱います。EC2からのトラフィックを受け入れる必要がありますので、ソースはEC2用のSGを指定します。タイプはDBにMySQLを使用するのでMySQL/Auroraを選びます。
- EFS用はEC2のWordpressインストールファイルを共有するために使用するので、EC2からのトラフィックを受け入れる必要があります。ソースは、EC2用のSGを指定してタイプNFSを選びます。NFSとは、主にUNIX系OSで利用される分散ファイルシステム。および、そのための通信規約(プロトコル)
4.全体構築ソースコード
Resources:
hebiishiSGEC2:
Type: AWS::EC2::SecurityGroup
Properties:
GroupName: hebiishiSGEC2
GroupDescription: hebiishiSGEC2
VpcId: !ImportValue hebiishi_Vpc
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: 80
ToPort: 80
CidrIp: 0.0.0.0/0
- IpProtocol: tcp
FromPort: 22
ToPort: 22
CidrIp: 27.143.145.234/32
Tags:
- Key: Name
Value: hebiishiSGEC2
hebiishiSGALB:
Type: AWS::EC2::SecurityGroup
Properties:
GroupName: hebiishiSGALB
GroupDescription: hebiishiSGALB
VpcId: !ImportValue hebiishi_Vpc
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: 80
ToPort: 80
CidrIp: 0.0.0.0/0
- IpProtocol: tcp
FromPort: 443
ToPort: 443
CidrIp: 0.0.0.0/0
Tags:
- Key: Name
Value: hebiishiSGALB
hebiishiSGRDS:
Type: AWS::EC2::SecurityGroup
Properties:
GroupName: hebiishiSGRDS
GroupDescription: hebiishiSGRDS
VpcId: !ImportValue hebiishi_Vpc
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: 3306
ToPort: 3306
CidrIp: 0.0.0.0/0
Tags:
- Key: Name
Value: hebiishiSGRDS
hebiishiSGEFS:
Type: AWS::EC2::SecurityGroup
Properties:
GroupName: hebiishiSGEFS
GroupDescription: hebiishiSGEFS
VpcId: !ImportValue hebiishi_Vpc
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: 2049
ToPort: 2049
CidrIp: 0.0.0.0/0
Tags:
- Key: Name
Value: hebiishiSGEFS
Outputs:
SGOutput1:
Value: !Ref hebiishiSGEC2
Export:
Name: hebiishiSGEC2
SGOutput2:
Value: !Ref hebiishiSGALB
Export:
Name: hebiishiSGALB
SGOutput3:
Value: !Ref hebiishiSGRDS
Export:
Name: hebiishiSGRDS
SGOutput4:
Value: !Ref hebiishiSGEFS
Export:
Name: hebiishiSGEFS
5.セキュリティグループの作成
- 今回は、ALB、EC2、RDS、EFSのセキュリティグループの作成をしていきます。
5-1.ALB用のSG作成
ALBのSGは下記のコードで作成します。
使用オプション | 設定値 | 使用用途 |
---|---|---|
GroupName | hebiishiSGALB | 設定したい名前を入力 |
GroupDescription | hebiishiSGALB | グループの説明 |
VpcId | !ImportValue hebiishi_Vpc | Outputセクションで作成したVpcId |
IpProtocol | tcp | tcpプロトコルでトラフィックを許可するため |
FromPort | 80 | httpから接続を許可するため |
ToPort | 80 | httpから接続を許可するため |
IpProtocol | tcp | tcpプロトコルでトラフィックを許可するため |
FromPort | 443 | httpsから接続を許可するため |
ToPort | 443 | httpsから接続を許可するため |
hebiishiSGALB:
Type: AWS::EC2::SecurityGroup
Properties:
GroupName: hebiishiSGALB
GroupDescription: hebiishiSGALB
VpcId: !ImportValue hebiishi_Vpc
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: 80
ToPort: 80
CidrIp: 0.0.0.0/0
- IpProtocol: tcp
FromPort: 443
ToPort: 443
CidrIp: 0.0.0.0/0
Tags:
- Key: Name
Value: hebiishiSGALB
5-2.EC2用のSG作成
EC2のSGは下記のコードで作成します。
使用オプション | 設定値 | 使用用途 |
---|---|---|
GroupName | hebiishiSGEC2 | 設定したい名前を入力 |
GroupDescription | hebiishiSGEC2 | グループの説明 |
VpcId | !ImportValue hebiishi_Vpc | Outputセクションで作成したVpcId |
IpProtocol | tcp | tcpプロトコルでトラフィックを許可するため |
FromPort | 22 | 指定のIPアドレスから接続を許可するため |
ToPort | 22 | 指定のIPアドレスに接続を許可するため |
hebiishiSEC2:
Type: AWS::EC2::SecurityGroup
Properties:
GroupName: hebiishiSGEC2
GroupDescription: hebiishiSGEC2
VpcId: !ImportValue hebiishi_Vpc
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: 80
ToPort: 80
CidrIp: 0.0.0.0/0
- IpProtocol: tcp
FromPort: 22
ToPort: 22
CidrIp: 指定のIP/32
Tags:
- Key: Name
Value: hebiishiSGEC2
5-3.RDS用のSG作成
RDSのSGは下記のコードで作成します。
使用オプション | 設定値 | 使用用途 |
---|---|---|
GroupName | hebiishiSGRDS | 設定したい名前を入力 |
GroupDescription | hebiishiSGRDS | グループの説明 |
VpcId | !ImportValue hebiishi_Vpc | Outputセクションで作成したVpcId |
IpProtocol | tcp | tcpプロトコルでトラフィックを許可するため |
FromPort | 3306 | EC2のSGから接続を許可するため |
ToPort | 3306 | EC2のSGから接続を許可するため |
hebiishiSGRDS:
Type: AWS::EC2::SecurityGroup
Properties:
GroupName: hebiishiSGRDS
GroupDescription: hebiishiSGRDS
VpcId: !ImportValue hebiishi_Vpc
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: 3306
ToPort: 3306
CidrIp: 0.0.0.0/0
Tags:
- Key: Name
Value: hebiishiSGRDS
5-4.EFS用のSG作成
EFSのSGは下記のコードで作成します。
使用オプション | 設定値 | 使用用途 |
---|---|---|
GroupName | hebiishiSGEFS | 設定したい名前を入力 |
GroupDescription | hebiishiSGEFS | グループの説明 |
VpcId | !ImportValue hebiishi_Vpc | Outputセクションで作成したVpcId |
IpProtocol | tcp | tcpプロトコルでトラフィックを許可するため |
FromPort | 2049 | httpから接続を許可するため |
ToPort | 2049 | EC2のSGから接続を許可するため |
hebiishiSGEFS:
Type: AWS::EC2::SecurityGroup
Properties:
GroupName: hebiishiSGEFS
GroupDescription: hebiishiSGEFS
VpcId: !ImportValue hebiishi_Vpc
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: 2049
ToPort: 2049
CidrIp: 0.0.0.0/0
Tags:
- Key: Name
Value: hebiishiSGEFS
5-5.Outputsの作成
下記のOutputセクションで他のリソースへ参照します。
Outputs:
SGOutput1:
Value: !Ref hebiishiSGEC2
Export:
Name: hebiishiSGEC2
SGOutput2:
Value: !Ref hebiishiSGALB
Export:
Name: hebiishiSGALB
SGOutput3:
Value: !Ref hebiishiSGRDS
Export:
Name: hebiishiSGRDS
SGOutput4:
Value: !Ref hebiishiSGEFS
Export:
Name: hebiishiSGEFS
6.疎通確認
- 今回は疎通確認を行います。テスト用にEC2インスタンスを作成、起動させ、PowerShellで疎通確認を行います。
1.SSHの疎通確認を下記のコマンドで確認します。
Test-NetConnection [作成したEC2のパブリックIPv4] -port 22
下記の実行結果から、SSHは指定のIPアドレスで疎通確認コマンドを実行し TcpTestSucceeded : True
と返答されているので、成功しているのが確認できました。
PS C:\Users\hebiishi.o> Test-NetConnection 3.36.90.232 -port 22
ComputerName : 3.36.90.232
RemoteAddress : 3.36.90.232
RemotePort : 22
InterfaceAlias : Wi-Fi
SourceAddress : 192.168.0.43
TcpTestSucceeded : True
2.HTTPの疎通確認を下記のコマンドで確認します。
Test-NetConnection [作成したEC2のパブリックIPv4] -port 80
HTTPはALBからの通信以外は失敗するはずなので、下記の実行結果からEC2のSGが TcpTestSucceeded : False
と返答されているので正常に動作していることが確認できました。
PS C:\Users\hebiishi.o> Test-NetConnection 3.36.90.232 -port 80
WARNING: TCP connect to (3.36.90.232 : 80) failed
WARNING: Ping to 3.36.90.232 failed with status: TimedOut
ComputerName : 3.36.90.232
RemoteAddress : 3.36.90.232
RemotePort : 80
InterfaceAlias : Wi-Fi
SourceAddress : 192.168.0.43
PingSucceeded : False
PingReplyDetails (RTT) : 0 ms
TcpTestSucceeded : False
7.感想
セキュリティグループを構築する前は、4つの設定項目があり違うリソースなため、どのような流れでセキュリティグループがりようされるのか複雑でわかりづらかったですが、構築、ブログ作成をすることによりセキュリティグループの仕様の理解が深まりました。