VPCの個別のセキュリティグループに2つのインスタンスがあり、それぞれに独自のパブリックIPがあります。インスタンス1がパブリックIPでインスタンス2に接続できるようにしたいと考えています。セキュリティグループへのアクセスを許可すると、プライベートIPへのアクセスのみが許可され、パブリックIPへのアクセスは許可されないことがわかりました。
セキュリティグループを定義して、他のセキュリティグループにあるインスタンスのパブリックIPへのアクセスを許可しました。ただし、これは簡単に自動化できないため(Ansibleと考えて)、グループに追加する前にDNS名のルックアップを実行する必要があるため、これは不便です。
誰かがこれを行う簡単な方法を知っていますか?
要約する:
インスタンス1は、パブリックIPでインスタンス2にアクセスする必要があります。私は現在、インスタンス1のIPを手動で検索し、それをインスタンス2のセキュリティグループに追加する必要があります。
パブリックIPにアクセスするとすぐに、ターゲットSGのソースとしてセキュリティグループIDを使用できなくなります。これはプライベートIPでのみ機能します。
ただし、Ansibleを使用してインスタンス1を作成する場合、インスタンスのAnsible factsを使用してそのパブリックIPを取得し、-インスタンス2 SG。このようなことを行う必要があります:
- name: Create Instance 1
ec2:
key_name: mykey
instance_type: t2.micro
image: AMI-123456
wait: yes
assign_public_ip: yes <<< Assign Public IP
register: ec2
そして、それをソースとしてインスタンス2セキュリティグループに追加できます。
- name: Instance 2 SG
ec2_group:
name: ...
rules:
- proto: tcp
ports:
- 80
cidr_ip: "{{ ec2.instances.public_ip }}" <<< Use it here
これらの線に沿った何かにより、Ansibleで自動化を行うことができます。
それが役に立てば幸い:)
通常、名前付きセキュリティグループを作成し、それらのインスタンスにアタッチし、このセキュリティグループをソースとして参照し、必要な宛先ポートを許可するルールを追加します。
最終的な画像:
created security group
がアタッチされています。created security group
には、created security group
からdestination port you need
へのインバウンドを示すルールが含まれていますそのため、基本的に単一のIPも必要ありません。アクセスが必要なリソースにセキュリティグループをアタッチすることで、許可/拒否を制御できます。この方法は、動的環境(オートスケールなど)でもうまく機能します。
インスタンスのパブリックIPアドレスからのリクエストは、インスタンスのセキュリティグループからのリクエストであるかのようには扱われません。これは、プライベートIPアドレスを使用するリクエストからのみ機能します。
ソースインスタンスは、ターゲットインスタンスのプライベートIPに解決されるターゲットインスタンスのDNSアドレスを使用することをお勧めします。たとえば、AWSが提供するターゲットインスタンスのパブリックDNS名を指すCNAMEレコードmy-service.example.com
を作成します。パブリックDNS名はec2-public-ipv4-address.compute-1.amazonaws.com
のようになります。
AWSはスプリットホライズンDNS解決を提供します。 my-service.example.com
がパブリックインターネットで解決されると、パブリックIPが返されます。 VPCでmy-service.example.com
が解決されると、プライベートIPが返されます。したがって、ソースインスタンスはプライベートIPを使用してターゲットインスタンスに接続し、セキュリティグループルールは期待どおりに機能します。
この種のDNS構成は常に可能または実用的ではないため、ソースインスタンスのパブリックIPアドレスをホワイトリストに登録する必要がある場合があります。この場合は、Elastic IPアドレスであることを確認してください。そうでない場合、サーバーがシャットダウンするとパブリックIPが変更されます。