はじめに
EMRをプライベートサブネットで利用する場合最低3つのセキュリティグループが必要になります。
- マスターインスタンスの Amazon EMR 管理セキュリティグループ
- コアインスタンスとタスクインスタンスのセキュリティグループ
- サービスアクセス用のセキュリティグループ
今回はこれらのSecurity Groupをカスタムとして手動で作成した際にはまった事を備忘で書いておきたいと思います。
はまった事
EMRではマスター/スレーブ間で別々にセキュリティグループをアタッチし、各々通信しなければならないポート/プロトコルが決まっています。プレイベートサブネットを利用する場合はサービスアクセス用のセキュリティグループも要件にあったポート/プロトコルを解放する必要があります。
私の環境ではプライベートサブネットでクラスターを起動している事もありSecurity Group間の通信は
SG-to-SGでALL解放していたので問題なく使えていました。
問題は Amazon EMR リリース 5.30.0 以降を利用し始めた時に発生しました。
上のリンク先に記載があるのですが、サービスアクセス用のセキュリティグループではインバウンドのルールとして
マスター用のセキュリティグループからの9443/TCPを許可する必要があるのですが、元々ALL解放していた事もあり
変更はしていませんでした。
しかしながらEMRを利用しようとしたところ以下のエラーが表示されました。
ServiceAccessSecurityGroup is missing ingress rule from EmrManagedMasterSecurityGroup on port 9443
どうやらEMR側で明示的に9443/TCPが許可されているかをチェックしているようです。
9443/TCPを別途解放したところ利用できるようになりました。
マスター側セキュリティグループのアウトバウンドはALL開放だけで明示的にポートを開放する必要はありませんでした。
教訓
AWSマネージドサービスによっては通信が許可されているかではなく設定が入っているかをチェックしているものもあるようです。
もし同様の経験をされた方がいれば、参考になれば幸いです。