初めに
業務でGlueジョブのセキュリティグループを作成しようとした際に、「自己参照インバウンドルール」なるものに苦しめられ半日を溶かしたので、備忘録として残そうと思います。
Glueジョブのセキュリティグループ作成につまずいている同士のお役にたてれば幸いです。
自己参照インバウンドルールって何?
公式のドキュメントを見てみる
公式のドキュメントには以下のように記載してあります。
https://docs.aws.amazon.com/ja_jp/glue/latest/dg/setup-vpc-for-glue-access.html
AWS Glue がコンポーネントと通信できるようにするには、すべての TCP ポートに対して自己参照のインバウンドルールを持つセキュリティグループを指定します。自己参照ルールを作成することで、ソースをすべてのネットワークではなく VPC 内の同じセキュリティグループに制限することができます。
日本語で書いてある気がするのですが、全く理解できませんした。
作成に成功した今だからわかる答え
自己参照インバウンドルールとは、「ソースが自セキュリティグループであるインバウンドルール」の事でした。
実際に作成してみると画像の赤丸のようにソースと自セキュリティグループIDが一致していることが分かります。
CloudFormationでGlueジョブのセキュリティグループを作成する
実際にCloudFormationを用いてGlueジョブのセキュリティグループを作成します。
自己参照インバウンドルールに関して
なんとなく分かったから実際につくってみたい!という方や
全然よく分かんないけどとりあえず急ぎでつくりたい!という方に参考にしていただければと思います。
作成するリソース
- VPC:test-vpc
- セキュリティグループのデプロイに必要なので作成します
- セキュリティグループ:test-sg-glue
- 下記のインバウンドルールとアウトバウンドルールを持ちます
- インバウンドルール
- タイプ:すべてのTCP
- プロトコル:TCP
- ポート範囲:0 - 65535
- ソース:上記セキュリティグループ
- アウトバウンドルール
- タイプ:すべてのトラフィック
- プロトコル:すべて
- ポート範囲:すべて
- 送信先:0.0.0.0/0
CloudFormationテンプレート
AWSTemplateFormatVersion: "2010-09-09"
Resources:
# ---------- Network Resources ----------
# VPC
TestVpc:
Type: "AWS::EC2::VPC"
Properties:
CidrBlock: "10.0.0.0/16"
InstanceTenancy: default
EnableDnsSupport: "true"
EnableDnsHostnames: "true"
Tags:
- Key: Name
Value: test-vpc
# セキュリティグループ
SgGlue:
Properties:
GroupDescription: Security Group to allow connection to the application
GroupName: test-sg-glue
Tags:
- Key: Name
Value: test-sg-glue
VpcId:
Ref: TestVpc
Type: AWS::EC2::SecurityGroup
# インバウンドルール
SgGlueIngress:
Type: AWS::EC2::SecurityGroupIngress
Properties:
GroupId:
Fn::GetAtt: SgGlue.GroupId
IpProtocol: tcp
FromPort: "0"
ToPort: "65535"
# 今回の肝はここ!!ソースに自セキュリティグループのセキュリティグループIDを指定しています。
SourceSecurityGroupId:
Fn::GetAtt: SgGlue.GroupId
# アウトバウンドルール
SgGlueEgress:
Properties:
CidrIp: 0.0.0.0/0
Description: Outbound connection to the VPC
# FromPortとToPortに-1を指定することで、「すべてのポート」を表現できます。
FromPort: -1
ToPort: -1
GroupId:
Fn::GetAtt: SgGlue.GroupId
# IpProtocolに-1を指定することで「すべてのプロトコル」を表現できます。
IpProtocol: '-1'
Type: AWS::EC2::SecurityGroupEgress
デプロイしてみる
AWSのWEBコンソールのCloudFormationサービスから「スタックの作成」を押し、スタックを作成してみます。
VPCの「セキュリティグループ」から作成したリソースを確認してみます。
インバウンドルール・アウトバウンドルールも正しく設定されていることが確認できました!!
まとめ
つくってるときは難しく感じるけど、つくり終えてみたら意外と簡単なものって多いですよね。
また今回はCloudFormationのテンプレートをYAML形式で作成していますが、Visual Studio CodeのプラグインでYAML⇔JSON変換もできるそうなので(試してはいません)、JSON派の方も参考にしていただければと思います。
https://bsblog.casareal.co.jp/archives/4936