Upgrade to Pro — share decks privately, control downloads, hide ads and more …

アクセスキーが漏れた日にやるべきこと- 無効化の先にある本当の対応

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.

アクセスキーが漏れた日にやるべきこと- 無効化の先にある本当の対応

2026年8月22日に倉敷の、倉敷物語館で行われた「JAWS-UG Okayama 2026」で登壇した際の資料です

追記)登壇中にいただいた情報を Appendix に追記しました

・代替連絡先 にある Security contact information(セキュリティに関する連絡先)を忘れずに設定しよう!
・GitHub へのキー公開などは AWS でも巡回監視していて、発見次第連絡するけど、その連絡先がわからないことにはね…、ということです

#jawsoka #jawsug

Avatar for kazzpapa3

kazzpapa3

August 22, 2026

More Decks by kazzpapa3

Other Decks in Technology

Transcript

  1. Biography { "Bio": { "Name": "ICHINO Kazuaki a.k.a. kazzpapa3", "Organization":

    "A certain AWS partner company", "Role": "Technical Support Engineer", "Favorite AWS Services": [ "AWS CLI", "AWS CloudTrail", "Kiro CLI" ], "Less Favorite AWS Service (as a Support Engineer)": [ "AWS Billing (請求ロジックが難解すぎる)" ], "Personal Interest": "初音ミク", "Socials": { "Twitter/X": "@kazzpapa3", "LinkedIn": "https://www.linkedin.com/in/kazzpapa3/" } } }
  2. 昨年、倉敷にお伺いした時にこんなことしてました 2025-08-30 08:57 姫路駅でえきそば食べる 2025-08-30 11:23 倉敷駅着(在来線) → 倉敷うどん ぶっかけ

    ふるいち 仲店さんでうどん食べる 2025-08-30 12:00 倉敷物語館周辺に到着 2025-08-30 12:34 AWS からの緊急通知(Irregular Activity Detected for Your AWS Access Key for Account)受信 オールカフェ×タニタカフェ あちてらす倉敷店 さんまで戻る お腹いっぱいなのにチーズケーキセット頼んで座席確保、緊急対応する @kazzpapa3 / #jawsoka #jawsug 4 / 92
  3. 得てして、休みの日とか夜間に喰らう 昨年の JAWS-UG 岡山の前にも、社員旅行で行っていたススキノで Abuse Report 受信 JAWS FESTA 2025

    in 金沢の翌日の大人の遠足での能登半島の先っち ょでアクセスキー流出が疑われる通知を受信 結果、私不在で集合写真撮影が終わっていた JAWS 界隈の面々と飲んでいた時にアクセスキー流出で上司からじゃん じゃん電話がなる など @kazzpapa3 / #jawsoka #jawsug 5 / 92
  4. おかげさまで、という言い方は適していませんが アクセスキー流出関連でいくつかの登壇や、イベント開催をしました 支部・イベント JAWS DAYS 2026 タイトルなど Abuse report だけじゃない。AWS

    から緊急連絡が来る状況とは?昨今の攻 撃や被害の事例の紹介と備えておきたい考え方について クラメソおおさか IT 勉強会 Midosuji CloudTrail を見つめ直してみる Tech AWS Community Builders Meetup 2026 今年取り組んでみたいこと アクセスキー撲滅運動の旗振りかなぁ JAWS-UG DE&I AWS麻雀で 楽しく 遊んで 学ぼう!! あまりにもアクセスキーの事故が多いので CTF のゲームを作った話 JAWS-UG 神戸 自作の CTF Game 大会開催 AWS Summit Japan 2026 Builder Community Lounge クレデンシャル流出 ― 攻撃 3 時間 vs 復旧 10 時間。この非対称性にどう備 えるか(チョークトーク) 7 / 92
  5. この 1 〜 2 年で私が見聞きしたパターン # 性質 代表的なメール件名 1 バウンス

    Amazon SES Bounce Review Period for AWS Account ${AWS_ACCOUNT_ID} 2 Abuse Report Your AWS Abuse Report [${AWS_CASE_ID}] [AWS ID ${AWS_ACCOUNT_ID}] 3 アクセスキーの流出 [CASE ${AWS_CASE_ID}] ACTION REQUIRED: Your AWS Access Key is Exposed for AWS Account ${AWS_ACCOUNT_ID} 4 異常なアクティビティの検出 [Action Required] Unexpected Activity Detected on your AWS Account [AWS Account: ${AWS_ACCOUNT_ID}] 5 脆弱性レポート Your AWS Vulnerability Report [${AWS_CASE_ID}] [AWS ID ${AWS_ACCOUNT_ID}] 6 アクセスキーに対する不審な アクティビティの検出 [CASE ${AWS_CASE_ID}] [Action Required] Irregular Activity Detected for Your AWS Access Key for Account [AWS Account: ${AWS_ACCOUNT_ID}] 7 第三者からの不正なアクセス が疑われる事象の検出 [CASE ${AWS_CASE_ID}] [Action Required] Please review your AWS Account and credentials ${AWS_ACCOUNT_ID} 8 バウンス [CASE ${AWS_CASE_ID}] Sending Blocked - Compromised Credentials occured for offending VID [${MAIL_ADDRESS}] AWS ID ${AWS_ACCOUNT_ID} 通知件名に多少のブレや、未知の件名が発生する可能性 はあります
  6. 性質別 Abuse Report : 9件 バウンス : 9件 アクセスキーに対する不審なア クティビティの検出

    : 5件 通知の性質別分布 アクセスキーの流 1件(3.0%) 異常なアクティビ 4件(12.1%) Abuse Re 9件(27.3%) アクセスキーに対 5件(15.2%) 脆弱性レポート : 5件 異常なアクティビティの検出 : 4件 脆弱性レポート 5件(15.2%) バウンス 9件(27.3%) アクセスキーの流出 : 1件 13 / 92
  7. 曜日別 月曜日: 8件 8 8 曜日別通知件数 火曜日: 4件 水曜日: 8件

    木曜日: 4件 4 4 4 3 金曜日: 4件 2 土曜日: 3件 日曜日: 2件 月 火 水 木 金 土 日 14 / 92
  8. 時間帯別 時間帯別通知件数 7 7 4 数件 3 3 2 2

    1 0 1 1 2 3 1 4 5 6 7 8 9 10 11 12 1 13 時刻 14 1 15 16 17 18 19 20 21 22 23 15 / 92
  9. 攻撃手法 1. 第 1 波としてアクセスキー ID とシークレットアクセスキーの不正入手 とそれを利用され、別の IAM ユーザーとアクセスキーを作成される

    その後、新しく作成したアクセスキーで以下のような行動を実施される 1. 既存の IAM ユーザーのログインプロファイルの削除 2. SageMaker Notebook インスタンスの乱立 3. ECS コンテナの乱立 4. IAM ロールの信頼ポリシーの変更 18 / 92
  10. 対処したのにもう一度 2. 第 2 波として、再度不正利用をされる 1. 第 1 波の対応時点でアクセスキーの削除はしていた 2.

    <1-4> で IAM ロール OrganizationsAccountAccessRole の AssumeRole の引き受け元の AWS アカウント ID を書き換えられて いた 3. <2-2>で設定されていた AWS アカウントから OrganizationsAccountAccessRole ロールへスイッチロールされ、 新たなアクセスキーを作成され、それを利用された 19 / 92
  11. 第1波 不正入手したアクセスキーを用いて犯行用の別の IAM ユーザー・アク セスキーを作成 各種リソースの削除、改変、リソースの乱立をされていた AWS Account ②③ 不正利用

    このロールは AWS Organizations 管理アカウントからメン バーアカウントを発行した際にデフォルトで作成されるロー ル 通常、管理アカウントが AssumeRole の引き受け元となるよ うに払い出されます ①削除 不正入手 新規作成 利⽤ ④改変 ①削除 20 / 92
  12. 対応時間の非対称性を認識した事例 事例1はお客様で手配されたベンダーで封じ込めやフォレンジックを行 なっていたため全容は不明 事例2は弊社で封じ込めの支援をした例(攻撃手法はほぼ類似) 攻撃者は 約 17 分 でリソースを作成(実際には仕込み完了まで) 対して、弊社側の削除作業に

    合計約 4 時間要しました リソース 作成(攻撃者) 削除(対応者) 作成数 Auto Scaling Group 約 13 分 約7分 約 300 個 SageMaker Notebook 約 13 分 約 19 分 約 150 個 ECS Cluster 約 12 分 約 2 時間 24 分 約 2,700 個 EC2 Instance ASG 配下・継続起動 約 1 時間 約 1,000 台 23 / 92
  13. 依存関係により削除作業に明確な順序が必要 例えば ECS は「タスク停止 序が必要 → サービス削除 → クラスター削除」の順 SageMaker

    は起動中は削除不可。停止 → 完了待ち → 削除を 1 つずつ 全リージョン対応のため、確認・削除範囲が膨大 普段使っていなかったリージョンを有効化されていることもある 正規リソースと不正リソースの選別 に時間がかかる(第三者には判断 がつかない) 26 / 92
  14. 実際の通知文面(抜粋) “ “We detected potentially unexpected activity in your AWS

    account. This activity is related to your AWS access key(s) belonging to User(s) on the account. 英語で届く(弊社では日本語翻訳も送付) 基本的に Step 1 〜 Step 4 の手順が記載されている 焦らず上から順に対応すれば、大体なんとかなる 30 / 92
  15. 通知文面での案内 “Step 1: If your application uses the exposed access

    key, you need to replace the key. To replace the key, first create a second key (at that point, both keys will be active). Then, modify your application to use the new key. “ Next, disable (do not delete) the exposed key... When your application is fully functional using the new key, please delete the exposed access key(s). 32 / 92
  16. ここで重要なのは 正規利用のプログラムが どこにいるか 把握できているか? そもそも 今すぐ判断できる人は誰 か? 有事の際の 業務影響 を判断できるか?

    定期的な棚卸し、最新の情報を把握しておく必要がある 必要な情報 ないとどうなるか どのシステムで利用されているか ローテーション時の影響範囲がわからない 技術的判断は誰が下せるか 深夜に連絡がついても判断ができない ビジネスインパクトはどの程度か 最悪の場合に止めていいのかの判断ができない 36 / 92
  17. 通知文面での案内 “Step 2: Check your CloudTrail log for unwanted activity.

    “ Check your account for any unwanted activity, such as creation of unapproved IAM users and/or associated passwords (login profile), access keys, policies, roles or temporary security credentials 38 / 92
  18. IAM のイベントは us-east-1 に記録される IAM は グローバルサービス であるため、CloudTrail のイベント履歴は 米国東部(バージニア北部)リージョン

    に記録される 東京リージョンで見ても IAM の操作ログは出てこない 焦っている時ほど陥りやすいポイント 40 / 92
  19. 確認すべきポイント 不正な IAM ユーザーの 作成 がないか 新たなアクセスキーの 発行 がないか 既存

    IAM ユーザーのログインプロファイル(パスワード)の 削除 がな いか 既存 IAM ロールや IAM ポリシーの 改変 がないか 信頼ポリシーの 書き換え(バックドア)がないか 41 / 92
  20. 犯行者の典型的な行動パターン 1. 流出したアクセスキーで 新たな IAM ユーザー・アクセスキーを作成 2. 既存 IAM ユーザーの

    ログインプロファイルを削除 正規ユーザーをコンソールから締め出し、発見を遅らせるため 3. 既存 IAM ロールの 信頼ポリシーを改変(再侵入経路の確保) 4. 新たに作成したキーで 各種リソースを乱立 42 / 92
  21. 「数珠繋ぎ」の調査が必要 流出キー → 新規作成キー → さらにその先… と追跡する必要がある 1 つの IAM

    リソースの確認で終わりではない すべての派生を追い切る必要がある 43 / 92
  22. AWS CLI + jq で抽出が有効 aws cloudtrail lookup-events \ --lookup-attributes

    \ AttributeKey=AccessKeyId,AttributeValue=AKIAIOSFODNN7EXAMPLE \ --start-time "2026-08-01T00:00:00Z" \ --end-time "2026-08-22T00:00:00Z" \ --region us-east-1 CloudShell なら AWS CLI と jq が導入済み CSV に加工して俯瞰するのが効率的 45 / 92
  23. 通知文面での案内 “Step 3: Review your AWS account for any unwanted

    usage. Check your account for any unwanted usage, such as EC2 instances, Lambda functions, or EC2 Spot bids... “ Please note, unwanted usage can occur in any region 48 / 92
  24. IAM 以外の AWS サービス全般を確認する EC2 インスタンス、Lambda 関数、ECS クラスター・タスク・サービ ス、SageMaker ノートブックなど

    有効化されているすべてのリージョン で確認が必要 マネジメントコンソールでは一度に 1 リージョンしか見られない 49 / 92
  25. 確認の着眼点 流出したアクセスキーの IAM ポリシーで 何ができるか を把握する 関連する IAM アクションの一覧は AWS

    サービスリファレンスで確認 可能 servicereference.us-east-1.amazonaws.com CRUD のうち Read 以外(Create / Update / Delete)を中心に確認 51 / 92
  26. CloudTrail 証跡がある場合 S3 に JSON 形式で保存されている Amazon Athena と連携した SQL

    クエリでの検索が有効 全リージョン横断での分析が容易 52 / 92
  27. CloudTrail 証跡がない場合 デフォルトの管理イベント(90 日間)のみが利用可能 全リージョンの目視確認は現実的でない AWS CLI での抽出 → CSV

    加工 → 俯瞰が有効 先ほどのツール research-via-cloudtrail などを使って全リージョン横 断で実行可能にしておくと良い 53 / 92
  28. ところで:AWS からリソース一覧が届くことがある “ “We will provide a list of potentially

    unexpected resources related to this event through the associated Support Case within the next 2 hour(s). 通知から約 2 時間以内に意図しないと思われるリソース一覧が提供され ることがある(ただし、来ないこともある) 届いても全てを網羅的に見ていない可能性がある 意図して作成したリソースかは第三者からの判断ができないため、結局 利用者自身で調査することが重要 54 / 92
  29. 通知文面での案内 “ “Step 4: Please work with your TAM/Account Manager

    and respond to the existing Support Case or create a new one to confirm completion of steps 1-3 and apply for a billing adjustment, if applicable. 56 / 92
  30. 重要な注意点 観点 内容 確約ではない 必ず承認されるわけではない AWS 担当部署による個別審査 基準は非開示 承認・否認の審査基準は公開されていない 2

    回目は厳しい 同一事態で過去に減免を受けている場合 2 回目は承認されないことがほとんど 時間がかかる 審査に時間を要し、一旦は支払いが必要な場合がある Step 1〜3 完了が前提 対処が完了していないと審査に進めない 58 / 92
  31. 攻撃者 vs 防御者 観点 攻撃者 防御者 リソース作成 自動化・IaC 化済 ID

    を知らないと削除できない 所要時間 仕込み完了まで 約 17 分 全容把握 3.5 時間 + 削除 4 時間 リージョン 全リージョンに並列展開 1 リージョンずつ確認 依存関係 気にせず作るだけ 削除順序を守る必要あり 判断 迷いがない 正規 vs 不正の選別に時間 61 / 92
  32. 実際の数字で振り返る リソース 作成(攻撃者) 削除(対応者) 作成数 Auto Scaling Group 約 13

    分 約7分 約 300 個 SageMaker Notebook 約 13 分 約 19 分 約 150 個 ECS Cluster 約 12 分 約 2 時間 24 分 約 2,700 個 EC2 Instance ASG 配下・継続起動 約 1 時間 約 1,000 台 62 / 92
  33. なぜ削除にこんなに時間がかかるのか 1. ID(ARN)の把握 が必要 作成はリクエストを送るだけ、削除は対象を明示的に指定する必要が ある 2. 依存関係 により削除に明確な順序が必要 →

    サービス削除 → クラスター削除 SageMaker:起動中は削除不可。停止 → 完了待ち → 削除を 1 つずつ ECS:タスク停止 63 / 92
  34. 攻撃 3 時間 vs 復旧 10 時間 攻撃者は IaC で自動化

    されたリソース乱立を実行 対応者は 手作業で全容把握 → 選別 → 依存関係の解決 → 削除 この時間差の間も 課金は止まらない そして、通知に気づいて着手するまでの時間がさらに加算される 65 / 92
  35. 自分が何者か判断がつくと悪用が早い・多様化する? AmazonEC2FullAccess がついていても EC2 インスタンスが急増しな いこともある IAM アクションの許可がなく、自分が何者か、何ができるかがわからな いと、何もしないことがあるように見える 無駄に

    AWS API を叩いても Access Denied が多発するだけなので、 そこから犯行が漏れるのを忌避している?(私の推察) IAM 権限がついていなければ AmazonEC2FullAccess をつけていても いい、と言っているわけではないことに注意 68 / 92
  36. AWSCompromisedKeyQuarantine ポリシー “ “Denies access to certain actions, applied by

    AWS in the event that an IAM user's credentials have been compromised or exposed publicly. The policy aims to limit the potential damage that may be caused by fraud-related activity leading to unauthorized charges, while not impacting the existing resources. Do NOT remove this policy. 新規リソースを構築させないことで不正利用で高額請求が発生するのを 止めるが、既存のリソースは極力巻き込まないことを目論むポリシー 現在は V3 となっている 72 / 92
  37. ユーザーが使うべきでない、とは書いていない GitHub のバブリックな URL として一意に表すことができ、かつ、ア クセス可能、といった流出が明確な場合に AWS 側で IAM エンティテ

    ィにアタッチすることがある このポリシーを付与することで、新規のリソース構築が拒否される アタッチ時点以降、犯行者が仕込んでいたプログラムも拒否されはじめ リソースの乱立を低減することはできそう ただし、過信は禁物 あくまで根本的な対処は必要 73 / 92
  38. アクセスキーの代替手段 ユースケース 代替手段 コマンド 概要 コンソール認証情報で CLI / SDK を利用

    一時的な認証情報を自動取得(2025年11月〜) ローカル開発 aws login CI/CD(GitHub Actions 等) OIDC フェデレーション IAM OIDC プロバイダー経由で AssumeRole オンプレ / AWS 外 IAM Roles Anywhere X.509 証明書ベースで一時認証情報を取得 (2022年7月〜) EC2 / ECS / Lambda インスタンスプロファイル タスクロール / 実行ロール サービスが一時認証情報を自動提供 76 / 92
  39. OIDC フェデレーション(GitHub Actions) permissions: id-token: write contents: read steps: -

    uses: aws-actions/configure-aws-credentials@v4 with: role-to-assume: arn:aws:iam::123456789012:role/GitHubActionsRole aws-region: ap-northeast-1 アクセスキーをシークレットに保存すること自体が不要に ワークフローから IAM ロールを直接 Assume 79 / 92
  40. 漏れたら困るもの自体が存在しないこと aws login → ローカル開発から永続キーを排除 → CI/CD から永続キーを排除 IAM Roles

    Anywhere → オンプレから永続キーを排除 インスタンスプロファイル / タスクロール → コンピュートから排除 OIDC 漏れる可能性があるもの自体を減らす ことが最も確実な対策 80 / 92
  41. アクセスキーが漏れた日にやるべきこと Step 内容 ポイント 1 キーのローテーション 無効化だけで終わらず削除まで 2 CloudTrail で

    IAM 系の調査 us-east-1 で確認。数珠繋ぎの追跡 3 CloudTrail で全般的な調査 全リージョン × 権限の範囲で確認 4 減免申請 必ず承認されるわけではない 82 / 92
  42. 今日からできること 1. アクセスキーの棚卸し をする 存在しているか?本当に必要か?撤廃できないか? 2. 撤廃できないなら 最小権限 にする *FullAccess

    や AdministratorAccess がついていないか? 3. シミュレーション(避難訓練) をやってみる 今「漏れました」と言われて、すぐ動ける体制になっているか? 4. キーレス化 を段階的に進める まずは aws login で ~/.aws/credentials から永続キーを消す 86 / 92
  43. 参考リンク(AWS 公式情報) AWSCompromisedKeyQuarantineV3 - AWS Managed Policy AWS enables developers

    to use console credentials for AWS CLI and SDK authentication(aws login / What's New) aws login - AWS CLI Command Reference The IAM Roles Anywhere trust model - IAM Roles Anywhere AWS Service Reference Information 92 / 92