0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

セキュリティグループの「SG参照」でIPではなくEC2の役割単位で通信を許可する

0
Posted at

背景

EC2上にMariaDB(MySQL互換)を構築し、別のEC2からDB接続するハンズオンをコンソールで実施しました。ここで使った「SG参照(SG-to-SG)」という設定方法は、本番環境でも使われるセキュアな設計パターンです。

1. IP指定とSG参照の違い

IP指定:  ソースに 123.456.78.901/32 を指定 → そのIPのみ許可
SG参照:  ソースに sg-xxxxx を指定           → そのSGに属するEC2全体を許可
比較項目 IP指定 SG参照
IPが変わった場合 設定変更が必要 自動的に制御(変更不要)
EC2を増やした場合 追加EC2のIPも個別設定が必要 SGに追加するだけで自動許可
用途 自分のPCや外部サービスからの接続 EC2間通信の制御

2. DBサーバのMySQLポートにクライアントSGを指定する

DBサーバSGのインバウンドルール:
タイプ: MySQL/Aurora
ソースタイプ: カスタム
ソース: my-ec2-mysql-client-sg (セキュリティグループを検索して選択)

ソースの入力欄にIPアドレスではなくセキュリティグループ名を入力すると、そのSGに属するEC2からの通信だけがマッチします。「クライアント役のEC2のセキュリティグループ」を作っておき、それをDBサーバ側のインバウンドルールのソースとして指定する、という2段構えの設計です。

3. 参照先のSGは先に作成する必要がある

③ クライアントSGを作成する(先に作成する必要がある)
④ DBサーバSGを作成する(③のSGを参照する)

DBサーバSGの作成時にクライアントSGを選択肢として指定するため、参照される側(クライアントSG)を先に作っておく必要があります。CloudFormationであればリソース間の依存関係は自動解決されますが、コンソールでは作成順序を自分で意識する必要があります。

4. 削除順序はSG参照の依存関係の逆順

① DBサーバSGを先に削除する
② クライアントSGを削除する

クライアントSGはDBサーバSGから参照されているため、参照している側(DBサーバSG)を先に削除しないと、依存関係エラーで削除に失敗します。作成時と削除時で意識すべき順序が逆になる点に注意が必要です。

5. EC2間通信はプライベートIPを使う

mysql -h 10.0.x.x -u handson -pHandson1234! sampledb

同じVPC内のEC2同士は、パブリックIPではなくプライベートIPで通信します。パブリックIP経由だと通信がインターネットを経由してしまい、セキュリティ上も効率上も好ましくありません。SG参照とプライベートIPはセットで使うのが基本形です。

まとめ

「IPではなくSGをソースに指定する」というSG参照の設計と、それに伴う作成・削除時の順序制約が、このハンズオンの核心でした。本番環境ではIP直接指定のルールは削除し、SG参照のみに絞るのがベストプラクティスです。UserDataによるMariaDBの自動セットアップ手順は元記事にまとめています。

→ AWSコンソールでEC2 MySQLのDBサーバを構築する手順(ブログ)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?