[アップデート] AWS SSOがIAMのカスタマー管理ポリシーをサポートしました

AWS Single Sign-on のアクセス許可セットにおいて、カスタマー管理ポリシーの割り当てと Permission Boundary の設定ができるようになりました。
2022.07.20

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

AWS Single Sign-on のアクセス許可セットの設定において、カスタマー管理ポリシーの割り当てができるようになりました。合わせて、Permission Boundary の設定もできるようになっています。

これまでは、ユーザー独自の権限をインラインポリシーとして設定する必要があり、最大文字サイズが 10,240 という制限がありました。これからは、カスタマー管理ポリシーを最大 10 個、各ポリシーの最大文字サイズは 6,144 の条件で設定できるようになり、権限の柔軟性が向上しました。



アップデートの概要

アップデート前後のイメージを図で表してみました。

アクセス許可セットにおいて、関連付けるアカウントに存在するカスタマー管理ポリシーの名前を指定することで設定します。AWS SSO サービス内でカスタマー管理ポリシーを作成するのではなく、関連付けるアカウント内にあるポリシーが IAM ロールにアタッチされます。そのため、関連付ける AWS アカウントでは、事前にカスタマー管理ポリシーを作成しておく必要があります。

許可の境界(Permission Boundary)を設定する場合は、Permission Boundary として割り当てる AWS 管理ポリシー名またはカスタマー管理ポリシー名を指定します。

アップデート前のイメージ

アップデート後のイメージ


アップデートにより次のようなメリットや考慮点があります。

  • カスタマー管理ポリシーのサポートにより
    • インラインポリシーで設定できる最大文字サイズ制限(10,240 文字)に悩まされることが減る
    • 既存の IAM ポリシーを利用できるようになった
  • 一方で、インラインポリシーのメリットとして、AWS SSO 側の操作だけで各アカウントの権限を設定できる点がある
  • これまで AWS SSO で許可の境界を実現する場合は、Permission Boundary として利用する IAM ポリシーと同様の権限をインラインポリシーとして設定することがあったが、これからはアクセス許可セットを関連付ける AWS アカウントに存在する IAM ポリシーを Permission Boundary として利用できる

参考情報ですが、アップデート前に許可の境界(Permission Boundary)を利用する場合のブログです。


試してみる

カスタマー管理ポリシーの設定を試してみます。

始めに、カスタマー管理ポリシーを設定するアクセス許可セットを関連付けたい AWS アカウントにおいて、次の IAM ポリシーtest-s3-policyを作成します。事前に作成済みの S3 バケットtest-aws-sso-permission-20220719の読み込みと書き込み権限を設定しています。

test-s3-policy

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": "arn:aws:s3:::test-aws-sso-permission-20220719"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject"
            ],
            "Resource": "arn:aws:s3:::test-aws-sso-permission-20220719/*"
        }
    ]
}


参考情報ですが、特定の S3 バケットへのアクセス権限を設定するポリシーは次のサイトを参考にしました。

特定のバケットまたはフォルダに対する Amazon S3 コンソールのアクセス権をユーザーに付与するにはどうすればよいですか?


次に、AWS SSO のアクセス許可セットを設定します。

許可セットタイプは「カスタム許可セット」を選択します。

ポリシーの設定画面がガラッと変わっていますね。

「カスタマーマネージドポリシー」に先ほど作成した IAM ポリシー名を入力します。ポリシーは最大 10 個設定できるようです。今回は設定しませんが、この画面から許可の境界(Permission Boundary)も設定できます。

許可セットの詳細画面はこれまでと同様です。

今回は S3 の操作権限のみなので、「リレー状態」は S3 バケットの URL にしています。この設定によりユーザーポータルからマネジメントコンソールにアクセスする際に S3 バケットのページを最初に表示できます。

最後に、設定の確認画面です。

カスタマーマネージドポリシーに指定した IAM ポリシー名を確認することができます。

以上で、アクセス許可セットの設定は終了です。

引き続き、アクセス許可セットと AWS アカウントの関連付けの設定を行います。

事前に作成済みのグループtest-groupに対して、先ほど作成したアクセス許可セットTestAccessを関連付けます。

グループtest-groupに所属しているユーザーのユーザーポータルにアクセスします。

一時クレデンシャル情報を利用して S3 バケットへのファイルのアップロードを試します。

$ mkfile -v 1m test.dat
test.dat 1048576 bytes

$ aws s3 cp test.dat s3://test-aws-sso-permission-20220719/test.dat --region ap-northeast-1
upload: ./test.dat to s3://test-aws-sso-permission-20220719/test.dat

$ aws s3 ls s3://test-aws-sso-permission-20220719
2022-07-20 14:54:15    1048576 test.dat

アップロードできました!


AWS アカウント側の AWS SSO が作成した IAM ロールを確認したところ、指定した IAM ポリシー(カスタマー管理ポリシー)が割り当てられています。


余談となりますが、事前に IAM ポリシーを作成していない場合は、アクセス許可セットと AWS アカウントの関連付けの設定に失敗します。

さいごに

AWS Single Sign-on がカスタマー管理ポリシーをサポートしました。これまではユーザーが定義する権限はインラインポリシーで設定する必要がありましたが、今回のアップデートで AWS SSO でできることの幅が広がりました。今後もどんどんアップデートがあると助かりますね。

以上、このブログがどなたかのご参考になれば幸いです。