Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
IAMロールはどこから来て、どこへ行くのか / Where do IAM rolls come...
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Ryotaro Tamura
November 04, 2017
Technology
2.7k
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
IAMロールはどこから来て、どこへ行くのか / Where do IAM rolls come from and where to go?
JAWS FESTA 2017
Ryotaro Tamura
November 04, 2017
More Decks by Ryotaro Tamura
See All by Ryotaro Tamura
BlockNoteとDuckDB-WASMでつくる、ブラウザ内データ分析環境の設計
tokibi
0
150
Prometheus setup with long term storage
tokibi
7
6.1k
nanafshiを使って簡単に作るFUSEの動的ファイル
tokibi
0
620
monotips #3 - fzfる
tokibi
0
180
Other Decks in Technology
See All in Technology
AI 時代の Azure エンジニアリング ~ 私たちは何を磨き、何を任せるのか ~
chack411
1
250
[2026-09-30]ロックンロールは鳴り止まないっ - 信頼性かまってちゃん - 「データ駆動を投げ捨ててまで。」追いかける信頼性改善に向けた取り組みの話
tosite
0
130
The kernel report
ennael
PRO
1
180
営業オントロジーの作り方と、エージェントからの辿り方 ── ナレッジワークの現場から
kworkdev
PRO
1
220
全社共通データ基盤をつくる。ソニーのDatabricks活用とデータガバナンス設計の裏側
sony
0
280
AgentCoreで実践するハーネスエンジニアリング
yakumo
0
130
Snowflake Horizon Catalog と Apache Iceberg で作る オープンなデータ基盤
kitagawaz
0
370
生成AIを使って「人が」考える技術 ― AI時代の人機共想と実践ノウハウ|UNITT AC2026
ishiirikie
0
500
ログラスのマルチプロダクトを 支える認証基盤 〜テナントごとに異なる統制とどう向き合うか〜
dada4386
3
300
Terraformを用いたJamf Pro構成のIaC, GitOps化への挑戦
yukun
0
120
カンファレンスに参加した後の浮遊感とセルフケア
pauli
0
270
TiDBファミリーにDWHが新登場!! TiDB最新情報 / TiDB update 202609
yoshiakiyamasaki
0
180
Featured
See All Featured
Navigating Team Friction
lara
192
16k
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
570
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
203
76k
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
510
Designing for humans not robots
tammielis
254
26k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
3k
Fireside Chat
paigeccino
43
4k
Building Adaptive Systems
keathley
44
3.2k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
510
Claude Code のすすめ
schroneko
67
230k
Music & Morning Musume
bryan
48
7.4k
AI: The stuff that nobody shows you
jnunemaker
PRO
10
1.1k
Transcript
Copyright © 2017. All rights reserved. ハンズラボ株式会社 田村龍太郎 IAMロールはどこから来て どこへ行くのか
JAWS FESTA 2017
1 自己紹介 • 名前:田村 龍太郎 • 所属:ハンズラボ株式会社 • 入社:2017年3月 •
出身地:徳島県 • AWS歴:8ヶ月 • 初登壇で緊張してます
2 まえおき サポーターセッションなのにIAMの話? ハンズラボ関係なくない?
3 まえおき ハンズラボ四国代表として登壇が決まるものの
4 まえおき 15分も喋ることが思いつかなかった
5 まえおき この人→ 会社の取り組みは、弊社CEOが色んな所で喋ってるので
6 まえおき 今日は、社内勉強会こんな感じでやってるよ というご紹介も兼ねて、10分ぐらいのお話をします
7 はじめに AWSを使いはじめてからずっと気になっていたこと
8 はじめに IAMロールが何なのかよくわからない
9 何がわからないのか • ドキュメントを読めば、設定方法や使い方はわかる • 実装レベルで何が起きてるのかわからない • もやもやする → 調べよう!
10 よくあるユースケース EC2 Lambda S3 DynamoDB ロール • EC2のインスタンス等にロールを設定することで、 権限に応じたAWS
リソースを呼び出し可能 • 例: S3のバケットにファイルをアップロード • リソースの利用権限はロールにアタッチされたポリシーによって決まる ポリシー リソースを 呼び出し アタッチ ロール
11 疑問その1 どうやってリソースの利用権限を取得しているのか
12 IAMユーザーの場合 • マネジメントコンソールでアクセスキーを生成 • AWS CLIの場合は aws configure を実行してキー情報を入力
• デフォルトだと ~/.aws/credentials に記録される • IAMユーザーが持つ権限通りにリソースが利用ができる • ではIAMロールは?
13 EC2インスタンスで追ってみた • ロールの設定はEC2インスタンスに対して行う。 • インスタンス内で自身の情報を取ってる方法は? • インスタンスメタデータ (http://169.254.169.254)にリクエスト •
ロールの情報もあるはず! • 設定されているロールを取得できた $ curl http://169.254.169.254/latest/meta-data/iam/security-credentials/ sample-role
14 EC2インスタンスで追ってみた • ロール名を指定してリクエストするとCredentialがJSONで返ってくる • 見覚えのある文字が • 何が行われたのか? $ curl
http://169.254.169.254/latest/meta-data/iam/security-credentials/sample-role { "Code" : "Success", "LastUpdated" : "2017-10-30T06:54:40Z", "Type" : "AWS-HMAC", "AccessKeyId" : "ASIAXXXXXXXXXXXXXXXX", "SecretAccessKey" : "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "Token" : "xxxxx...", "Expiration" : "2017-10-30T13:04:40Z" }
EC2インスタンス EC2サービス STS IAM ① ⑤ ② ④ ③ 15
メタデータの動作イメージ AssumeRole 実行 一時的なCredential メタデータを リクエスト アタッチ メタデータの レスポンス AssumeRolePolicy 確認 IAMポリシー
16 AssumeRoleとは • AWS Security Token Service(STS)に用意されているAPI • 指定したIAMロールの持つ権限を、一時的に引き受ける(Assume)機能 •
AssumeRoleという動作の主体になるのは権限を必要とする側 • 今回の例では、EC2がSTSに「オレにそのロールの権限使わせてよ」 と伝える感じ ① 権限ください ③ あげる ② Credential生成
17 AssumeRoleとは • 権限を要求する主体は、ロールと同じAWSアカウント内に限定されない • 別のAWSアカウントにいるIAMユーザー • Amazon, Facebook, Google,
Cognito で認証されたユーザー • 任意のOpenID ConnectおよびSAMLのIDプロバイダで認証されたユーザー ① 認証 ⑥ あげる ⑤ Credential生成 ② トークン取得 ③ ください(トークン付) ④ 検証
18 AssumeRoleとは • STSが誰にでもホイホイ権限を渡してしまうとセキュリティに問題がある • 渡しても良い相手(Trusted entity)をIAMロールで事前に設定しておく • これがAssumeRolePolicyになる(IAMポリシーとは別に存在) ください
ください AssumeRolePolicy IAMポリシー Trusted entity確認
19 AssumeRolePolicyの設定画面
20 回答その1 どうやってリソースの利用権限を取得しているのか STSのAssumeRoleを通して 一時的なCredentialを取得している
21 余談 • わざわざメタデータにリクエスト送らなくても、インスタンス内のCLIで 直接AssumeRoleを実行すればいいのでは? $ aws sts assume-role --role-arn
arn:aws:iam::111122223333:role/sample-role --role-session-name "hogehoge" • できない (aws configureなどを行っていない状態) • ロールのAssumeRolePolicyでは • 特定のEC2インスタンスを信頼しているのではない • EC2サービス(マネージドな部分)を信頼している • インスタンスにロールを設定するということは • AssumeRoleを行う権限を与えているのではない • メタデータの該当ロールのURIへリクエストを送る権限を与えている • EC2サービス(メタデータ)を経由する必要がある
22 疑問その2 Credentialが取得できるのはわかったけど これどうするの?
23 回答? CLIとかSDKがうまいこと使ってくれます
24 もうちょっと詳しく • AWSの各サービスにはリソースにアクセスするためのAPIと、リクエ ストを送るエンドポイントが用意されている • CLIやSDKでも、内部ではエンドポイントへのHTTPリクエストが行わ れている • 下の画像はIAMのユーザー一覧を取得するリクエスト
引用元: https://docs.aws.amazon.com/ja_jp/general/latest/gr/sigv4_signing.html
引用元: https://docs.aws.amazon.com/ja_jp/general/latest/gr/sigv4_signing.html 25 もうちょっと詳しく ここ重要 • AWSの各サービスにはリソースにアクセスするためのAPIと、リクエ ストを送るエンドポイントが用意されている • CLIやSDKでも、内部ではエンドポイントへのHTTPリクエストが行わ
れている • 下の画像はIAMのユーザー一覧を取得するリクエスト
26 Authorizationヘッダの全体 はみ出てる部分を項目ごとに改行すると大きく4つに分かれる AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/iam/aws4_request, SignedHeaders=content-type;host;x-amz-date, Signature=5d672d79c15b13162d9279b0855cfba6789a8edb4c82c400e06b59 24a6f2b5d7 • アクセスキーID:Credentialの項目に含まれる(AKI〜)
• シークレットアクセスキー:Signatureのハッシュ値計算に使用される
27 回答その2 Credentialが取れるのはわかったけど これどうするの? Credentialを使用して、(CLIとかSDKが) APIへのリクエストにAuthorizationヘッダを付与している
28 余談: Authorizationヘッダの各項目 • AWS4-HMAC-SHA256 • 署名に使用したアルゴリズム • 2017/11/04時点で推奨される署名バージョン4では HMAC-SHA256
• Credential (AKIDEXAMPLE/20150830/us-east-1/iam/aws4_request) • アクセスキーID • タイムスタンプ (yyyymmdd) • 対象リージョン • 対象サービス名 • 固定文字列 (aws4_request) • SignedHeaders (content-type;host;x-amz-date) • 署名されたHTTPリクエストのヘッダ一覧(Authorizationヘッダは除く) • 「署名された」というのは後述のSignature内に含まれるという意味
29 余談: Authorizationヘッダの各項目 • Signature (5d672d79c15b13162d9279b0855cfba6789a8edb4c82c400e06b5924a6f2b5d7) • シークレットアクセスキー • タイムスタンプ
• 固定文字列 (AWS-HMAC-SHA256) • CredentialString (AKIDEXAMPLE/20150830/us-east-1/iam/aws4_request) • HTTPリクエストの中身 (CanonicalStringと呼ぶらしい) • メソッド • URI • クエリ文字列 • 元のHTTPリクエストに含まれる全ヘッダ名 (content-type;host;x-amz-date) • BodyのSHA256ハッシュ値 • 以上の文字列をHMAC-SHA256で複数回計算してハッシュ値にしている • 詳細な実装を追いたい場合は、SDKなどを参考にしてください • GolangのSDKだとこの辺に書いてます • https://github.com/aws/aws-sdk-go/blob/master/aws/signer/v4/v4.go
30 さいごに IAMロールはどこから来て、どこへ行くのか AssumeRoleによるCredential取得から来て、 AuthorizationヘッダとしてAPIエンドポイントに行く
Thank you!