話題の記事

【書評】IAMの管理・運用に関わる人なら必読!「AWS IAMのマニアックな話」レビュー

2019.12.24

オペレーション部 江口です。

少し前の話になってしまいましたが、2019年9月に開かれた技術書典7で、「AWS IAMのマニアックな話」という書籍が頒布されました。私も参加して購入、読んでとても良い本だなあ、と思ったのですが、当ブログに書評は投稿していませんでした。

ところが最近、作者の佐々木拓郎氏のTwitterでこんなフリが。

これには答えざるを得ない。

ということで、この書籍を購入したクラメソ社員として不肖私がレビューさせていただきます。

最初に端的に感想を書いておくと、IAMについて知りたい技術者にとってはまさに必読と言えるでしょう。「マニアックな話」というタイトルなので初心者の方には敷居が高いと感じられるかもしれませんが、IAMとは何か、というところから非常に丁寧に書かれています。「IAMがよくわからない」という方にこそ読んでもらいたい本ですし、またすでにIAMの管理を行っていて、その適切な運用について悩んでいる方にとっても非常に参考にする本だと思います。

なおこの書籍は、現在もBoothで電子書籍版の購入が可能です。気になった方はぜひ購入してみてください。

【ダウンロード版】AWSの薄い本 IAMのマニアックな話

書籍の概要

書籍の概要については、表紙に記載されている紹介文がよくまとまっているのでそのまま引用します。

商業誌でベストセラーになったAWS本の著者が、商業誌では出せなかった1機能に徹底的にこだわって書いた本です。AWSの認証認可の機能であるIdentity and Access Management(IAM)の機能・デザインパターン・運用まで秘伝のタレを全公開します。

目次

  • はじめに
  • 第1章 AWS と IAM
  • 第2章 IAM の機能
  • 第3章 IAM チュートリアル
  • 第4章 IAM ポリシーのデザインパターン
  • 第5章 IAM グループのデザインパターン
  • 第6章 IAM とセキュリティ
  • 第7章 IAM の運用
  • 第8章 IAMとCloudFormation
  • 第9章 IAMのテンプレート集
  • 第10章 IAM以外のAWS サービスの活用
  • 付録 A アカウント開設時の設定チェックリスト

内容の紹介

第1章では、まずIAMとは何か、という点を認証・認可の説明も交えて簡潔に紹介しています。IAMユーザーが認証の、IAMポリシーが認可の機能を担当する、というのが押さえておきたいポイントでしょう。

またAWSアカウント(=ルートユーザー)とIAMユーザの違い、といった初心者の方が混乱しやすい点についても触れられています。初心者の方は、ここで説明されているルートユーザーの利用は極力避け、通常の利用時はIAMユーザを利用するという鉄則をぜひ覚えていただきたいところです。実際最初にサインアップする時を除けばルートユーザーで作業しなければいけないケースはあまり無く、漏えい時のインパクトが非常に大きいので、ふだんからルートユーザーを利用するのはデメリットの方が大きいと言えます。

手前味噌な話ですが、当社のAWSマネージドサービスである「クラスメソッドメンバーズ」にご契約いただいたお客様に対しては、ルートユーザーのアカウントは二段階認証を有効にした上で当社でお預かりする形を取ります(別途管理者権限を持ったIAMユーザを発行してお渡しします)。これにより「ふだんルートユーザを使わない」というプラクティスを実現するとともに、お客様側でルートユーザ情報を管理する手間を削減しているわけです。

第2章では、 IAMの機能としてIAMユーザー/グループ/ポリシー/ロール、それにパーミッションバウンダリについて解説されています。どの機能も非常に重要ですので押さえておきたいところです。ログインに利用するIAMユーザーや認可のポリシーを設定するIAMポリシーが重要なのはもちろんですが、初心者の方にはとくに「IAMロール」について知っていただきたいなと思います。AWSサービスに権限を割り当てる機能で、その重要性は本書でもたびたび説明されていますが、IAMロールをうまく使いこなせるかどうかはAWS環境のセキュリティに大きく影響します。

第3章はチュートリアルで、実際の画面を紹介しつつ、それぞれの機能の設定方法を解説しています。 この中では、とくにクロスアカウントロールの作成が重要だなと思いました。これは別のAWSアカウント(自分のアカウントでも可)から、そのアカウントの設定したIAMロールの権限にスイッチする(スイッチロールといいます)機能です。この機能を利用することで、外部のAWSアカウントのユーザからのログインを、指定した権限で受け入れることができるようになります。

「外部のアカウントとの連携なんか必要ない」と思われるかもしれませんが、単一のアカウントでもいわゆるsudoのように利用できますし(普段は権限の制限されたユーザーでログインし、高い権限が必要な場合だけスイッチロールする)、自社の環境で本番環境と検証環境でアカウントを分ける場合などにも有用です。ユーザーがログインするための踏み台用のAWS環境にまずログインして、そこから本番環境や検証環境にスイッチロールする、といった形を取ると、各環境に直接ログイン可能なIAMユーザーを最低限に抑えられ、より安全な運用が実現できます。これは本書でも、第7章(IAMの運用)でマルチアカウントでの運用時のプラクティスとして紹介されています。

当社でもこの機能を活用しています。たとえば当社のエンジニアはそれぞれ検証用AWSアカウントをそれぞれ割り当てられていますが、AWSコンソールで検証用AWSアカウントに入るには、まず基幹AWSアカウントと呼ばれる環境にログインし、その後スイッチロールする必要があります。このため、各環境へどこからどれくらいログインを行ったかなどの情報を、基幹AWSアカウント側のCloudTrailログを確認することで把握できたりします。

と、余談はここまでにして書籍の紹介に戻りますが、ここまでの章はどちらかというと初心者の方へのIAMの紹介、という意味合いが大きいものでした。4章以降は、いよいよ実際の運用に役立つ情報が紹介されていきます。

第4章は、IAMポリシーをどう設計すれば良いのか、というデザインパターンについて書かれています。許可する権限のみ付与する「ホワイトリスト・パターン」、逆に許可しない権限を剥奪する「ブラックリスト・パターン」、両者を組み合わせる「ハイブリッド・パターン」です。ホワイトリスト・パターンは許可する権限を明示的に指定するため、設計の難易度が高い(事前に許可すべき権限がわかっていないと定義できない)もののセキュアといえ、ブラックリスト・パターンは設計が比較的楽なものの新しいポリシーが増えた場合にデフォルトでは許可されてしまうためセキュリティ的には若干難があります。このため本書では、本番環境ではホワイトリスト・パターンの利用を推奨しています。

ちなみに当社の環境を再び引き合いに出すと、先ほどお話した当社の基幹AWSアカウントではやはりこのホワイトリスト・パターンでポリシーを定義しています。

こうした設計のデザインパターンを知っておくと、設計のときにも「どのパターンを採用するか」というところから検討が始められ、議論もしやすいと思います。実際に設計をする方には非常にうれしい情報なのではないでしょうか。

第5章はIAMグループのデザインパターンについての解説です。IAMのベストプラクティスでは、IAMポリシーはユーザに直接割り当てず、IAMグループに割り当ててユーザを適切なグループに所属させることが推奨されています。その場合に、グループをどう設計すれば良いかというパターンです。以下の2つが紹介されています。

  • 複数グループに所属:共通で利用するポリシーを定義した一般ユーザ向けのグループと、開発者向けなど用途に応じて追加の権限を設定したグループを複数用意し、1つのユーザを複数グループに所属させるパターン
  • グループ内に複数ポリシー:あるユーザーに必要な複数のポリシーを、1つのグループにまとめて定義してグループとユーザーを1対1で対応させるパターン

これらは優劣はない、ということで「好みの問題」と本書では書いています。ちなみに当社の環境ではどうか?というと、基幹AWSアカウントでは「複数グループに所属」のパターンを採用しています。

第6章は「IAMとセキュリティ」ということで、IAMのベストプラクティス、およびそれ以外にもセキュリティ確保のため気をつけるべき事項が紹介されます。紹介されている中では、

  • ルートユーザーは使わない
  • インターネット公開の権限に気を付ける
  • アクセスキーは原則使わずIAMロールを利用する

という点がとくに重要かなと思いました。

また、2019年7月に起きたCapital OneのAWS環境での情報漏えい事件を取り上げ(参考)、どうして漏えいしたのか、どう設定すれば防げるのか、を解説している点も非常に有用です。この流出の一次的な原因はWAFの設定ミスにより保護対象だったEC2のIAMロールの認証情報が漏えいしてしまったことですが、深刻な被害をもたらしたのはこの漏えいしたIAMロールが不必要に大きな権限を持っており大量のS3バケットにアクセスできてしまったことが原因です。そのため、IAMロールの権限をできる限り小さくすること、S3バケットについてもバケットポリシーを適切に設定すること、が対策になります。実例を交えることで、実際の環境にどう適用するかのイメージもしやすいのではないかと思います。

余談ですが、IAMセキュリティのチェックというところでは、この本が出た後に[IAM Access Analyzer](https://aws.amazon.com/jp/iam/features/analyze-access/]がリリースされました。意図したどおりのアクセスのみを提供しているかを継続的にチェックできるので、今であればこの機能の有効化もぜひともしていただきたいところです。IAM Access Analyzerの詳細については下記の当社ブログなどをご参照ください。

re:Invent 2019 IAM Access Analyzerについて調べてみた #reinvent

第7章はIAMの運用について書かれています。IAMユーザの定期的な棚卸しやMFAの未利用時の権限の制限、CLIでのスイッチロール、マルチアカウント時の運用方法などが紹介されています。マルチアカウントの運用方法については、3章の解説ですでに述べたように、踏み台環境から各環境へスイッチロールするというプラクティスの紹介です。 どれもIAMの運用では重要で、当社基幹AWS環境でも実施しているものばかりです。当ブログ(developers.io)でもこれらのIAM運用の方法についての記事がありますので、いくつか紹介しておきます。

IAMユーザーのMFA(多要素認証)は有効になっていますか?現状を確認→是正→適切な状態を維持するまでの流れを整理してみた

IAMユーザを棚卸して安全なAWSアカウント管理を!

複数AWSアカウントのユーザ管理を、ログイン用AWS環境に集約してみた

【小ネタ】AWS CLIでスイッチロールして作業を行うための設定をやってみた

第8章はIAMをCloudFormation(CFn)を利用して運用についての記載です。ここでは実際のCFnのコードを紹介しているわけでは無く、あくまでプラクティスの説明である点にご留意ください。「IAMユーザはCFnのライフサイクルの対象にしない方が良い(作れば終わりのため)」ということ、IAMポリシー、グループ、ロールの管理用CFnは分割もできるが1つのCFnでも管理可能であること、またよくハマるポイントとしてIP制限に関する注意などが述べられています。

第9章では、具体的なIAMの構成(IMAグループ、ロール、ポリシーなど)を定義したCFnテンプレートが紹介されています。たとえば管理者グループやネットワーク管理者グループ、開発者グループといった形でグループごとのテンプレートが用意されています。これは非常に嬉しいですね!実際の運用にとって非常に参考になるのではないでしょうか。なおこの章で紹介されるCFnテンプレートは用意されたURLからダウンロードでき、そのURLとQRコードが記載されているわけですが、さすがにこのURLの紹介はここでは控えておきます。気になる方はBoothで電子版を購入しましょう!

第10章はIAMと併用するサービスとして、AWS Organizations、CloudTrail、Config、GuardDuty、Control Tower、Security Hubなどが紹介されています。CloudTrailの有効化やConfigの活用はコンプライアンスの維持のためにも必要ですし、GuardDuty、またこの本の出た後にリリースされたCloudTrail Insightsは機械学習を用いて異常なアクティビティを検出してくれますので、これらも積極的に利用いただきたいところです。

終わりに

以上、当社での事例なども交えながら本の内容を簡単に紹介させていただきました。

IAMの適切な運用は、AWS環境のセキュリティに非常に大きく関わります。その運用のノウハウが、この1冊に凝縮されています。IAMの設計をどうするべきか、運用をどうするべきか、悩んだ際にはこの本が良い道標になってくれるでしょう。最初に書いたように、IAMについて知りたい技術者であればぜひ読むことをおすすめします。

以上、「AWS IAMのマニアックな話」のレビューでした。