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
IAM Role for Pods and Instance Meta Data Service
Search
@ジュジュ
January 23, 2020
Technology
1.7k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
IAM Role for Pods and Instance Meta Data Service
@ジュジュ
January 23, 2020
More Decks by @ジュジュ
See All by @ジュジュ
チーム分割においていかれたアラートをチームで責任を持てる形に再設計した
juju62q
0
210
ボトムアップでSLOを導入 2年半運用して分かった失敗と変化
juju62q
2
1.2k
Firecracker Snapshottingを調べてみた
juju62q
1
650
SLOを活用した技術的改善
juju62q
10
15k
telepresence handson
juju62q
2
5.4k
Wanna Use Vitess in Orientation
juju62q
6
1.4k
machine learning with rancher and K8s on prem
juju62q
5
490
docker-handson-for-researcher
juju62q
3
360
Getting Started to CRIU
juju62q
0
160
Other Decks in Technology
See All in Technology
伝票作成AIエージェントを支える、LLMOpsとインフラの選択肢 / AICon2026_takeda
rakus_dev
0
270
AIコード生成×サプライチェーン攻撃 — PHPが直面する“二重の信頼問題
shinyasaita
0
460
JAWS_ICEBERG_BASECAMP
iqbocchi
2
110
Multicaで30個のミニプロジェクトをAIエージェント運用して見えてきたこと
eiei114
1
640
“それは自分の仕事じゃない"を越えて行け
yuukiyo
1
520
AmplifyHostingConstructからSSRフレームワークのためのホスティング設計を考察する/amplify-hosting-construct
fossamagna
1
310
「守りたい体験」を渡すだけで E2E を生成させられるようになった話
hinac0
2
1k
AI時代におけるテストの基礎の再定義 / Rethinking the Fundamentals of Testing in the AI Era
mineo_matsuya
14
4.8k
文字起こし基盤の信頼性
abnoumaru
0
120
AI x 開発生産性を取り巻く予算戦略と投資対効果
i35_267
7
2.9k
全社でのソフトウェアサプライチェーン攻撃対策をやってみた with Takumi Guard
z63d
0
280
ゴールデンパスは敷いただけでは道にならない ─ 企画部門のエンジニアが技術標準を事業価値に変えるまで
mhrtech
1
260
Featured
See All Featured
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.4k
A better future with KSS
kneath
240
18k
Statistics for Hackers
jakevdp
799
230k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
420
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.5k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
118
120k
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
770
Faster Mobile Websites
deanohume
310
32k
Leo the Paperboy
mayatellez
8
1.9k
Documentation Writing (for coders)
carmenintech
77
5.4k
Raft: Consensus for Rubyists
vanstee
141
7.6k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2k
Transcript
IAM Role for Pods と Instance Meta Data Service 2020/01/23
岡野兼也(@Juju_62q) JAWS-UGコンテナ支部 #16@AWS
Okano Kenya / @Juju_62q Belonging: - “CyberAgent, Inc” Team: “OpenSaaS
Studio” Role: - “Backend Engineer” - “ほうれん草エバンジェリスト” - “銀の弾丸” Interest: - Microservices - “Domain Driven Development” - “Developer Experience” 22
皆さんも銀の弾丸になりませんか? 33 地上最高のTシャツを SUZURIで販売しています。 着ているので興味ある人は 見るに来てください
Contents 1. 2020年のイケてるIAM Role管理 for K8s on AWS 2. kiamとは
3. “IAM Roleがアタッチされている” in IMDSv1 4. 続kiamとは 5. “IAM Roleがアタッチされている” in IMDSv2 6. Current Status 7. まとめ 44
2019/09にEKSユーザに激震が走りました 55
IAM Role for ServiceAccount 66
77 IAM Role S3 IAM Role Dynamo Master Node Worker
Node service account A service account B Pod S3 (service account A) Pod Dynamo (service account B) S3 Dynamo OpenID Connect
88 Pod S3 (service account A) Pod Dynamo (service account
B) ここで にcredentialがマウントされる /var/run/secrets/eks.amazonaws.com/serviceaccount/token
ServiceAccountごとにIAM Roleが制御できた 99
でもその方法、今までなかった方法じゃない? 10 10
それはそう。 11 11
なので 12 12
古いAWS SDKからは読めません 13 13
あなたのAWS SDK新しいですか? • 自身のアプリのAWS SDKはアップデートしていますか? • 依存ライブラリ・OSSのAWS SDKは全て新しいですか? ◦ kubernetes-sigの対応は早かった
◦ 全てのOSSがK8sを前提にしているわけじゃない ◦ メンテが続いていてもまだ対応していないことも 14 14
僕は違いました 15 15
Contents 1. 2020年のイケてるIAM Role管理 for K8s on AWS 2. kiamとは
3. “IAM Roleがアタッチされている” in IMDSv1 4. 続kiamとは 5. “IAM Roleがアタッチされている” in IMDSv2 6. Current Status 7. まとめ 16 16
kiamとは • IAM Role for ServiceAccountが出る前によく使われてい たIAM Role for Podsのツール
• PodのアノテーションでIAM Roleを管理 • kube2iamというツールをもとにそこからRace Condition を排除し、セキュアにしたもの • AWS Traditional IAM Role Managementに対応 • uSwitch社が開発 17 17
アーキテクチャを見る前に 18 18
Contents 1. 2020年のイケてるIAM Role管理 for K8s on AWS 2. kiamとは
3. “IAM Roleがアタッチされている” in IMDSv1 4. 続kiamとは 5. “IAM Roleがアタッチされている” in IMDSv2 6. Current Status 7. まとめ 19 19
“IAM Roleがアタッチされている” in IMDSv1 20 20 $ curl http://169.254.169.254/latest/meta-data/iam/security-credentials/ hogehoge
$ curl http://169.254.169.254/latest/meta-data/iam/security-credentials/hogehoge { "Code" : "Success", "LastUpdated" : "2019-12-08T07:20:38Z", "Type" : "AWS-HMAC", "AccessKeyId" : "*****", "SecretAccessKey" : "******", "Token" : "*****", "Expiration" : "2019-12-08T13:49:31Z" }
Contents 1. 2020年のイケてるIAM Role管理 for K8s on AWS 2. kiamとは
3. “IAM Roleがアタッチされている” in IMDSv1 4. 続kiamとは 5. “IAM Roleがアタッチされている” in IMDSv2 6. Current Status 7. まとめ 21 21
続kiamとは 22 22 引用元: https://www.bluematador.com/blog/iam-access-in-kubernetes-kube2iam-vs-kiam
23 23 kiam-serverがSTSとやりとりしてcredentialを取得
24 24 kiam-agentがホストマシンのIMDSへのアクセスを kiam-agentにiptablesで書き換える
25 25 kiam-agentがkiam-serverとアクセスしてcredentialを取得
26 26 PodがIMDSにアクセスしようとして kiam-agentにアクセスし、credentialを取得
IAM Roleが取得できた! 27 27
Contents 1. 2020年のイケてるIAM Role管理 for K8s on AWS 2. kiamとは
3. “IAM Roleがアタッチされている” in IMDSv1 4. 続kiamとは 5. “IAM Roleがアタッチされている” in IMDSv2 6. Current Status 7. まとめ 28 28
IMDSv2とは • IMDSv1は中に入りさえすれば簡単にmetadataを 取得できてしまっていた • やばいのでセキュアにしたやつ • LTで詳しく解説すると終わるので気になったら 調べてみましょう 29
29
“IAM Roleがアタッチされている” in IMDSv2 30 30 $ curl -X PUT
http://169.254.169.254/latest/api/token \ -H "X-aws-ec2-metadata-token-ttl-seconds: 21600" ${TOKEN} $ curl http://169.254.169.254/latest/meta-data/iam/security-credentials/ \ -H "X-aws-ec2-metadata-token: ${TOKEN}" hogehoge $ curl http://169.254.169.254/latest/meta-data/iam/security-credentials/hogehoge \ -H "X-aws-ec2-metadata-token: ${TOKEN}" { "Code" : "Success", "LastUpdated" : "2019-12-08T07:20:38Z", "Type" : "AWS-HMAC", "AccessKeyId" : "*****", "SecretAccessKey" : "******", "Token" : "*****", "Expiration" : "2019-12-08T13:49:31Z" }
“IAM Roleがアタッチされている” in IMDSv2 31 31 $ curl -X PUT
http://169.254.169.254/latest/api/token \ -H "X-aws-ec2-metadata-token-ttl-seconds: 21600" ${TOKEN} $ curl http://169.254.169.254/latest/meta-data/iam/security-credentials/ \ -H "X-aws-ec2-metadata-token: ${TOKEN}" hogehoge $ curl http://169.254.169.254/latest/meta-data/iam/security-credentials/hogehoge \ -H "X-aws-ec2-metadata-token: ${TOKEN}" { "Code" : "Success", "LastUpdated" : "2019-12-08T07:20:38Z", "Type" : "AWS-HMAC", "AccessKeyId" : "*****", "SecretAccessKey" : "******", "Token" : "*****", "Expiration" : "2019-12-08T13:49:31Z" } PUTリクエストでセッショントークンを取得
“IAM Roleがアタッチされている” in IMDSv2 32 32 $ curl -X PUT
http://169.254.169.254/latest/api/token \ -H "X-aws-ec2-metadata-token-ttl-seconds: 21600" ${TOKEN} $ curl http://169.254.169.254/latest/meta-data/iam/security-credentials/ \ -H "X-aws-ec2-metadata-token: ${TOKEN}" hogehoge $ curl http://169.254.169.254/latest/meta-data/iam/security-credentials/hogehoge \ -H "X-aws-ec2-metadata-token: ${TOKEN}" { "Code" : "Success", "LastUpdated" : "2019-12-08T07:20:38Z", "Type" : "AWS-HMAC", "AccessKeyId" : "*****", "SecretAccessKey" : "******", "Token" : "*****", "Expiration" : "2019-12-08T13:49:31Z" } ヘッダにトークンをつけてアクセスをメタデータサーバにアクセス
色々セキュアになりました 33 33
ところで、kiamを覗きましょう 34 34
Contents 1. 2020年のイケてるIAM Role管理 for K8s on AWS 2. kiamとは
3. “IAM Roleがアタッチされている” in IMDSv1 4. 続kiamとは 5. “IAM Roleがアタッチされている” in IMDSv2 6. Current Status 7. まとめ 35 35
Current Status 36 36 ※ Production環境ではありません 新しいAWS SDKでのIMDSv2に対するアクセスが全てエラーに。。。
Contents 1. 2020年のイケてるIAM Role管理 for K8s on AWS 2. kiamとは
3. “IAM Roleがアタッチされている” in IMDSv1 4. 続kiamとは 5. “IAM Roleがアタッチされている” in IMDSv2 6. Current Status 7. まとめ 37 37
まとめ • 古いAWS SDKは早いとこ窓から投げ捨てましょう • 早めにIAM Role for ServiceAccountに移行するといい •
古いものを使わないといけない場合 ◦ 古いものでのみkiamやkube2iamを使う ◦ それを”負債である”と認知する ◦ ライブラリバージョンアップ施策を進めましょう 38 38 一応kiamにもISSUEが立ってるので対応してくれるかも https://github.com/uswitch/kiam/issues/359