■ はじめに
Amazon EMR の ネットワーク周り(セキュリティグループ)について 学んだので、メモっておく。 (インフラ大変、、、)
目次
【1】セキュリティグループ(Security Group) 1)Master 2)Slave 3)ServiceAccess 4)その他
【1】セキュリティグループ(Security Group)
* 大きく分けて、以下が必要になる。 ~~~~~~~~~ 1)Master 2)Slave 3)ServiceAccess ~~~~~~~~~ * 以下の公式ドキュメントが重宝。
https://docs.aws.amazon.com/ja_jp/emr/latest/ManagementGuide/emr-man-sec-groups.html
1)Master
https://docs.aws.amazon.com/ja_jp/emr/latest/ManagementGuide/emr-man-sec-groups.html
の「マスターインスタンスの Amazon EMR マネージド セキュリティグループ (プライベートサブネット)』を参照。
a) Inbound
# | ソース | プロトコル | ポート範囲 | 説明 |
---|---|---|---|---|
1 | Master | TCP/UDP/ICMP-IPv4 | All | Master自身からのアクセス制御 |
2 | Slave | TCP/UDP/ICMP-IPv4 | All | Slaveからのアクセス制御 |
3 | ServiceAccess | TCP | 8443 | クラスターマネージャはマスターノードと通信可能にする |
b) Outbound
# | ソース | プロトコル | ポート範囲 | 説明 |
---|---|---|---|---|
1 | 0.0.0.0/0 | All | All | 全てOK (厳しくしたい場合は、「※ 補足1 : Outboundの制限」参照) |
※ 補足1 : Outboundの制限
https://docs.aws.amazon.com/ja_jp/emr/latest/ManagementGuide/emr-man-sec-groups.html
より抜粋 ~~~~ カスタム TCP TCP 9443 プライベートサブネット内のサービスアクセスの マネージドセキュリティグループのグループ ID 上記の「すべてのトラフィック」のデフォルトのアウトバウンドルールを削除した場合、 このルールは EMR 5.30.0 以降の最小要件になります。 注記 カスタムマネージドセキュリティグループを使用する場合、 Amazon EMR はこのルールを追加しません。 ~~~~
2)Slave
https://docs.aws.amazon.com/ja_jp/emr/latest/ManagementGuide/emr-man-sec-groups.html
の「コアインスタンスとタスクインスタンスの Amazon EMR マネージドセキュリティグループ (プライベートサブネット)』 を参照。
a) Inbound
# | ソース | プロトコル | ポート範囲 | 説明 |
---|---|---|---|---|
1 | Master | TCP/UDP/ICMP-IPv4 | All | Masterからのアクセス制御 |
2 | Slave | TCP/UDP/ICMP-IPv4 | All | Slave自身からのアクセス制御 |
3 | ServiceAccess | TCP | 8443 | クラスターマネージャはコアノードおよびタスクノードと通信可能にする |
b) Outbound
# | ソース | プロトコル | ポート範囲 | 説明 |
---|---|---|---|---|
1 | 0.0.0.0/0 | All | All | 全てOK (厳しくしたい場合は、「※ 補足2 : Outboundの制限」を参照) |
※ 補足2 : Outboundの制限
https://docs.aws.amazon.com/ja_jp/emr/latest/ManagementGuide/emr-man-sec-groups.html
の「アウトバウンドルールの編集」を参考に。 (ただし、『少なくとも、このセキュリティグループには次のアウトバウンドルールが必要ですが、 一部のアプリケーションでは追加の送信ルールが必要になる場合があります。』って記述にも注意)
3)ServiceAccess
https://docs.aws.amazon.com/ja_jp/emr/latest/ManagementGuide/emr-man-sec-groups.html
の「サービスアクセスの Amazon EMR マネージド セキュリティグループ (プライベートサブネット)』を参照。
a) Inbound
# | ソース | プロトコル | ポート範囲 | 説明 |
---|---|---|---|---|
1 | Master | TCP | 9443 | マスターインスタンスのセキュリティグループとサービスアクセスセキュリティグループの間で通信可能 |
b) Outbound
# | ソース | プロトコル | ポート範囲 | 説明 |
---|---|---|---|---|
1 | Master | TCP | 8443 | クラスターマネージャーはマスターノードとも、コアノードおよびタスクノードともやり取り可能に |
2 | Slave | TCP | 8443 | クラスターマネージャーはマスターノードとも、コアノードおよびタスクノードともやり取り可能に |
4)その他
* Glue(特にData Catalog)のようなAWSサービスを使っている場合は、 それらのエンドポイントを対応するセキュリティグループの Inbound に 「Master」「Slave」それぞれ追加する必要がある => そうしないと、以下のようなエラー「Connect time out」になる
EMR内で発生した実際のエラー内容
org.apache.hadoop.hive.ql.metadata.HiveException: com.amazonaws.SdkClientException: Unable to execute HTTP request: Connect to glue.us-west-1.amazonaws.com:443 [glue.us-west-1.amazonaws.com:443/XX.XX.XX.XX, glue.us-west-1.amazonaws.com:443/XX.XX.XX.XX] failed: connect timed out
例:Glue endpoint用のセキュリティグループの Inbound
# | ソース | プロトコル | ポート範囲 | 説明 |
---|---|---|---|---|
1 | Master | TCP | 443 | MasterからGlue endpointにアクセスするため |
2 | Slave | TCP | 443 | SlaveからGlue endpointにアクセスするため |
関連記事
Amazon EMR ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2020/02/20/230519
Amazon EMR ~ 基本編 ~
https://dk521123.hatenablog.com/entry/2020/05/27/175610
EMRでINSERTを実行した際に Fail する
https://dk521123.hatenablog.com/entry/2022/05/14/001031