Security Groupとエンドポイントの名前解決

この記事は公開されてから半年以上経過しています。情報が古い可能性がありますので、ご注意ください。

セキュリティグループでセキュリティグループを指定する

AWSのセキュリティグループ(以下SG)で、[送信元]にSGのID(sg-××××)を指定することができます。
その場合、そのSGに属しているEC2からの接続を許可することになります。

下記のようにSG自身をそのSGで許可すると、そのSGに属している全EC2間の通信が許可されます。

このようなSGがアタッチされたEC2、SERVER-AとSERVER-Bで検証を行います。
下記のように、プライベートIPで疎通が確認できます。

[root@SERVER-A ~]# ping 172.31.***.*** (SERVER-BのプライベートIP)
PING 172.31.***.*** (172.31.***.***) 56(84) bytes of data.
64 bytes from 172.31.***.***: icmp_seq=1 ttl=255 time=0.903 ms
64 bytes from 172.31.***.***: icmp_seq=2 ttl=255 time=0.674 ms
~
[root@SERVER-B ~]# ping 172.31.***.*** (SERVER-AのプライベートIP)
PING 172.31.***.*** (172.31.***.***) 56(84) bytes of data.
64 bytes from 172.31.***.***: icmp_seq=1 ttl=255 time=0.821 ms
64 bytes from 172.31.***.***: icmp_seq=2 ttl=255 time=0.728 ms
~

しかし、グローバルIPにpingを打つと疎通が取れなくなります。

[root@SERVER-A ~]# ping -c 4 52.***.***.*** (SERVER-BのグローバルIP)
PING 52.***.***.*** (52.***.***.***) 56(84) bytes of data.

--- 52.0.0.2 ping statistics ---
4 packets transmitted, 0 received, 100% packet loss, time 2999ms
[root@SERVER-B ~]# ping -c 4 52.***.***.*** (SERVER-AのグローバルIP)
PING 52.***.***.*** (52.***.***.***) 56(84) bytes of data.

--- 52.0.0.1 ping statistics ---
4 packets transmitted, 0 received, 100% packet loss, time 3024ms

SGをSGで許可する方法はプライベートネットワーク内でのみ有効なようです。

疑問:各エンドポイントへの接続に関して

しかし、そこで1つ疑問が湧きました。

BeanstalkでEC2+RDS+AutoScalingを半自動構築しました。
RDSのSGで、EC2に適用されているSGからのDBポートが許可されています。

RDSへの接続手段はエンドポイント(~~~.rds.amazonaws.com)しかなく、
エンドポイントはCNAMEである以上、DNSで名前解決される必要があります。

SGをSGで許可する方法はプライベートネットワーク内でのみ有効なので
DNSに問い合わせる為にグローバルネットワークに出てしまうと
EC2-RDS間で通信が出来なくなってしまうのではないでしょうか?

VPC(プライベートネットワーク)内での名前解決

しかし実際は、EC2からRDSへの接続が確認できました。
(Beanstalkで構築したので当然といえば当然ですが)

# mysql -h ****.****.****.rds.amazonaws.com -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 373
Server version: 5.6.27-log MySQL Community Server (GPL)

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

どうやら、同一のVPC内であればエンドポイントは
プライベートネットワーク内で名前解決されるようです。
下記digは、RDSと同一のBeanstalk環境(同一のVPC内)のEC2から実行しています。

# dig ****.****.****.rds.amazonaws.com
~
;; ANSWER SECTION:
****.****.****.rds.amazonaws.com. 5 IN CNAME ec2-52-***-***-***.ap-northeast-1.compute.amazonaws.com.
ec2-52-***-***-***.ap-northeast-1.compute.amazonaws.com. 20 IN A 172.31.***.***

他のVPCのEC2からdigするとグローバルIPを引っ張ってきます。

# dig ****.****.****.rds.amazonaws.com
 ~ 
;; ANSWER SECTION: 
****.****.****.rds.amazonaws.com. 5 IN CNAME ec2-52-***-***-***.ap-northeast-1.compute.amazonaws.com. 
ec2-52-***-***-***.ap-northeast-1.compute.amazonaws.com. 50 IN A 52.***.***.***

このVPC内での名前解決はVPCデフォルトの動作で、
下記のようにVPCのコンパネから設定を変更することが出来ます。

まとめ

①SGをSGで許可する方法はプライベートネットワーク内でのみ有効である
②RDSなどのエンドポイントは、デフォルトで、プライベートネットワーク(同一のVPC)内で名前解決される

コメントを残す

メールアドレスが公開されることはありません。

Time limit is exhausted. Please reload CAPTCHA.