🗂
[Amplify]boto3でS3のオブジェクトを操作するときの権限を付与する。
はじめに
Pythonでboto3を使用してS3バケットのオブジェクトを操作するときに、エラーにハマったので、メモとして残しておきます。
エラーの内容
boto3を使用して、S3のオブジェクトを操作しようとしたときに、以下のエラーが発生した。
An error occurred (AccessDenied) when calling the CopyObject operation: Access Denied"
このエラーはS3のオブジェクトを操作するにあたって、権限が足りていないことが原因です。
しかし、以下のように権限は付与されていました。
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"s3:GetObject",
"s3:ListObject"
"s3:PutObject",
"s3:DeleteObject"
],
"Resource": [
"arn:aws:s3:::bucket-name/folderA/folderB",
"arn:aws:s3:::bucket-name/folderC/folderD",
"arn:aws:s3:::bucket-name/folderE/folderF"
],
"Effect": "Allow"
}
]
}
ここでなぜ権限が付与されていないのかで詰まりました。
解決方法
以下のサイトに解決方法が書いてありました。
ポリシーは以下のように、「/」をつけないARNと、「/」をつけるARNを記述しなければいけないみたいです。
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"s3:GetObject",
"s3:ListObject"
"s3:PutObject",
"s3:DeleteObject"
],
"Resource": [
"arn:aws:s3:::bucket-name/folderA/folderB",
"arn:aws:s3:::bucket-name/folderC/folderD",
"arn:aws:s3:::bucket-name/folderE/folderF",
"arn:aws:s3:::bucket-name/folderA/folderB/*",
"arn:aws:s3:::bucket-name/folderC/folderD/*",
"arn:aws:s3:::bucket-name/folderE/folderF/*"
],
"Effect": "Allow"
}
]
}
Discussion