IAM FullAccess から一部アクションを拒否する権限を作る
概要
- 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