IAM Policy の Condition要素で利用可能なGlobal Condition Key が3つ追加されました

記事タイトルとURLをコピーする

CI2部 技術2課の山﨑です。

4月27日にIAM Policy の Condition要素で利用可能なGlobal Condition Key が3つ追加されるというアップデートがありました。

aws.amazon.com

今回はこのアップデートで一体何が便利になったのかを一部ご紹介します。

Global Condition Key とは

Global Condition Key は IAMポリシーで定義するCondition要素内で条件を指定する際に使用される条件キーの1つです。「aws:」プレフィックスが目印です。具体的には以下のようなものがあります。

  • aws:MultiFactorAuthPresent
  • aws:PrincipalArn
  • aws:SourceArn

その他のGlobal Condition Key についてはAWSドキュメントをご覧ください。

docs.aws.amazon.com

アップデートの概要

今回のAWSアップデートで以下の3つのGlobal Condition Keyが利用可能になりました。

  • aws:ResourceAccount
  • aws:ResourceOrgID
  • aws:ResourceOrgPaths

上記のKeyをポリシーステートメントに記述することで、IAMポリシーをアタッチした IAMエンティティ の操作対象であるAWSリソースが所属するAWSアカウント/Organizations組織/Organizations OUを条件として指定することができます。

百聞は一見に如かず、ということで以降「aws:ResourceOrgID」「aws:ResourceOrgPaths」の2つのKeyを用いたユースケースをご紹介します。

aws:ResourceOrgID

想定するユースケース

  • AWS Organizations を用いたマルチアカウント構成を採用している
  • スイッチロール専用アカウントから各AWSアカウントへスイッチロールをして操作(アクセス元の一元管理)
  • Organizations配下のAWSアカウント全てに対し、スイッチロール専用アカウントから「SampleAdmin01」でスイッチロールを許可
  • Organizations組織外の「SampleAdmin01」へのスイッチロールは制御

これまで

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "sts:AssumeRole",
            "Resource": [
                "arn:aws:iam::アカウントA:role/SampleAdmin01",
                "arn:aws:iam::スイッチロール専用アカウント:role/SampleAdmin01",
                "arn:aws:iam::アカウントB:role/SampleAdmin01",
                "arn:aws:iam::アカウントC:role/SampleAdmin01"
            ],
            "Condition": {
                "BoolIfExists": {
                    "aws:MultiFactorAuthPresent": "true"
                }
            }
        }
    ]
}

aws:ResourceOrgID を使った場合

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "sts:AssumeRole",
            "Resource": [
                "arn:aws:iam::*:role/SampleAdmin01"
            ],
            "Condition": {
                "BoolIfExists": {
                    "aws:MultiFactorAuthPresent": "true"
                },
                "StringEquals": {
                    "aws:ResourceOrgID": "${PrincipalOrgID}"
                }
            }
        }
    ]
}

何が嬉しいのか

具体的には新規AWSアカウントを発行時のIAMポリシーの修正の手間を省くことができます。これまでのIAMポリシーの記述を採用すると、新規AWSアカウントを発行する度に「Resource」要素に新規AWSアカウント上のIAMロールのARNを追記修正する必要がありました。

aws:ResourceOrgID を使うと新規AWSアカウント発行時のIAMポリシーのメンテナンスが不要となります。

aws:ResourceOrgPaths

想定するユースケース

  • AWS Organizations を用いたマルチアカウント構成を採用している
  • スイッチロール専用アカウントから各AWSアカウントへスイッチロールをして操作(アクセス元の一元管理)
  • Organizationsの特定のOU配下の全てのAWSアカウントに対し、スイッチロール専用アカウントから「SampleAdmin01」でスイッチロールを許可
  • Organizationsの特定のOU配下のAWSアカウント以外へ「SampleAdmin01」でスイッチロールすることを制御

これまで

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "sts:AssumeRole",
            "Resource": [
                "arn:aws:iam::アカウントA:role/SampleAdmin01",
                "arn:aws:iam::スイッチロール専用アカウント:role/SampleAdmin01",
                "arn:aws:iam::アカウントB:role/SampleAdmin01",
                "arn:aws:iam::アカウントC:role/SampleAdmin01"
            ],
            "Condition": {
                "BoolIfExists": {
                    "aws:MultiFactorAuthPresent": "true"
                }
            }
        }
    ]
}

aws:ResourceOrgPaths を使った場合

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "sts:AssumeRole",
            "Resource": [
                "arn:aws:iam::*:role/SampleAdmin01",
            ],
            "Condition": {
                "BoolIfExists": {
                    "aws:MultiFactorAuthPresent": "true"
                },
                "ForAnyValue:StringLike": {
                    "aws:ResourceOrgPaths": "${PrincipalOrgID}/${RootOUのID}/${Core OUのID}/*"
                }
            }
        }
    ]
}

何が嬉しいのか

こちらもaws:ResourceOrgID と同様に新規AWSアカウントを発行時のIAMポリシーの修正の手間を省くことができます。これまでのIAMポリシーの記述を採用すると、新規AWSアカウントを発行する度に「Resource」要素に新規AWSアカウント上のIAMロールのARNを追記修正する必要がありました。

aws:ResourceOrgPaths を使うと新規AWSアカウント発行時のIAMポリシーのメンテナンスが不要となります。

まとめ

AWSアップデートで追加されたGlobal Condition Key により、IAMポリシーをアタッチした IAMエンティティ の操作対象であるAWSリソースが所属するAWSアカウント/Organizations組織/Organizations OUを条件として指定することができるようになりました。

個人的にはOrganizationsを利用したマルチアカウント構成におけるポリシー設計で便利になるのではないかと思いましたが、まだまだIAMポリシーには不慣れなので継続的に学習して精進してまいります。

山﨑 翔平 (Shohei Yamasaki) 記事一覧はコチラ

2019/12入社で現在はクラウドインテグレーション部技術1課所属。AWS資格7冠。元人材営業/キャリアカウンセラー。