8
5

More than 3 years have passed since last update.

Glueジョブの自己参照インバウンドルールに苦しめられている同士へ

Last updated at Posted at 2021-06-24

初めに

業務でGlueジョブのセキュリティグループを作成しようとした際に、「自己参照インバウンドルール」なるものに苦しめられ半日を溶かしたので、備忘録として残そうと思います。

Glueジョブのセキュリティグループ作成につまずいている同士のお役にたてれば幸いです。

自己参照インバウンドルールって何?

公式のドキュメントを見てみる

公式のドキュメントには以下のように記載してあります。
https://docs.aws.amazon.com/ja_jp/glue/latest/dg/setup-vpc-for-glue-access.html

AWS Glue がコンポーネントと通信できるようにするには、すべての TCP ポートに対して自己参照のインバウンドルールを持つセキュリティグループを指定します。自己参照ルールを作成することで、ソースをすべてのネットワークではなく VPC 内の同じセキュリティグループに制限することができます。

日本語で書いてある気がするのですが、全く理解できませんした。

作成に成功した今だからわかる答え

自己参照インバウンドルールとは、「ソースが自セキュリティグループであるインバウンドルール」の事でした。
実際に作成してみると画像の赤丸のようにソースと自セキュリティグループIDが一致していることが分かります。
003.jpg

CloudFormationでGlueジョブのセキュリティグループを作成する

実際にCloudFormationを用いてGlueジョブのセキュリティグループを作成します。
自己参照インバウンドルールに関して
なんとなく分かったから実際につくってみたい!という方や
全然よく分かんないけどとりあえず急ぎでつくりたい!という方に参考にしていただければと思います。

作成するリソース

  • VPC:test-vpc
    • セキュリティグループのデプロイに必要なので作成します
  • セキュリティグループ:test-sg-glue
    • 下記のインバウンドルールとアウトバウンドルールを持ちます
  • インバウンドルール
    • タイプ:すべてのTCP
    • プロトコル:TCP
    • ポート範囲:0 - 65535
    • ソース:上記セキュリティグループ
  • アウトバウンドルール
    • タイプ:すべてのトラフィック
    • プロトコル:すべて
    • ポート範囲:すべて
    • 送信先:0.0.0.0/0

CloudFormationテンプレート

SgGlue.yaml
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サービスから「スタックの作成」を押し、スタックを作成してみます。
001.PNG

VPCの「セキュリティグループ」から作成したリソースを確認してみます。
002.jpg

インバウンドルール・アウトバウンドルールも正しく設定されていることが確認できました!!
003.PNG
004.PNG

まとめ

つくってるときは難しく感じるけど、つくり終えてみたら意外と簡単なものって多いですよね。

また今回はCloudFormationのテンプレートをYAML形式で作成していますが、Visual Studio CodeのプラグインでYAML⇔JSON変換もできるそうなので(試してはいません)、JSON派の方も参考にしていただければと思います。
https://bsblog.casareal.co.jp/archives/4936

004.PNG

8
5
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
8
5