Tengo un cubo en el que puedo escribir sin problema. Sin embargo, cuando intento eliminar un objeto, aparece un error...
AccessDeniedException in NamespaceExceptionFactory.php line 91Siguiendo el ejemplo muy básico aquí , se me ocurrió este comando...
$result = $s3->deleteObject(array( 'Bucket' => $bucket, 'Key' => $keyname ));He probado variaciones de esto basadas en otros tutoriales y preguntas que he encontrado.
$result = $s3->deleteObject(array( 'Bucket' => $bucket, 'Key' => $keyname, 'Content-Type' => $contentType, 'Content-Length' => 0 ));Pero todo produce el mismo error. ¿Alguna sugerencia?
Es bastante común tener permiso de escritura (un usuario que solo escribe los datos en S3) y un permiso de eliminación por separado con otro usuario (para evitar eliminaciones accidentales).
Puede verificar si realmente tiene acceso a las acciones específicas del depósito, use la API iam get-role-policy para ver los permisos que tiene para el rol que está usando para intentar eliminar. Aquí hay un ejemplo:
$ aws iam get-role-policy --role-name <<your-role-name>> --policy-name <<your-policy-name>> { "RoleName": "myrolename, "PolicyDocument": { "Version": "yyyy-mm-dd", "Statement": [ { "Action": [ "s3:AbortMultipartUpload", "s3:DeleteObject", "s3:Get*", "s3:List*", "s3:ListBucket", "s3:PutObject*" ], "Resource": [ "arn:aws:s3:::bucket1/*", "arn:aws:s3:::bucket2/*" ], "Effect": "Allow", "Sid": "yyyy" } ] }, "PolicyName": "mypolicyname" }Lo más probable es que en su caso no tenga la acción "s3:DeleteObject" para ese recurso (depósito/prefijo)
El hecho de que el usuario pueda crear un objeto en un depósito no implica necesariamente que el mismo usuario pueda eliminar el objeto que pudo haber creado.
El permiso de S3 puede ser granular en el nivel de recursos (depósito/prefijo), donde la acción que puede realizar su función puede ser uno o varios de los permisos (consulte: http://docs.aws.amazon.com/AmazonS3/latest/dev /usando-con-acciones-s3.html )
Parece que tiene permiso s3:PutObject pero no s3:DeleteObject.