LoginSignup
0
0

AWS IAM Policy のステートメントに条件キーを利用する場合は対応するアクションとリソースタイプのみを定義する

Posted at

IAM Policy の JSON 定義で少しハマったのでメモ。

要約

各アクションとリソースタイプの組み合わせでどの条件キーを利用できるかは決まっている

IAM Policy のステートメントには Condition 要素を含めることができ、これにより policy を実行するタイミングの条件を指定することができます。その指定する条件として条件キーを利用できます。

この条件キーですが、各アクションとリソースタイプの組み合わせでどの条件キーを利用できるかは決まっています。こちらの一覧は公式ドキュメントにまとまっているので Condition 要素を利用する場合は一読することをおすすめします。

条件キーを利用する場合は対応するアクションとリソースタイプのみを定義したステートメントを用意する

Condition要素に条件キーを利用する場合は対応するアクションとリソースタイプのみを定義したステートメントを用意しましょう。対応していない条件キーが含まれていると Policy が正常に評価されません。

具体例

AWS IAM Identity Center の sso:CreateAccountAssignmentアクションを例に説明します。

このアクションはリソースタイプとして Account, Instance, PermissionSetの3つを必ず指定する必要があります。そして InstancePermissionSetのみ条件キーとして aws:ResourceTag/${TagKey}が対応しています。

上記を前提に Project=Aというタグが付いた PermissionSetに対してのみ sso:CreateAccountAssignmentアクションを実行できる Policy を定義しようとすると以下になります。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Example1",
            "Effect": "Allow",
            "Action": "sso:CreateAccountAssignment",
            "Resource": [
                "arn:aws:sso:::permissionSet/*/*"
            ],
            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/Project": "A"
                }
            }
        },
        {
            "Sid": "Example2",
            "Effect": "Allow",
            "Action": "sso:CreateAccountAssignment",
            "Resource": [
                "arn:aws:sso:::instance/*",
                "arn:aws:sso:::account/*"
            ]
        }
    ]
}

ポイントとしては PermissionSetリソースタイプのみに Condition 要素を定義したステートメントと、 AccountInstanceリソースタイプに Condition 要素を定義していないステートメントの2つを定義している所です。同じアクションを定義したステートメントが複数あるのは個人的に若干違和感を感じたのですが、こういうものだと割り切って Policy を構築していきましょう。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0