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

AssumePolicyの意外なハマりどころ

 AssumePolicyの意外なハマりどころ

22/3/14 JAWS-UG朝会 #31にて発表

Haruka Sakihara

March 15, 2022
Tweet

More Decks by Haruka Sakihara

Other Decks in Technology

Transcript

  1. AssumePolicyの意外なハマりどころ
    Monday, March 14. 2022
    Haruka Sakihara
    JAWS-UG朝会 #31
    JAWS-UG logo is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.

    View Slide

  2. 自己紹介
    Haruka Sakihara

    • ネットワークスペシャリスト試験(IPA)
    • AWS Certified Security等4資格
    • アクセンチュア株式会社
    テクノロジーコンサルティング本部所属
    • 普段はクラウドインフラ構築の支援をしておりま

    • アプリケーション……プライベートだとGo, 仕事だ
    と少しPython
    • インフラ……ほとんどAWS
    This presentation makes reference to marks owned by third parties. Unless otherwise noted, all such third-party marks are the property of their
    respective owners. No sponsorship, endorsement or approval of this content by the owners of such marks is intended, expressed or implied.

    View Slide

  3. 今回実現したいこと
    とあるAssumeRoleの権限移譲先として、「あるグループに属している
    IAMユーザー全員」を指定したいというケースを考えます。
    Users
    IAM User Group
    Assume Policy

    View Slide

  4. AssumePolicyのプリンシパルに指定できる要素
    AWS公式ドキュメントより
    出典: AWS公式ドキュメント - AWS JSON ポリシーの要素: Principal
    ポリシーでは、次のいずれかのプリンシパルを指定で
    きます。
    • AWS アカウントおよびルートユーザー
    • IAM ロール
    • ロールセッション
    • IAM ユーザー
    • フェデレーティッドユーザーセッション
    • AWS のサービス
    • すべてのプリンシパル
    Error creating IAM Role role-A:
    MalformedPolicyDocument: Invalid principal in
    policy
    IAMグループは対象外!
    IAMグループを指定すると・・・
    しかし、IAMユーザーグループをAssumePolicyのプリンシパルに指定することは
    できません。

    View Slide

  5. 解決策: TerraformのDataSourceを利用
    出典: Terraform公式ドキュメント - provider/aws Data Source: aws_iam_group
    data.aws_iam_group.example.usersで所属ユー
    ザーの情報を取得できる!
    Terraformを利用している場合には、DataSource “aws_iam_group”を使ってある
    IAMグループを参照することで、そこに属するIAMユーザー情報をリストの形で得
    ることができます。

    View Slide

  6. 解決策: TerraformのDataSourceを利用
    2. DataSourceから取得したユーザー
    ARNをfor文で取り出す
    グループに属するユーザー全員
    のARNが記載されたポリシード
    キュメントが生成される
    1. IAMグループを参照する
    DataSourceの作成
    IAMグループを参照するDataSourceから得た所属ユーザーARN一覧を、for文で取
    り出してAssumePolicyのプリンシパルに指定します。

    View Slide

  7. まとめ
    • AssumeRoleのプリンシパルには、IAMグループを指定できません。
    • そのときはリソース管理にTerraformを使っていたため、IAMグループのDataSourceを使って所
    属ユーザーARN一覧を取得し、それをプリンシパルに指定する方法で乗り切りました。
    • この方法だと、グループに新しくユーザーが追加されても、そのユーザーARNをプリンシパルに
    追加するところまで自動化できるのでとても便利でした。
    • IaCは単にインフラをコード管理するためのツールではなく「通常通りに書くと面倒な設定を言語
    の力で簡潔に表す」というプログラミング言語的な側面もあるので、そこも存分に活用していき
    ましょう。

    View Slide

  8. Thank You
    ご意見、ご質問ありましたらお気軽にご連絡下さい
    [email protected]
    Haruka Sakihara(崎原 晴香)

    View Slide