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
Genie Ontologyは銀の弾丸かを考える / Is Genie Ontology a Silver Bullet?
nttcom
0
380
公式ドキュメントの歩き方etc
coco_se
1
120
大量データに対しても、生成AIを用いてリーズナブルにデータ加工をしたい!Databricksのai_queryについて調べてみた
kamoshika
1
210
Terraform共通モジュールをチーム横断で“変えられる”運用へ ― リリースと適用の分離
kekke_n
1
3.3k
凡エンジニアがこの先生きのこるためには。〜TypeScript完全に理解したい〜
alchemy1115
2
310
Compose 新機能総まとめ / What's New in Jetpack Compose
yanzm
0
310
Control Planeで育てるBtoB SaaSの認証基盤 - SRE NEXT 2026
pokohide
1
2.5k
壊して学ぶAWS CDK: そのcdk deployで消えるもの、残るもの
k_adachi_01
1
360
はじめてのWDM
miyukichi_ospf
1
150
Oracle Exadata Database Service on Cloud@Customer X11M (ExaDB-C@C) サービス概要
oracle4engineer
PRO
2
8.4k
2年前に削除したPHPクラスが、 ある日突然決済をエラーにした
ykagano
1
260
企業でAWS Organizationsを動かすための組織設計の考え方
nrinetcom
PRO
1
100
Featured
See All Featured
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.5k
Practical Orchestrator
shlominoach
191
11k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.3k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.2k
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
610
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
360
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.5k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
220
Deep Space Network (abreviated)
tonyrice
0
230
The Language of Interfaces
destraynor
162
27k
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
410
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