セキュリティグループに自分のパブリックIPアドレスを設定する

AWSでリソースを作ってる時、自分以外はアクセスさせたくない状況がありますね。そういう時はSecurity Groupに自分のパブリックIPを指定するわけだけど、terraformでやってるといちいち自分で調べたりして設定するのはやってられません。で、調べたところクラスメソッドさんのblogがわかりやすくて良い感じ。自分用にメモを残しておきます。

イデア

  • TerraformのHTTP Providerを利用して、自分のPublic IPをData SourceとしてTerraformのリソース化
    • HTTP ProviderのData SourceはHTTP ResponseをData Source化してくれる
  • あとはこのData SourceをSecurity groupのIngressルールのCIDRとして追加

サンプル

terraform {
  required_providers {
    http = {
      source  = "hashicorp/http"
      version = "~>2.0"
  }
}

data "http" "ipv4_icanhazip" {
  url = "http://ipv4.icanhazip.com/"
}

variable "allowed_cidr" {
  default = null
}

locals {
  current_ip   = chomp(data.http.ipv4_icanhazip.body)
  allowed_cidr = (var.allowed_cidr == null) ? "${local.current_ip}/32" : var.allowed_cidr
}

resource "aws_security_group_rule" "allow_ssh" {
  type              = "ingress"
  from_port         = 22
  to_port           = 22
  protocol          = "tcp"
  cidr_blocks       = [local.allowed_cidr]
  security_group_id = <security_group_id>
}