受け入れられた回答と同じ方向の回答を追加しますが、小さな(重要な)違いを追加し、詳細を追加します。
以下の構成を検討してください。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["s3:ListBucket"],
"Resource": ["arn:aws:s3:::<Bucket-Name>"]
},
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:DeleteObject"
],
"Resource": ["arn:aws:s3:::<Bucket-Name>/*"]
}
]
}
このポリシーは、プログラムによる書き込みと削除のアクセスを許可し、2つの部分に分かれています
。ListBucket
アクションはバケットレベルの権限を提供し、他のPutObject/DeleteObject
アクションはバケット内のオブジェクトの権限を必要とします。
最初のResource要素arn:aws:s3:::<Bucket-Name>
は、ListBucket
アプリケーションがバケット内のすべてのオブジェクトをリストできるようにアクションを指定します。
2番目のResource要素arn:aws:s3:::<Bucket-Name>/*
はPutObject
、DeletObject
アプリケーションがバケット内のオブジェクトを書き込んだり削除したりできるように、アクションを指定します。
バケットレベルとオブジェクトレベルのきめ細かい権限を指定するために、セキュリティ上の理由から2つの異なるarnに分離することが重要です。
GetObject
2番目のブロックだけを指定した場合、プログラムによるアクセスの場合、次のようなエラーが発生することに注意してください。
Upload failed: <file-name> to <bucket-name>:<path-in-bucket> An error occurred (AccessDenied) when calling the PutObject operation: Access Denied
。
aws
1人のユーザー用に構成し、それを別のユーザーからのcronjobと呼ばれるbashスクリプト内で使用しました。つまり、アクセスキーとアクセストークンが間違っているか、設定されていませんでした。私の解決策は、ここで説明するように、資格情報(AWS_ACCESS_KEY_ID
およびAWS_SECRET_ACCESS_KEY
)をbashスクリプトファイルに直接挿入することでした。