$30 off During Our Annual Pro Sale. View Details »

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

    View Slide

  2. Okano Kenya / @Juju_62q
    Belonging:
    - “CyberAgent, Inc”
    Team: “OpenSaaS Studio”
    Role:
    - “Backend Engineer”
    - “ほうれん草エバンジェリスト”
    - “銀の弾丸”
    Interest:
    - Microservices
    - “Domain Driven Development”
    - “Developer Experience”
    22

    View Slide

  3. 皆さんも銀の弾丸になりませんか?
    33
    地上最高のTシャツを
    SUZURIで販売しています。
    着ているので興味ある人は
    見るに来てください

    View Slide

  4. 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

    View Slide

  5. 2019/09にEKSユーザに激震が走りました
    55

    View Slide

  6. IAM Role for ServiceAccount
    66

    View Slide

  7. 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

    View Slide

  8. 88
    Pod S3 (service account A)
    Pod Dynamo (service account B)
    ここで
    にcredentialがマウントされる
    /var/run/secrets/eks.amazonaws.com/serviceaccount/token

    View Slide

  9. ServiceAccountごとにIAM Roleが制御できた
    99

    View Slide

  10. でもその方法、今までなかった方法じゃない?
    10
    10

    View Slide

  11. それはそう。
    11
    11

    View Slide

  12. なので
    12
    12

    View Slide

  13. 古いAWS SDKからは読めません
    13
    13

    View Slide

  14. あなたのAWS SDK新しいですか?
    ● 自身のアプリのAWS SDKはアップデートしていますか?
    ● 依存ライブラリ・OSSのAWS SDKは全て新しいですか?
    ○ kubernetes-sigの対応は早かった
    ○ 全てのOSSがK8sを前提にしているわけじゃない
    ○ メンテが続いていてもまだ対応していないことも
    14
    14

    View Slide

  15. 僕は違いました
    15
    15

    View Slide

  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. まとめ
    16
    16

    View Slide

  17. kiamとは
    ● IAM Role for ServiceAccountが出る前によく使われてい
    たIAM Role for Podsのツール
    ● PodのアノテーションでIAM Roleを管理
    ● kube2iamというツールをもとにそこからRace Condition
    を排除し、セキュアにしたもの
    ● AWS Traditional IAM Role Managementに対応
    ● uSwitch社が開発
    17
    17

    View Slide

  18. アーキテクチャを見る前に
    18
    18

    View Slide

  19. 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

    View Slide

  20. “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"
    }

    View Slide

  21. 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

    View Slide

  22. 続kiamとは
    22
    22
    引用元: https://www.bluematador.com/blog/iam-access-in-kubernetes-kube2iam-vs-kiam

    View Slide

  23. 23
    23
    kiam-serverがSTSとやりとりしてcredentialを取得

    View Slide

  24. 24
    24
    kiam-agentがホストマシンのIMDSへのアクセスを
    kiam-agentにiptablesで書き換える

    View Slide

  25. 25
    25
    kiam-agentがkiam-serverとアクセスしてcredentialを取得

    View Slide

  26. 26
    26
    PodがIMDSにアクセスしようとして
    kiam-agentにアクセスし、credentialを取得

    View Slide

  27. IAM Roleが取得できた!
    27
    27

    View Slide

  28. 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

    View Slide

  29. IMDSv2とは
    ● IMDSv1は中に入りさえすれば簡単にmetadataを
    取得できてしまっていた
    ● やばいのでセキュアにしたやつ
    ● LTで詳しく解説すると終わるので気になったら
    調べてみましょう
    29
    29

    View Slide

  30. “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"
    }

    View Slide

  31. “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リクエストでセッショントークンを取得

    View Slide

  32. “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"
    }
    ヘッダにトークンをつけてアクセスをメタデータサーバにアクセス

    View Slide

  33. 色々セキュアになりました
    33
    33

    View Slide

  34. ところで、kiamを覗きましょう
    34
    34

    View Slide

  35. 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

    View Slide

  36. Current Status
    36
    36
    ※ Production環境ではありません
    新しいAWS SDKでのIMDSv2に対するアクセスが全てエラーに。。。

    View Slide

  37. 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

    View Slide

  38. まとめ
    ● 古いAWS SDKは早いとこ窓から投げ捨てましょう
    ● 早めにIAM Role for ServiceAccountに移行するといい
    ● 古いものを使わないといけない場合
    ○ 古いものでのみkiamやkube2iamを使う
    ○ それを”負債である”と認知する
    ○ ライブラリバージョンアップ施策を進めましょう
    38
    38
    一応kiamにもISSUEが立ってるので対応してくれるかも
    https://github.com/uswitch/kiam/issues/359

    View Slide