Header image

クラッソーネの開発者がエンジニアリングに関することもそうでないことも綴っています!

シンプルかつセキュアなIAMの運用へ移行した話

シンプルかつセキュアなIAMの運用へ移行した話

こんにちは!最近、ランニングを始めた、SREチームの宮原(@TakashiMiyahara)です🙋

クラッソーネのIAM周りを整理し シンプルかつセキュア な設計に変更しましたので、こちらをご紹介したいと思います。

はじめに

以前は環境ごとに開発者用のIAM Userが用意し、それぞれのIAM Userでサインインしていました。
また、それぞれのIAM Userに強い権限が付与されていました。

課題

前述の構成には、以下のような課題があると考えました🙋

  • IAM Userの数が多く、管理・運用が煩雑になりやすい
  • IAM Userの権限が強力であり、秘匿情報が漏洩した場合のリスクが大きい
  • 利用者毎にアクセス境界・権限管理が存在せず、意図せず事故が発生するリスクが大きい

上記の課題を解決するために、今回実施した変更内容は、主に以下の3点になります。

  • サインイン・アカウントの切り替えを簡単にする
  • 必要な人に、必要なだけの権限を付与する
  • IAM Userの数を必要最低限にする

進め方

IAM周りに大きな変更を入れるため、SREチーム内で設計するだけではなく、AWSのサポート・SAの方に設計や移行手順をレビューしていただき、安全に移行できるように進めました🙋

  1. SREチーム内でゴールとなるIAM構成と移行手順を設計
  2. AWSのサポート・SAの方に設計と移行手順をレビュー
  3. レビュー結果を設計と移行手順にフィードバック
  4. 移行手順に準じて、移行を実施

スイッチロールの導入

まず、スイッチロールを利用して、必要な環境の必要な権限を委任できるようにしました🙋
今回は、読み取り専用・開発用・管理用の権限用のIAM Roleを新規作成しました。

ロールの切り替え から利用したいロールへ変更できるようになります。

この時に、表示名・色については、各自が自由に設定できます。
僕の場合は、以下のように表示名と色を分けています。

また、開発環境へサインインした後で、本番環境の必要な権限へスイッチロールも行えるようにしました。
これにより、環境を切り替えるために一度サインアウトする必要なくなり、開発者体験が向上します🤩

この状態では、誰でも強い権限を利用できてしまうため、権限管理の観点からは好ましくはありません。

必要な人に、必要なだけの権限を付与する

前述の通り、誰でも強い権限を利用できてしまうため、意図しない破壊的な操作が発生するリスクがあります。

クラッソーネでは、役割に応じてスイッチロールで利用できる権限を、以下のように割り当てました🙋

役割 権限
SRE 管理者権限、開発者権限、読み取り専用権限
開発チーム リーダー 管理者権限、開発者権限、読み取り専用権限
開発チーム メンバー 開発者権限、読み取り専用権限
経理担当者 読み取り専用権限

下記のように、必要な人に必要なだけの権限を付与し、AWSの操作を行えるようにしました。

IAM UserのID/PWやMFAを利用して、AWSへサインインしますが、このIAM Userも減らせそうですね。
別のIDプロバイダーの情報を利用して、AWSへサインインできるようになれば、IAM Userの管理コストも減らせそうです。

シングルサインオンを導入し、IAM Userの数を必要最低限にする

クラッソーネでは正社員のクルーは、Google Workspacesのアカウントを所持しています。
こちらのアカウントを利用して、AWSへシングルサインオンできるようにしてみました🙋

Google Workspacesアカウントを持っているクルーは、Google アプリ 一覧から Amazon Web Service を選択し、クラッソーネのAWSアカウントへSSOできるようになります。

SSOできる方のIAM Userは不要になるため、IAM Userの整理を行いました。
また、SSOした時点・IAM Userにサインインした時点では、読み取り専用の権限に限定しています。
これにより、不用意にIAM Userの秘匿情報が漏洩するリスク、漏洩しても即座に破壊的な変更を実行させにくい体制に変更できました🙌

結果

今回の取り組みで、以下の点を実施できました。

  • IAM Userの数を、必要最低限にできた
  • 役割に応じて、必要な権限を割り当てることができた
  • AWSへのサインインや権限の変更を簡単に行えるようにした

IAMの運用や構成は、事業のフェーズや開発組織の規模によって、ベストプラクティスは変わっていくると考えています。
今回は、将来の事業や組織の拡大を見据えつつ、セキュリティ強化も兼ねて実施しました。

さらに発展、改善する余地は、まだまだあると考えていますので、他社さんとも積極的に情報交換したいと思っています✨

おわりに

クラッソーネでは、プロダクトとチームの双方をより良く改善していけるエンジニアを募集中です!

https://www.crassone.co.jp/recruit/engineer/


RubyやTerraformが好きで、メンバーが楽になる仕組みを考えるのが好きなエンジニア