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として追加
サンプル
- こんな感じ。パラメタで指定できるようにもしてる。
- chompの説明はこちら
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>
}