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
OpsJAWS#13 IAMベストプラクティス
Search
Tmorinaga
May 21, 2018
Technology
4.1k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
OpsJAWS#13 IAMベストプラクティス
#jawsug #opsjaws
Tmorinaga
May 21, 2018
More Decks by Tmorinaga
See All by Tmorinaga
Developers.IO 2017 E3
tmorinaga
0
1.4k
JAWS DAYS 2017 Security-JAWS発表資料
tmorinaga
2
4.9k
AWS WAFのログが3時間しか見れないのでなんとかしてみる
tmorinaga
3
4.4k
re:Growth 2016 in Tokyo
tmorinaga
0
2.3k
Developers.IO 2016 in Fukuoka
tmorinaga
1
940
【エンジニア編】AWS活用を考えているなら”必ず!"知っておくべきセキュリティの話
tmorinaga
1
4.6k
【ビジネス編】AWS活用を考えているなら”必ず!"知っておくべきセキュリティの話
tmorinaga
1
2.5k
OpsJAWS#4 CloudWatch Events Hands-on
tmorinaga
3
1.9k
Other Decks in Technology
See All in Technology
200個のGitHubリポジトリを横断調査したかった
icck
0
130
2026 TECHFRESH 畢業分享會 - AI-Native 重塑軟體工程與虛擬講師
line_developers_tw
PRO
0
1.2k
2026TECHFRESH畢業分享會 - Lightning Talk - E起 See See : 電商推薦讀心術? 數據說了算
line_developers_tw
PRO
0
1.2k
攻撃者視点で考えるDetection Engineering
cryptopeg
3
2k
手塩にかけりゃいいってもんじゃない
ming_ayami
0
600
Lightning近況報告
kozy4324
0
160
プロダクト開発から業務改善コンサルまで。事業全体へ「染み出す」ことで広がるエンジニアの可能性
ham0215
0
140
【2026年版】 ベクトル検索とEmbedding最前線
mocobeta
13
3.7k
いまさら聞けない「仕様駆動開発入門」 〜AI活用時代の開発プロセスを考える〜
findy_eventslides
2
160
【セミナー資料】Claude Code をセキュアに使うための考え方と設定の勘どころ / Claude Code Webinar 20260616
masahirokawahara
2
410
現地で盛り上がった WWDC26 Keynote
zozotech
PRO
1
260
Oracle AI Database@Google Cloud:サービス概要のご紹介
oracle4engineer
PRO
6
1.5k
Featured
See All Featured
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
200
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
430
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
55k
Accessibility Awareness
sabderemane
1
140
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.5k
From π to Pie charts
rasagy
0
210
Believing is Seeing
oripsolob
1
150
Measuring & Analyzing Core Web Vitals
bluesmoon
9
870
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
300
Scaling GitHub
holman
464
140k
Bash Introduction
62gerente
615
220k
First, design no harm
axbom
PRO
2
1.2k
Transcript
IAMの運用 ベストプラクティス OpsJAWS #15 クラスメソッド株式会社 AWS事業部 森永 大志
森永 大志(もりなが たいし) • AWS事業部 ソリューションアーキテクト • 地味で大事なサービスがすき(だいたい緑のやつ) • 二人の娘のために生きてます
自己紹介
IAM運用どうしてます?
まずはAWS公式のベストプラク ティスを見てみる
AWS公式ベストプラクティス 1. AWS アカウントのルートユーザーのアクセスキーをロックする 2. 個々の IAM ユーザーの作成 3. IAM
ユーザーへのアクセス権限を割り当てるためにグループを使用する 4. AWS 定義のポリシーを使用して可能な限りアクセス権限を割り当てる 5. 最小権限を付与する 6. アクセスレベルを使用して、IAM 権限を確認する 7. ユーザーの強力なパスワードポリシーを設定 8. 特権ユーザーに対して MFA を有効化する 9. Amazon EC2 インスタンスで実行するアプリケーションに対し、ロールを使用する 10. 認証情報を共有するのではなく、ロールを使って委託する 11. 認証情報を定期的にローテーションする 12. 不要な認証情報を削除する 13. 追加セキュリティに対するポリシー条件を使用する 14. AWS アカウントのアクティビティの監視 https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/best-practices.html
1.AWS アカウントのルートユーザーの アクセスキーをロックする • ルートユーザのアクセスキーは作らない/削除する ◦ ルートユーザーは制限することが出来ない ◦ IAMユーザ/ロールで出来ないことがほぼない ◦
アクセスキーは原則使うべきではない ⇒ 必ず実施すべき 後述するMFAの登録も忘れずに行う
(参考)ルートユーザでしか出来ないこと • アカウント関連の作業(支払い、解約など) • 逆引き設定の申請 • EC2からのメール送信制限の解除申請 • Route53で登録したドメインを別AWSアカウントに移管 •
侵入テスト申請など https://docs.aws.amazon.com/ja_jp/general/latest/gr/aws_tasks-that-require-root.html
2.個々の IAM ユーザーの作成 • 複数人で一つのIAMユーザを使わない ◦ 認可の設定が出来なくなる ◦ CloudTrailであとから追えない ⇒
必ず実施すべき 特例としてチーム内で参照権限だけならアリ?
3.IAM ユーザーへのアクセス権限を 割り当てるためにグループを使用する • ユーザに直接ではなくグループに割り当てる ◦ ユーザに割り当てると同じ権限ユーザ作成が面倒 ◦ ポリシーでも権限をまとめられる ⇒
なるべくやったほうが良い ポリシーで同様の事が出来るのでそちらでやるのも手
4.AWS 定義のポリシーを使用して可能な限り アクセス権限を割り当てる • なるべくAWSの管理ポリシーを使う ◦ 新しいサービス追加に自動で追随 ◦ 関連するAPIコールも追加してくれる ◦
要らない権限までつく ⇒ 判断は後ほど
5.最小権限を付与する • ユーザ/ロールが使う最小限の権限のみ与える ◦ やってはいけない操作を防ぐ ◦ 関係ないリソース操作を防ぐ ◦ 運用が死ぬほど大変 ◦
4番の項目と相反してる ⇒ 判断は後ほど
6.アクセスレベルを使用してIAM 権限を確認する • アクセスレベル(フル、制限など)を確認する ◦ どこまで出来るか概要を確認できる ⇒ 権限管理には使えるので使う どこまで権限管理するかは後ほど
7.ユーザーの強力なパスワードポリシーを設定 • ユーザのパスワードポリシーを強化する ◦ 簡単なパスワードはすぐに突破される ◦ 文字数、大文字、小文字、数字、記号の要件 ◦ 定期的な更新は議論の余地あり ⇒
必ず実施すべき ただし、ポリシーの内容については要検討
8.特権ユーザーに対して MFA を有効化する • 強い権限を持つユーザーにMFAをつける ◦ パスワードは脆弱 ◦ What you
knowとWhat you haveの併用 ⇒ 必ず実施すべき 特権ユーザーに限らずなるべく実施した方が良い
9.Amazon EC2 インスタンスで実行する アプリケーションに対し、ロールを使用する • IAMユーザのアクセスキーではなくIAMロールを使う ◦ アクセスキーは管理が面倒 ◦ IAMロールは一時的なアクセスキーを発行
▪ つまり漏れてもすぐに使えなくなる ⇒ 必ず実施すべき アクセスキーは最後の手段!使わない方法を考える!
10.認証情報を共有するのではなく ロールを使って委託する • IAMユーザを作るのではなくIAMロールでスイッチする ◦ パスワードは脆弱 ◦ 1つのアカウントから別アカウントへスイッチ可能 ◦ IAMロールで権限管理も出来る
⇒ 必ず実施すべき 複数アカウントで認証情報管理は人類に向かない 1アカウントにIAMユーザー(MFA付き)でスイッチ AD連携などでフェデレーションするのもあり
11.認証情報を定期的にローテーションする • パスワード、アクセスキーを定期的に変更 ◦ パスワードの定期変更は議論の余地あり ◦ アクセスキーは影響範囲が分かりづらい ⇒ 出来ればやりたい アクセスキーを基本的に使わないようにする
影響範囲が狭くなるため、運用しやすくなる
12.不要な認証情報を削除する • 使ってないパスワード/アクセスキーを削除する ◦ アプリでしか使わないユーザはパスワード不要 ◦ コンソールしか使わないユーザはアクセスキー不要 ⇒ なるべくやったほうが良い 頻繁には難しければ、定期的に棚卸しする
そもそもアクセスキーは発行せずIAMロールで コンソールアクセスもIAMロールで
13.追加セキュリティに対する ポリシー条件を使用する • IAMポリシーを細く設定する ◦ API呼び出し元IPアドレスや時間指定が可能 ◦ 管理が死ぬほど面倒 ⇒ 判断は後ほど
14.AWS アカウントのアクティビティの監視 • アクセスログ、監査ログをとる ◦ CloudTrailでAPI呼び出しログ ◦ Configでリソースの変更ログ ◦ CloudFront/ELB/S3などでアクセスログ
⇒ 必ず実施すべき 少しコストが掛かるが誤差レベル Configは変更毎に課金されるので要調整
ひとまずの個人的まとめ • ルートユーザは通常運用では使ってはならない • IAMユーザはなるべく使わないでIAMロールにする • アクセスキーは最終手段なのでIAMロールで実現 • ログはちゃんと取る •
MFAは基本的に有効化する(仮想でもいい) • とはいえパスワードはなるべく強力に • IAMロール使うとだいたい解決
残った課題
AWS公式ベストプラクティス 1. AWS アカウントのルートユーザーのアクセスキーをロックする 2. 個々の IAM ユーザーの作成 3. IAM
ユーザーへのアクセス権限を割り当てるためにグループを使用する 4. AWS 定義のポリシーを使用して可能な限りアクセス権限を割り当てる 5. 最小権限を付与する 6. アクセスレベルを使用して、IAM 権限を確認する 7. ユーザーの強力なパスワードポリシーを設定 8. 特権ユーザーに対して MFA を有効化する 9. Amazon EC2 インスタンスで実行するアプリケーションに対し、ロールを使用する 10. 認証情報を共有するのではなく、ロールを使って委託する 11. 認証情報を定期的にローテーションする 12. 不要な認証情報を削除する 13. 追加セキュリティに対するポリシー条件を使用する 14. AWS アカウントのアクティビティの監視 https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/best-practices.html
IAMの権限をどうするか
最小権限にした時のよくあるシナリオ 運用者: このIAMユーザを使ってください! 開発者: 了解でーす
最小権限にした時のよくあるシナリオ 運用者: 権限付与します!! 開発者: ◯◯しようとすると 権限不足なんですが…
最小権限にした時のよくあるシナリオ 運用者: 権限付与します!!!! 開発者: まだ、XXの権限が足りないとでます…
最小権限にした時のよくあるシナリオ 運用者: 権限付与します!!!!!! 開発者: 今度は△△しようとすると権限不足…
最小権限にした時のよくあるシナリオ 運用者: つらい 開発者: またダメだ!!!!!! やってられるか!!!!!!
問題点 • AWSは一つの操作でも複数のAPIを呼ぶことがある ◦ 完璧な最小権限は難しい(というか無理?) • 何かやるたびに問い合わせが必要だと開発者のモチベーショ ンはだだ下がり • 問い合わせが増えるとIAMの運用者はつらい
やれる体制があるならやるべき
• ほぼ専門チームを作ってIAMの棚卸し実施 • 見直しだけで1週間かかる • 数が増えたら… (参考)リクルートテクノロジーズさん運用事例 https://www.slideshare.net/recruitcojp/20160517-security-jaws-miyazakisachie
やれる体制がない場合どうする
レベル1
PowerUser権限を渡して一部Deny • 基本的に全てのサービス/リソースを触れる • 触らせたくないサービス/リソースだけDeny • メリット ◦ 運用はほぼなし ◦
権限不足で悩まなくていい • デメリット ◦ セキュリティ的にイケてない?
(Tips)PowerUserはIAMロールを付与できない • PowerUser権限は”iam:*”以外を許可している • リソースへのIAMロール付与ができない • “iam:PassRole”の権限を付ければいけます { "Version": "2012-10-17",
"Statement": [ { "Effect": "Allow", "Action": [ "iam:Get*", "iam:List*", "iam:PassRole" ], "Resource": "*" } ] }
レベル2
使うサービスの権限だけAWS管理ポリシーを渡す • EC2FullAccessなどの管理ポリシーを使う • 使う可能性のあるポリシーだけを割り当てる • メリット ◦ 運用は比較的楽 •
デメリット ◦ 別のサービスを見にいくサービスがある(特に参照) ◦ 許可したサービスについてはなんでもできちゃう
レベル3
職務機能別のAWS管理ポリシーをつかう • データベース管理者、システム管理者など職務別にポリシー が存在している • 足りない部分は適宜付け足す • メリット ◦ 職務に必要そうな権限は付与されるのでそこは楽
• デメリット ◦ 足りない権限が多分にあるので結局運用は必要
どれを選択するかは 組織体制や仕組みづくり次第 どれかが正解というわけではないです
IAMの権限をガッチガチにするより • 問題発生時に対応できる仕組み作りが重要では? ◦ CloudTrailでログ分析 ◦ Configで変更監視 ◦ Config Rulesで設定値を監視
• 外部から不正利用されないようにベスプラを守る ◦ 内部犯行はほぼ防げない • そもそも組織が違うならアカウント自体を変える • 不要なユーザは消す
(参考)認証情報レポートが棚卸しに便利 • アカウント内の全てのユーザとユーザの認証に関する情報が 一覧にまとめられたレポート • パスワード/アクセスキーが使用されていない、MFAが有効 化されていない、などを見れる • CSVファイルなので分析に回すのも簡単 https://dev.classmethod.jp/cloud/iam-report/
まとめ • IAMの権限管理は自分の組織に合わせて方針を決める • 無理して厳しくしすぎずに即座に対応できる仕組みを • 運用者も開発者も疲弊しないように最善を探る • 自動チェックなどはどんどんやるべき ◦
自動修正は諸刃の剣なので人力は必要…