IAM FullAccess から一部アクションを拒否する権限を作る

AWS,IAM_Policy関連

概要

  • IAM のロールを作成する際に、標準で定義されているAWS 管理ポリシーを使用することがあるかと思います。AWS 管理ポリシーは、一から作るより便利ですが、FullAccess (例: AmazonS3FullAccess, AmazonEC2FullAccess)だと権限が強く、ReadOnly (例: AmazonS3ReadOnlyAccess, AmazonEC2ReadOnlyAccess)だと権限が足りないといった悩みがあります。
  • 今回は、その様な悩みを解消すべく、FullAccess から一部アクションを拒否する権限を作りたいと思います。AmazonS3FullAccess から “DeleteBucket" のアクションだけを拒否した権限とします。

 

IAM FullAccess から一部アクションを拒否する権限を作る方法

  • 標準のAmazonS3FullAccess は、以下の権限となります。
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:*",
                "s3-object-lambda:*"
            ],
            "Resource": "*"
        }
    ]
}
  • 以下の様に、Effect の要素を追加し、"Deny" を指定します。
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:*",
                "s3-object-lambda:*"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Deny",
            "Action": [
                "s3:DeleteBucket"
            ],
            "Resource": "*"
        }
    ]
}
  • 上記JSON を使用し、IAM ポリシーを作成します。IAM ロールにIAM ポリシーを関連付けます。

 

IAM の権限をテストする

  • それでは、作成したIAM ロールをEC2 に割り当て権限のテストを行います。
  • EC2 からaws s3 の cli を実行し、バケットの作成 (書き込み)、オブジェクトの cp (書き込み)、オブジェクトの ls (読み取り) に成功しました。
$ aws s3 mb s3://niikawa-2024 --region ap-northeast-1
make_bucket: niikawa-2024
$ aws s3 cp /tmp/TESTDATA s3://niikawa-2024
upload: ../../tmp/TESTDATA to s3://niikawa-2024/TESTDATA
$ aws s3 ls s3://niikawa-2024
2024-03-05 13:06:46          0 TESTDATA
  • EC2 からaws s3 の cli を実行し、バケットの削除 (書き込み) に失敗しました。DeleteBucket の権限がありません。
$ aws s3 rb s3://niikawa-2024
remove_bucket failed: s3://niikawa-2024 An error occurred (AccessDenied) when calling the DeleteBucket operation: Access Denied

$ aws s3 rb s3://niikawa-2024 --force
delete: s3://niikawa-2024/TESTDATA
remove_bucket failed: s3://niikawa-2024 An error occurred (AccessDenied) when calling the DeleteBucket operation: Access Denied
  • もちろん、s3 以外の権限もありません。想定通りの動作を確認しました。
$ aws iam list-users

An error occurred (AccessDenied) when calling the ListUsers operation: User: arn:aws:sts::111111111111:assumed-role/niikawa-test-role-ec2/i-0ab1234567890cdef is not authorized to perform: iam:ListUsers on resource: arn:aws:iam::111111111111:user/ because no identity-based policy allows the iam:ListUsers action

$ aws ec2 describe-instances --region ap-northeast-1

An error occurred (UnauthorizedOperation) when calling the DescribeInstances operation: You are not authorized to perform this operation. User: arn:aws:sts::111111111111:assumed-role/niikawa-test-role-ec2/i-0ab1234567890cdef is not authorized to perform: ec2:DescribeInstances because no identity-based policy allows the ec2:DescribeInstances action

 

 

AWS,IAM_Policy関連aws,Deny,iam

Posted by takaaki