http://docs.aws.Amazon.com/IAM/latest/UserGuide/access_policies_examples.html#iam-policy-example-s の例に従って、ユーザーにアクセスを許可する方法について1つのバケット。
次に、W3 Total Cache Wordpressプラグインを使用して構成をテストしました。テストは失敗しました。
私も問題を再現しようとしました
aws s3 cp --acl=public-read --cache-control='max-age=604800, public' ./test.txt s3://my-bucket/
そしてそれは失敗しました
upload failed: ./test.txt to s3://my-bucket/test.txt A client error (AccessDenied) occurred when calling the PutObject operation: Access Denied
バケットにアップロードできないのはなぜですか?
私自身の質問に答えるには:
サンプルポリシーはPutObjectアクセスを許可しましたが、PutObjectAclアクセスも許可する必要がありました。
変えなければならなかった
"s3:PutObject",
"s3:GetObject",
"s3:DeleteObject"
例から:
"s3:PutObject",
"s3:PutObjectAcl",
"s3:GetObject",
"s3:GetObjectAcl",
"s3:DeleteObject"
また、次の2つのボックスのチェックを外して、クライアントがパブリックにアクセス可能なACLを設定するようにバケットが設定されていることを確認する必要があります。
私は同様の問題を抱えていました。 ACLを使用していないので、s3:PutObjectAcl
は必要ありませんでした。
私の場合、私はやっていた( Serverless Framework YML):
- Effect: Allow
Action:
- s3:PutObject
Resource: "arn:aws:s3:::MyBucketName"
の代わりに:
- Effect: Allow
Action:
- s3:PutObject
Resource: "arn:aws:s3:::MyBucketName/*"
/*
をバケットARNの最後に追加します。
お役に立てれば。
S3アップロードを大きなファイルで動作させるために、壁に頭をぶつけただけです。最初は私のエラーは:
An error occurred (AccessDenied) when calling the CreateMultipartUpload operation: Access Denied
次に、より小さいファイルをコピーしてみました:
An error occurred (AccessDenied) when calling the PutObject operation: Access Denied
オブジェクトを一覧表示することはできましたが、役割ポリシーにs3:*
権限があったとしても、他に何もできませんでした。私は最終的にこれにポリシーを作り直しました:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:DeleteObject"
],
"Resource": "arn:aws:s3:::my-bucket/*"
},
{
"Effect": "Allow",
"Action": [
"s3:ListBucketMultipartUploads",
"s3:AbortMultipartUpload",
"s3:ListMultipartUploadParts"
],
"Resource": [
"arn:aws:s3:::my-bucket",
"arn:aws:s3:::my-bucket/*"
]
},
{
"Effect": "Allow",
"Action": "s3:ListBucket",
"Resource": "*"
}
]
}
これで、任意のファイルをアップロードできます。 my-bucket
をバケット名に置き換えます。これが他の誰かに役立つことを願っています。
これが他の誰かに役立つ場合、私の場合、私はCMKを使用していました(デフォルトのaws/s3キーを使用してうまく機能しました)
IAMで暗号化キーの定義に移動し、boto3にログインしたプログラムユーザーを「このキーを使用してアプリケーション内から、およびKMSと統合されたAWSサービスを使用するときにデータを暗号化および復号化できる」ユーザーのリストに追加する必要がありました。
KWS暗号化で保護されたS3バケットへのアップロードでも同様の問題がありました。特定のs3キーの下にオブジェクトを追加できる最小限のポリシーがあります。
ロールがオブジェクトをバケットに入れることを許可するには、ポリシーに次のKMSアクセス許可を追加する必要がありました。 (厳密に必要とされるよりもわずかに多い場合があります)
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"kms:ListKeys",
"kms:GenerateRandom",
"kms:ListAliases",
"s3:PutAccountPublicAccessBlock",
"s3:GetAccountPublicAccessBlock",
"s3:ListAllMyBuckets",
"s3:HeadBucket"
],
"Resource": "*"
},
{
"Sid": "VisualEditor1",
"Effect": "Allow",
"Action": [
"kms:ImportKeyMaterial",
"kms:ListKeyPolicies",
"kms:ListRetirableGrants",
"kms:GetKeyPolicy",
"kms:GenerateDataKeyWithoutPlaintext",
"kms:ListResourceTags",
"kms:ReEncryptFrom",
"kms:ListGrants",
"kms:GetParametersForImport",
"kms:TagResource",
"kms:Encrypt",
"kms:GetKeyRotationStatus",
"kms:GenerateDataKey",
"kms:ReEncryptTo",
"kms:DescribeKey"
],
"Resource": "arn:aws:kms:<MY-REGION>:<MY-ACCOUNT>:key/<MY-KEY-GUID>"
},
{
"Sid": "VisualEditor2",
"Effect": "Allow",
"Action": [
<The S3 actions>
],
"Resource": [
"arn:aws:s3:::<MY-BUCKET-NAME>",
"arn:aws:s3:::<MY-BUCKET-NAME>/<MY-BUCKET-KEY>/*"
]
}
]
}
私が犯した間違いに対して同じエラーメッセージが表示されていました:s3://my-bucket-name/
などの正しいs3 uriを使用していることを確認してください
(my-bucket-nameが明らかにaws s3のルートにある場合)
ブラウザからs3バケットをコピーして貼り付けると、https://s3.console.aws.Amazon.com/s3/buckets/my-bucket-name/?region=my-aws-regiontab=overview
のようなものが表示されるためです
したがって、私はs3://buckets/my-bucket-name
を使用するミスを犯しました:
An error occurred (AccessDenied) when calling the PutObject operation: Access Denied