J'ai suivi l'exemple de http://docs.aws.Amazon.com/IAM/latest/UserGuide/access_policies_examples.html#iam-policy-example-s3 pour savoir comment accorder à un utilisateur l'accès à un seul compartiment.
J'ai ensuite testé la configuration à l'aide du plugin W3 Total Cache Wordpress. Le test a échoué.
J'ai aussi essayé de reproduire le problème en utilisant
aws s3 cp --acl=public-read --cache-control='max-age=604800, public' ./test.txt s3://my-bucket/
et qui a échoué avec
upload failed: ./test.txt to s3://my-bucket/test.txt A client error (AccessDenied) occurred when calling the PutObject operation: Access Denied
Pourquoi ne puis-je pas télécharger dans mon seau?
Pour répondre à ma propre question:
L'exemple de stratégie a accordé l'accès à PutObject, mais j'ai également dû accorder l'accès à PutObjectAcl.
Je devais changer
"s3:PutObject",
"s3:GetObject",
"s3:DeleteObject"
de l'exemple à:
"s3:PutObject",
"s3:PutObjectAcl",
"s3:GetObject",
"s3:GetObjectAcl",
"s3:DeleteObject"
Vous devez également vous assurer que votre compartiment est configuré pour que les clients définissent une liste de contrôle d'accès accessible au public en décochant ces deux cases:
J'avais un problème similaire. Je n'utilisais pas les fichiers ACL, je n'avais donc pas besoin de s3:PutObjectAcl
.
Dans mon cas, je faisais (dans Serverless Framework YML):
- Effect: Allow
Action:
- s3:PutObject
Resource: "arn:aws:s3:::MyBucketName"
Au lieu de:
- Effect: Allow
Action:
- s3:PutObject
Resource: "arn:aws:s3:::MyBucketName/*"
Ce qui ajoute un /*
à la fin de l'ARN du compartiment.
J'espère que cela t'aides.
Au cas où cela aiderait quelqu'un d'autre, dans mon cas, j'utilisais une clé CMK (cela fonctionnait très bien avec la clé aws/s3 par défaut)
Je devais entrer dans la définition de ma clé de chiffrement dans IAM et ajouter l'utilisateur programmatique connecté à boto3 à la liste des utilisateurs pouvant "utiliser cette clé pour chiffrer et déchiffrer des données depuis des applications et avec les services AWS intégrés à KMS".
Je venais de me cogner la tête contre un mur, essayant simplement de faire fonctionner les téléchargements S3 avec de gros fichiers. Initialement mon erreur était:
An error occurred (AccessDenied) when calling the CreateMultipartUpload operation: Access Denied
Ensuite, j'ai essayé de copier un fichier plus petit et j'ai obtenu:
An error occurred (AccessDenied) when calling the PutObject operation: Access Denied
Je pouvais lister les objets correctement mais je ne pouvais rien faire d'autre même si j'avais les permissions s3:*
dans ma stratégie de rôle J'ai finalement retravaillé la politique:
{
"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": "*"
}
]
}
Maintenant, je peux télécharger n'importe quel fichier. Remplacez my-bucket
par votre nom de compartiment. J'espère que cela aidera quelqu'un d'autre à traverser ça.
J'ai eu un problème similaire lors du téléchargement dans un compartiment S3 protégé avec le cryptage KWS ..__ J'ai une stratégie minimale qui permet l'ajout d'objets sous une clé s3 spécifique.
J'avais besoin d'ajouter les autorisations KMS suivantes à ma stratégie pour permettre au rôle de placer des objets dans le compartiment. (Peut-être un peu plus que strictement requis)
{
"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>/*"
]
}
]
}