Amazon VPC Latticeの接続元の制御に関して
こんにちは、AWS事業本部の木村です。
以前の記事でIAM認証を利用して、接続元を制御する方法をご紹介しました。
前回の記事
今回はもう一つの制御を行う方法であるセキュリティグループを用いて制御を行う際の設定方法とIAM認証との簡単な使い分けに関してご紹介していきたいと思います。
Latticeについて
今回もLatticeの詳細な作成方法の説明や概要については取り扱いません。
作成方法や概要は以下記事をご参照ください。
概要
作成方法
セキュリティグループの設定に関して
セキュリティグループについての設定はLatticeサービスネットワークに対して設定が可能になっています。
ですので、IAM認証と違い特定のターゲットを対象に制御を行うといったことはできません。
セキュリティグループの設定に関しては、関連づけているVPC毎に設定ができ、それぞれ5つまで設定を行うことができます。
やってみる
実際に構築して試していきたいと思います。
今回の構成として以下のような形で構築を行い、LatticeサービスネットワークにセキュリティグループAからの通信のみを許可するように設定してインスタンスAからのみアクセスが可能か試していきたいと思います。
では早速構築していきたいと思います。
Lambdaの構築
Lambda successと返すLambdaを作成します。
文字列を返すのみですので、作成方法は割愛します。
EC2の作成
Latticeに対してアクセスを行うインスタンスを2台作成します。
この際セキュリティグループは同じルールを設定した、別のものを設定しておきます。
インスタンスA
インスタンスB
ターゲットグループの作成
続いてLatticeのターゲットグループを設定していきます。
ターゲットタイプにLambdaを指定します。
Lambda-testAを対象として指定して作成します。
Latticeサービスの作成
続いてLatticeサービスを設定していきます。
任意の名前を設定して、次へ進みます。
続いてリスナールールを設定します。それぞれのパスを指定した際に先ほど作成した指定のターゲットグループに紐づくように設定します。
その後は設定を変更せず、デフォルトのまま作成してください。
Latticeサービスの作成は以上です。
Latticeサービスネットワークの作成
最後にLatticeサービスネットワークを設定していきます。
任意の名前を設定して、先ほど作ったLatticeサービスとEC2インスタンスを設置したVPCの関連付けを行って作成してください。
セキュリティグループ設定前は問題なく接続できることを確認するためここではセキュリティグループの設定は行いません。
ここまでで、事前の準備は完了です。
セキュリティグループの設定がない時点で確認する
現時点ではセキュリティグループの設定を行なっていないため両方のインスタンスからのアクセスが成功するはずです。
インスタンスA
インスタンスB
無事どちらのインスタンスからも実行が成功しました。
Latticeサービスネットワークに対してセキュリティグループを設定する
ではここから本題のセキュリティグループを設定していきたいと思います。
対象のLatticeサービスネットワークを選択して、VPCの関連付けから先ほど関連付けを行ったVPCを選択します。
その後アクションより、Edit security groupsを選択します。
その後新しいセキュリティグループを作成を選択します。
その後任意の名前を設定し、インバウンドルールにインスタンスAに設定しているセキュリティグループからのみアクセスを許可するように設定します。
アウトバウンドルールについてはデフォルトのまま変更せずそのまま作成します。
その後作成したセキュリティグループを設定し変更内容を保存します。
これにて設定完了です。IAM認証と比べると考慮する点が少なく簡単に設定ができます。
疎通確認
想定の通りのアクセス制限ができているか確認してみましょう。
おさらいですが、以下の図のようになる想定です。
まずインスタンスAから試してみます。
こちらは想定通りアクセスが成功しました。
次にインスタンスBを試してみます。
こちらは想定通り接続ができず、一定時間経過後接続に失敗という結果になりました。
無事当初想定していた通りの結果となりました。
セキュリティグループとIAM認証の比較
前回の記事と今回の記事でセキュリティグループとIAM認証を使った制御を試していきました。
記事序盤でもご案内しましたが、セキュリティグループを使った制御ではLatticeサービスネットワークに紐付けを行う都合上ターゲット毎の制御が出来ません。
接続先となるLambda側の設定としても、Latticeからの接続を許可するような設定を行うため、接続元に対しての制御を行うことができません。
接続先のセキュリティグループに対する設定に関しては以下記事をご参照ください。
このことから2つの制御をまとめると以下になります。
- セキュリティグループは設定が簡単である反面、細やかな制御ができない。
-
IAM認証は設定が少し複雑であるが、設定を細やかに行うことができる。
そして大まかな使い分けとして、
- 細かい制御が要求されない場合
→セキュリティグループ
- 細かな制御が必要な場合
→IAM認証
とするのが良いと感じました。
セキュリティグループの採用を検討できるのは具体的には以下のようなシーンです。
LambdaBはインスタンスAから呼ばれる想定がないものであっても、アクセスが許可されても問題ないという場合にはセキュリティグループによる制御が選択肢となるかと思います。
例では2件のみですが、この接続元(例ではインスタンス)と接続先(例ではLambda)が増えていくとLatticeサービスネットワークで許可されている接続元はぶら下がっているLattceサービスの接続先に対して全て繋げるようになってしまうので、今後Latticeの利用を拡大していく際にはセキュリティグループを利用した制御については注意が必要になりそうです。
インスタンスAからLambdaBは呼び出せないようにしたいという要望がある場合には、IAM認証一択になります。
この辺りを踏まえてLatticeの制御方針を検討していただければと思います。
まとめ
前回の記事から時間が空いてしまいましたが、今回はセキュリティグループを使ってLatticeの制御を検証してみました。
セキュリティグループを使った制御は馴染み深かったこともあり、すんなり構築することができました。ただ細かいところまで手が届くのはIAM認証ということで要件によって使い分けが必要になると感じました。
この記事がどなたかの参考になれば幸いです。