✍️ 「SREをはじめよう:第三章」〜営業の学習記〜

こんにちは。my-ztです。

遅ればせながら、本年もよろしくお願いします〜

さてさて、今回は「SREをはじめよう」の第三章についてブログを書いていきます。

ちなみに、私は非エンジニアではありますが、昨年から「SREをはじめよう 〜営業の学習記〜」と題し、ブログを書いてます。

過去のブログは下記をご確認ください! blog.topotal.tech blog.topotal.tech

📚営業視点で響いた2つの「SREの文化」

1. 個人の心構えだけではなく組織全体で取り組む

第2章のテーマは「SREの心構え」でした。これは個人の話と認識しており、今回の第三章の「SREの文化」は組織・環境の話であると解釈しました。

いくら個人が「さぁ、今日からSREとしてやっていくぞ! おう!」と意気込んでチームを発足しても、それを受け入れる土壌が組織になければその活動を継続させることは非常に難しいのでないでしょうか。

SREが必要とする環境を理解し、組織全体を巻き込んでいくことで、SREは孤独なヒーローではなく組織全体で育てていくものだということが、この章で伝えたいことなのではないか?と感じました。

2. 実は一番苦手なアピールこそが重要

SREの活動の中で、繰り返される手作業の撲滅は、できたからといって派手な機能がリリースされるわけではありませんし「マイナスがゼロになる」ような、静かな成果となるケースもあります。

だからこそ、ほんの些細なことでも、トイルの撲滅ができたら大いに喜び、アピールしていくことが重要だと...(私はアピールすることが得意ではありません)

しかし、SREの文脈ではその謙虚さが裏目に出る可能性もあります。

「何も起きていない」ということは、実は誰かが裏で必死に手作業を撲滅し、信頼性を守っている証拠かもしれないからです。 それを言葉にして伝え、チームで讃え合わなければ、「SREって何してるの?」となってしまい、文化は根付かないかもしれませんね。

ちなみに、Topotal社内のSRE定例会では「今週の偉業」を共有する時間があります。 これからはアピールが得意ではないと言わず、すでに確立されたポジティブな文化の波に乗るために、小さなことでもどんどん発信していきたい……!

まとめ

「SREの文化」とは、何か高尚なスローガンを掲げることではなく、日々の小さな改善を、組織全体で『いいね!』と言い合える空気を作ることなのかもしれません。

読み初めは、内容が頭にうまく入ってこない と思った第三章でしたが、読み終えてみると、自分の日々の行動(特にアピール不足!)を見つめ直すきっかけになりました。

⏭️次回予告

次回は 「SREをはじめよう_第四章:SREについて語る」 についてです。

SREではない非エンジニアがSREについて語る…

これまた かなりハードルが高い章ではありますが、引き続き読んでみての所感と非エンジニアにとっての学びがあるのか?を意識して書いていきたいと思います〜

Amazon RDS/Aurora IAMデータベース認証における監査ログを考慮した運用設計:ジャストインタイムデータベースアクセスのアプローチ

こんにちは、SREチームの與島(よしま)です。

AWS環境において開発者がデータベースにアクセスするための仕組みを整備する際に、Amazon RDS/Aurora IAMデータベース認証を利用することは、パスワード管理が不要でかつ、データベース接続権限をIAMで一元管理できるという点で魅力的です。

しかし、IAMデータベース認証は運用方法によってはデータベース監査ログに記録されるユーザー名から実際に操作を実行した個人を追跡できないという課題があります。

この記事では、IAMデータベース認証を利用しながらこの課題に対処するために構築したジャストインタイムデータベースアクセスの仕組みについて紹介します。

IAMデータベース認証

IAMデータベース認証は、IAMポリシーによってデータベース接続の可否を検証する認証方式です。データベースに接続する際には、パスワードの代わりに認証トークンを利用します。認証トークンはクライアント側で生成します。データベースはユーザー名と認証トークンを受け取り、当該ユーザーで接続する権限を、認証トークンを生成したIAMエンティティが保持しているかどうかを検証します。

通常のパスワード認証の代わりにIAMデータベース認証を使うメリットは大きく2つあります。

  • パスワード管理が不要: 認証トークンを利用する方法では、利用者がデータベース接続する際にローカルで認証トークンを生成すればよいので、ユーザー作成時のパスワード発行やメンバーへのパスワードの連絡が不要です。また、認証トークンは15分という有効期限があるので、利用者によるパスワード管理も不要です
  • IAMによるデータベース接続権限の管理の一元化: 役割変更などに伴いデータベース接続権限を更新する際には、通常データベース側でのユーザーの無効化や削除が必要ですが、IAMデータベース認証ではIAMポリシーの更新で対応できます

IAMデータベース認証の課題:責任追跡性

IAMデータベース認証における課題は、運用方法によっては責任追跡性1が満たせない点です。ひとつのデータベースユーザーを複数のIAMエンティティから利用できる状況では、データベース監査ログに記録されたイベントからその操作主体を特定できません。これはデータベース監査ログに記録されるのはデータベース側のユーザー名のみであって、そのデータベースユーザーを利用して接続したIAMエンティティの情報は記録されないためです。

具体例で説明します。複数のIAMエンティティ(iam-entity-aiam-entity-b)が、データベースユーザー dbuser を利用する権限を持つIAMロールiam-role-cにassume-roleできるとします。この場合、監査ログに記録された dbuser の操作が、iam-entity-aiam-entity-bのどちらによるものか厳密には特定できません。2

IAMデータベース認証を利用しながら責任追跡性を満たす

IAMデータベース認証を利用しながら責任追跡性を満たそうとした場合に現時点で最もベターな運用方法は、個人に紐づくIAMエンティティごとにデータベースユーザーを作成する方法です。ここでいうIAMアイデンティティは、典型的にはIAM Identity Centerユーザーです。IAM Identity Centerユーザーごとに対応するデータベースユーザーのみを利用できるようにIAMポリシーで制限をかければ、実質的に個人とデータベースユーザーを一対一に対応させられます。これによってデータベース監査ログに記録されたユーザー名から個人を辿れるようになります。

しかし、この方式では責任追跡性が満たせる一方で、新たに考慮すべき要素としてユーザーと権限の管理が加わります。メンバーの入社時や異動時にはデータベースユーザーの作成が、役割変更時には権限の更新、退職時には削除が必要です。データベースインスタンスが複数ある場合には"メンバー数 × データベース数"分のデータベースユーザーと権限を管理する必要があり、管理対象の数が増加します。

今回取り組んだ環境はテナントごとに個別のデータベースインスタンスがあり、今後もテナントとともに増加していく予定なので、それに伴う管理コストの増加が懸念にあがりました。

責任追跡性・ユーザーと権限の管理というトレードオフ構造がある状況に対して、異なるアプローチによってIAMデータベース認証を利用しながら両者をバランスよく実現できないかを模索し、考案、実装したのがジャストインタイムデータベースアクセスの仕組みです。

ジャストインタイムデータベースアクセス

利用者がデータベースに接続したいときに、一時的なデータベースユーザーとその認証トークンを都度発行する仕組みです。中心になるのは、リクエストに応じてデータベースユーザーの作成と認証トークンの生成を行うLambda関数です。このLambda関数のことを以降はjit-db-accessと呼びます。メンバーはjit-db-accessにリクエストして一時的なデータベースユーザーと認証トークンを受け取り、その認証情報を使ってデータベースに接続します。

利用時の流れを説明したあとに、責任追跡性・ユーザーと権限の管理に対してそれぞれどのようにアプローチしているかを紹介します。

利用時の流れ

開発者Aliceがジャストインタイムデータベースアクセスの仕組みでAmazon RDS/Aurora(MySQL)のデータベースに接続するときの流れを図で示します。

  1. 開発者(Alice): 接続したいデータベースを含むリクエストをAPIゲートウェイに送信
  2. APIゲートウェイ: IAM認証を経由してjit-db-accessをトリガー
  3. jit-db-access: ペイロードに含まれる接続先データベースにデータベースユーザー alice を作成
  4. jit-db-access: データベースユーザー alice に接続するための認証トークンを生成
  5. jit-db-access: データベースユーザー名と認証トークンを開発者にレスポンス
  6. 開発者(Alice): データベースユーザー名と認証トークンでデータベースに接続
  7. データベース: IAMデータベース認証プラグインで認証トークンを検証

責任追跡性: 個人とデータベースユーザーの紐づけ

jit-db-accessにリクエストできるIAMエンティティをIAM Identity Centerユーザーのみに制限したうえで、作成するデータベースユーザー名にIAM Identity Centerユーザーの識別子を含めることで、作成する一時的なデータベースユーザーが必ず個人に紐づくようにして責任追跡性を満たしています。IAM Identity Centerユーザーのみに制限しているのは、個人のアイデンティティとして取り扱えるためです。IAMユーザーやIAMロールは、複数の開発者が共有できる可能性があり、その場合にデータベースユーザーと個人の紐づけが難しくなるので許可していません。

jit-db-accessのなかで呼び出し元のIAMエンティティを検証する必要があるため、APIゲートウェイのIAM認証を経由してjit-db-accessをトリガーすることでIAMエンティティの情報を渡しています。これは利用者が直接Lambda関数をトリガーする方法ではIAMエンティティの情報がjit-db-accessに渡らなかったためです。検証自体はLambda関数のリクエストコンテキストに含まれるリクエスト元IAMエンティティのARNがIAM Identity Centerユーザーの形式になっているかどうかを確認するシンプルな処理です。

ユーザーと権限の管理: ライフサイクル管理を自動化

ジャストインタイム方式なので事前のデータベースユーザー作成は不要です。

作成したデータベースユーザーは認証トークンの有効期限とともに使えなくなるようにしています。認証トークンの発行はリクエスト時に一度しか行われないので、認証トークンの有効期限が過ぎるとそのデータベースユーザーには新規接続ができなくなります。これによって実質的にデータベースユーザーを一時的なものにしています。ただし、そのままだとデータベースユーザーの実体は残ったままになってしまうので、手作業や自動化した仕組みによるクリーンアップは必要です。今回のケースでは、リクエスト元のIAM Identity Centerユーザーに対応するデータベースユーザーが既に存在していたら削除することでデータベースユーザーの実体が残り続けないようにしています。

IAMデータベース認証でアクセスするための権限については、認証トークンを生成するLambda関数(jit-db-access)のサービスロールにrds-db:connectを許可すればよいので、個別のIAMエンティティ側での権限管理は不要です。

まとめ

IAMデータベース認証を利用した開発者向けデータベースアクセスの仕組みとして構築したジャストインタイムデータベースアクセスを紹介しました。

ジャストインタイムデータベースアクセスでは追加のコンポーネントとしてLambda関数をデプロイすることになるので、仕組み自体の運用、障害発生時のフォールバック運用の整備など、また別の考慮事項がでてきます。

今回は責任追跡性・ユーザーと権限の管理という要素に着目して、これらを同時に満たすことが重要だったのでこのアプローチを採用しました。


  1. 責任追跡性とは、情報セキュリティにおける要素のひとつで、システムで発生したイベント(誰が、いつ、何をしたか)を追跡できる性質を指します
  2. 条件によっては他のログとの突き合わせることで特定できる場合があるので「厳密には」としています

『SREの知識地図』の著者を招いてお送りするSREの旅 Road2を開催しました

『SREの知識地図』の著者を招いてお送りするSREの旅 Road2

どうもどうも my-ztです。

先日、『SREの知識地図 - SREの旅 Road2』のオンラインイベントを開催しました。

今回のオンラインイベントでは、SREの知識地図 第2章著者である @chaspy_さんをゲストに お招きし、信頼性の定義(SLI/SLO)についてパネルディスカッションを行いました。

本ブログでは、そのオンラインイベントの一部(ほんの一部)を簡単にご紹介します!!

1. SLOは「判断の指標」である

近藤さんが担当された第2章は、SLA/SLO/SLIといった用語の定義から、エラーバジェットの活用、導入プロセスまでを網羅しています。

イベント冒頭、近藤さんはSLOの重要性について 「信頼性と機能開発のバランスにおけるジレンマを解消する指針」 ということを話していました。

かつてのSREの文脈では「エラーバジェットが尽きたら開発ストップ」という厳格なルールが注目されがちでしたが、現在では「状況に応じた行動を選択するための判断材料」として扱うモダンな考え方が主流になっており、本章にもその思想が反映されています。

2. 現場の「疲弊」から始まったSLO導入

パネルディスカッションでは、近藤さんが実際にSLOを導入した際のエピソードが語られました。導入のきっかけは、局所的なエラー発生時に明確な判断基準がなく、現場が都度対応し疲弊していたことだったそうです。

「どこを目指せばいいかわからない」という不安を取り除くためにSLOが必要だったとも話しており、当時の導入プロセスにおける学びとして、以下のポイントが共有されました。

  • パイロットチームでの成功体験

    • いきなり全体に導入するのではなく、小さなチームで先行導入し、成功事例を作ってから広げたことが有効だった。
  • 認知負荷を下げる:

    • エンジニアが自然にSLOを意識できるよう、「ダッシュボードで見られる」という可視化を徹底し、アクセスのハードルを極限まで下げた。

また、「今、当時に戻れるならどうするか?」という質問に対し、近藤さんが「組織が大きくなると合意形成が難しくなるため、もう少しトップダウンで進めても良かったかもしれない」と振り返っていたのが印象的でした。

3. 運用フェーズとAIの活用

運用が軌道に乗ると、開発チーム内でも「SLO未達=異常」という認識が当たり前になっていき、もしSLOが守れない場合は、「値が厳しすぎるので緩和する」か「原因を調査して改善する」かの二択であり、このサイクルを回すことこそが運用の本質ということも話されていました。

また、話題のAI活用については、「価値判断や合意形成といった本質的な難しさは人間が担うべき」としつつも、以下の領域でAIがサポーターになるとの見解が示されました。

  • CUJ(クリティカルユーザージャーニー)の候補出し
  • SLIの選定サポート
  • レポートの自動生成

などなど『SREの知識地図 - SREの旅 Road2』の一部をご紹介しました。

これから「SLI/SLOを導入したい」「SLI/SLOの見直しタイミングの勘所」など、アーカイブ動画の中でヒントが見つかるかもしれません。

続きはこちらから〜👇

🎥 アーカイブ動画はこちら

📩 次回のイベント通知を受け取りたい方はConnpassでフォローをお願いします〜

終わりに

引き続き、本を読むだけでは伝わらない各章の著者の思いを伝えていきたいと思います。

(👉SREの旅はまだまだ続きますよ〜)

ちなみに・・・次回の『SREの知識地図 - SREの旅 Road3』は2025年12月22日(月) 19:30〜開催します!

📅 イベント詳細・参加申し込みはこちら

次回は、SREの知識地図 第三章を執筆された @ryota_hnk さんをゲストにお招きし、モニタリングやオブザーバビリティについて深掘りしていきます!!!

今年最後の「SREの旅」、年末年始のサービスの信頼性向上のための気づきや学びがあるかもしれませんので是非ご参加ください〜🙏