はじめに
2021年某日、転職した会社で検証用のAWSアカウントを自由に使っていいとのことだったので、自分のリソースをTerraformで色々作ってみることにした。
VPCから始めてEC2やS3等よく使うものを自分の検証用に作成してみた。
少し空気がひんやりしてきた秋晴れのある日、知らない人からSlackのDMが来た。
どうやらインシデントレスポンスの人らしい。
海外の人なので英語でのメッセージで責め立てられたが、要約するとこう↓いうことらしい
お前のS3バケットがパブリックアクセスになってるからアクセス制限させとくンだわ
あれ?パブリックアクセス許可したっけ?そんなんよく見つけたよね?そもそもどうやって俺のバケットだってわかったの?
そもそもTerraformを使った理由
数年に1回くらいの頻度で転職するので、その都度検証用AWSアカウントで自分のリソースをコンソールから作っていたら、退職するときに1個1個削除していくのがめんどくさかったから、一括で削除したいな、ということで自動化することを検討。
で、Terraformにした理由は単に自分の好みというだけ。
tfファイル作ったらgitで管理しておけばいいし、また転職したときに簡単に自分のリソースをデプロイできるから今後楽かなって。
検知方法
タイトルにもあるようにGuardDutyでアラートが出たらしい。
詳しいことはわからないが、どうやらGuardDuty検知されるとボットが通知を送ってくるとのこと。
バケットから作成者を特定した方法
これは単に自分がタグに自分のメアドを設定していただけ。
TerraformのAWS Providerで default_tags
に設定しておけば、タグをつけられるリソース全てに入るから便利だよね。
これはTerraform使ってよかったと思った。
provider "aws" {
region = var.region
default_tags {
tags = {
Owner = "${var.email}"
ManagedBy = "terraform"
}
}
}
この場合 Owner
タグを見て連絡先を特定したらしい。
こういうタグつけとくの大事だよね。
S3バケットがパブリックアクセス可になっていた原因
Terraformで作成
resource "aws_s3_bucket" "my_bucket" {
bucket = "${var.prefix}-bucket"
acl = "private"
versioning {
enabled = true
}
tags = {
Name = "${var.prefix}-bucket"
}
}
※ ${var.prefix}
には自分の名前を設定
この設定だといけないの?
結論:全然足りない
どうやらTerraformの aws_s3_bucket
リソースで作成したバケットはデフォルトでパブリックアクセス可の状態で作成されるらしい。ナニソレコワイ
パブリックアクセスをブロックするには aws_s3_bucket_public_access_block
リソースを追加しないといけないみたい。
resource "aws_s3_bucket_public_access_block" "my_bucket_public_access_block" {
bucket = aws_s3_bucket.my_bucket.id
block_public_acls = true
block_public_policy = true
ignore_public_acls = true
restrict_public_buckets = true
}
追加した結果
Block all public access がOnになってるからヨシ!
おわりに
至極基本的なことかもしれないけど、S3バケットをTerraformで作ったらデフォルトでパブリックアクセスできるなんて知らなかったので、勉強になった。
パブリックにしてたときは中身は空っぽだったし検証用のバケットだったので、問題ないけど、ここに重要なデータ入れてたらと思うとゾッとする。
ちゃんと監視することって大事なんだなということも思い知った。
インシデントレスポンスの方、わざわざ連絡くれてありがとうございました。そして、ご迷惑おかけしました。
S3以外にもGuardDutyで検知されて対処したネタがあるので、シリーズ化して記事を書こうかと思う。
今回のS3は比較的ライトな話でした。
関連リンク
第1回: 検証用AWSアカウントでGuardDutyと闘う話 〜S3バケット編〜(当記事)
第2回: 検証用AWSアカウントでGuardDutyと闘う話 〜不用意にポート開けるな編〜
第3回: 検証用AWSアカウントでGuardDutyと闘う話 〜怒りのVPN編〜