Upgrade to Pro — share decks privately, control downloads, hide ads and more …

IAM Role for Pods and Instance Meta Data Service

@ジュジュ
January 23, 2020

IAM Role for Pods and Instance Meta Data Service

@ジュジュ

January 23, 2020
Tweet

More Decks by @ジュジュ

Other Decks in Technology

Transcript

  1. IAM Role for Pods と Instance Meta Data Service 2020/01/23

    岡野兼也(@Juju_62q) JAWS-UGコンテナ支部 #16@AWS
  2. Okano Kenya / @Juju_62q Belonging: - “CyberAgent, Inc” Team: “OpenSaaS

    Studio” Role: - “Backend Engineer” - “ほうれん草エバンジェリスト” - “銀の弾丸” Interest: - Microservices - “Domain Driven Development” - “Developer Experience” 22
  3. 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
  4. 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
  5. 88 Pod S3 (service account A) Pod Dynamo (service account

    B) ここで にcredentialがマウントされる /var/run/secrets/eks.amazonaws.com/serviceaccount/token
  6. 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
  7. kiamとは • IAM Role for ServiceAccountが出る前によく使われてい たIAM Role for Podsのツール

    • PodのアノテーションでIAM Roleを管理 • kube2iamというツールをもとにそこからRace Condition を排除し、セキュアにしたもの • AWS Traditional IAM Role Managementに対応 • uSwitch社が開発 17 17
  8. 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
  9. “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" }
  10. 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
  11. 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
  12. “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" }
  13. “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リクエストでセッショントークンを取得
  14. “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" } ヘッダにトークンをつけてアクセスをメタデータサーバにアクセス
  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. まとめ 35 35
  16. 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
  17. まとめ • 古いAWS SDKは早いとこ窓から投げ捨てましょう • 早めにIAM Role for ServiceAccountに移行するといい •

    古いものを使わないといけない場合 ◦ 古いものでのみkiamやkube2iamを使う ◦ それを”負債である”と認知する ◦ ライブラリバージョンアップ施策を進めましょう 38 38 一応kiamにもISSUEが立ってるので対応してくれるかも https://github.com/uswitch/kiam/issues/359