Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
復号できなくなると怖いので、AWS KMSキーの削除を「面倒」にしてみた
Search
iwamot
PRO
July 21, 2025
Technology
200
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
復号できなくなると怖いので、AWS KMSキーの削除を「面倒」にしてみた
Cloud Operator Days Tokyo 2025
https://cloudopsdays.com/
iwamot
PRO
July 21, 2025
More Decks by iwamot
See All by iwamot
MCP Appsを作ってみよう
iwamot
PRO
4
810
自己紹介
iwamot
PRO
1
120
パワポ作るマンをMCP Apps化してみた
iwamot
PRO
0
930
8万デプロイ
iwamot
PRO
2
420
AIエージェント・マイクロサービス時代。AWSでの手軽な構築法を考えて試してみた
iwamot
PRO
1
130
これがLambdaレス時代のChatOpsだ!実例で学ぶAmazon Q Developerカスタムアクション活用法
iwamot
PRO
10
2.9k
Developer Certificate of Origin、よさそう
iwamot
PRO
0
120
復号できなくなると怖いので、AWS KMSキーの削除を「面倒」にしてみた CODT 2025 クロージングイベント版
iwamot
PRO
1
220
IPA&AWSダブル全冠が明かす、人生を変えた勉強法のすべて
iwamot
PRO
15
12k
Other Decks in Technology
See All in Technology
AI時代のデータ基盤を考える問い
pacocat
0
800
Point Cloud as a Foreign Language for Multi-modal Large Language Model
takmin
0
350
KAEN Company Deck
kaen
PRO
0
210
Oracle AI Databaseデータベース・サービス: BaseDB/ExaDB-Dの可用性
oracle4engineer
PRO
1
1k
hookで自作する Claude Code の「実況ボード」
shinyasaita
2
280
アクセスキー流出時の対応で再認識した攻撃側と防御側の非対称性について
kazzpapa3
1
500
Nav2、Nav3 ... はたまた自作?〜 作って理解する Nav3 の設計意図 〜 / Nav2, Nav3 ... or Build Your Own? — Understanding Nav3's design intent by building it from scratch
yanzm
0
120
Bet AI Day 2026丨AIによって本質に戻るシステムリスク管理
layerx
PRO
0
360
Genie Code ワークショップ 基礎編 / Genie-Code-Workshop-fundamental
databricksjapan
PRO
0
260
When Token Pruning is Worse than Random: Understanding Visual Token Information in VLLMs
sansantech
PRO
0
220
ClaudeCodeでセキュリティ監視業務を半自動化_1年の運用でわかったAIに任せる設計の5つのポイント
kintotechdev
4
1k
Bet AI Day 2026丨How We Bet AI: AIとともに働く場をつくる
layerx
PRO
0
1k
Featured
See All Featured
The Spectacular Lies of Maps
axbom
PRO
1
950
The agentic SEO stack - context over prompts
schlessera
0
880
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
120
120k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.8k
Amusing Abliteration
ianozsvald
1
280
Site-Speed That Sticks
csswizardry
13
1.5k
KATA
mclloyd
PRO
35
15k
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
400
A Modern Web Designer's Workflow
chriscoyier
698
190k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.6k
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
2
410
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
260
Transcript
復号できなくなると怖いので、 AWS KMSキーの削除を「面倒」にしてみた Cloud Operator Days Tokyo 2025 https://cloudopsdays.com/ ENECHANGE株式会社
VPoT兼CTO室マネージャー 岩本隆史
自己紹介 岩本 隆史 (@iwamot) 勤務先:ENECHANGE株式会社 (2021/7~) 全社的な技術戦略の策定・推進 事業部への技術支援のリード AWS Community
Builder (2024/3~) カテゴリ:Cloud Operations
こんな話です AWS KMSキーの削除が怖くなった 削除を「面倒」にする案がひらめいた 実装してみた 安心できた
AWS KMSキーの削除が怖くなった
2025/2/3:不要となったAWS環境の削除を実施 1月末で提供終了したサービス 事業部からの削除依頼を受けた RDS DBインスタンスの最終スナップショットを念のため作成 RDS、ECS、KMSキーなどのリソースを terraform destroy
2025/2/14:このままだと復号不能になると気づく 最終スナップショットがKMSキーで暗号化されていることに気づいた 暗号化したDBインスタンスでは当然の挙動 KMSキーを削除すると、最終スナップショットが復号不能に KMSキーまで terraform destroy したのは浅はかだった ありがたいことに、KMSキーは30日間の削除待機期間に入っていた 危険な操作なので、デフォルトでそうなる
2025/2/17:KMSキーの削除をキャンセル マネジメントコンソールでキャンセルを実施 terraform import でステートを戻し、tfファイルを復活 リポジトリのREADMEに意図を記載 必要な場合にRDSのスナップショットを復元できるよう、KMSキーのみ残し ています。
「うっかり削除」を防ぐ仕組みがないと怖い 待機期間があるとはいえ、気づかずに削除してしまうリスクがある レビューで確実に防げるとも限らない
削除を「面倒」にする案がひらめいた
うっかり削除を防ぎたいなら「面倒」にすればよい 本当に不要なキーもあるので、一律に削除を禁ずるのはNG 防ぎたいのは「うっかり削除」 目指すべきは「ちゃんと考えれば削除できる」状態
特定のタグを付けると削除できる仕組みはどうか deletable = true タグが付いているキーのみ削除を許可 削除が拒否されたらSlackに通知 deletable = true タグが付いているか確認するよう促す
(権限不足による拒否かもしれないため「付けろ」とまでは言わない) 削除が待機されてもSlackに通知 復号できなくなっても問題ないか、削除予定日時までに確認するよう促す
タグでの制御はRCPで実装できそう RCP (Resource Control Policy) AWS Organizationsで使えるポリシーの一種 組織内のリソースへのアクセス条件を一元的に絞れる KMSもサポート対象 S3、STS、SQS、Secrets
Managerも(2025年6月現在)
削除拒否/待機の検知はEventBridgeで可能そう ScheduleKeyDeletion APIの呼び出しをEventBridgeルールで検知 エラーが含まれる = 拒否イベント エラーが含まれない = 待機イベント 前提:CloudTrailで証跡のログ記録が有効になっていること
EventBridge → SNS → Amazon Q Developer → Slackの流れで通知 Amazon Q Developer:旧称 AWS Chatbot
実装してみた
3つのTerraformモジュール Hubモジュール :メインリージョンの拒否・待機イベントを通知 Spokeモジュール:サブリージョンの拒否・待機イベントを通知 RCPモジュール :ポリシーの作成~アタッチ
Hubモジュール module "hub" { source = "..." sns_topic_arn = aws_sns_topic.this.arn
} 拒否・待機イベントを検知するEventBridgeルールを作成 ルールのターゲットとして、指定のSNSトピックを設定 ターゲットにイベントを送信するIAMロールを作成 「SNS → Amazon Q Developer → Slack」には既存モジュールを利用
Spokeモジュール module "spoke_us_east_1" { source = "..." providers = {
aws = aws.us_east_1 } # サブリージョン hub_event_bus_arn = module.hub.event_bus.arn hub_iam_role_arn = module.hub.iam_role.arn hub_region_name = module.hub.region.name # メインリージョン } 拒否・待機イベントを検知するEventBridgeルールを作成(Hubと同じ) ルールのターゲットとして、Hubのイベントバスを設定 (SNSトピックを変えたくなっても、Hub側を直すだけで済む) ターゲットにイベントを送信するIAMロールとして、Hubのロールを流用 hub_region_name は、Hubと同じリージョンへのデプロイ防止に利用
RCPモジュール module "rcp" { source = "..." target_ids = [
local.accounts.prod.id ] } deletable = true タグ未設定のキー削除を禁じるRCPを作成 指定のAWSアカウント(あるいはOU)にアタッチ
安心できた
2025/4/24:変更アナウンス
2025/4/24:全organizationで設定完了 ENECHANGEでは複数のorganizationを運用中 アカウントの追加はほぼないため、Terraformで普通に構築 追加が多ければ、CloudFormation StackSetsによる自動デプロイが楽そう
2025/4/28:初めての拒否通知
2025/4/28:初めての待機通知 → これで安心
️ まとめ
KMSキーの削除を「面倒」にしたら安心できた うっかり削除すると、復号できなくなるので怖い 削除を「面倒」にする案がひらめき、実装した 「うっかり」は防ぎつつ「ちゃんと考えれば削除できる」状態が実現できた 学び:危険な操作を「面倒」にする案、広く応用できそう 何かないか考えてみよう