En utilisant le SDK java Amazon AWS, j'obtiens une exception 403 AccessDenied inexplicable lors de l'appel de la méthode AmazonS3Client.getObject()
. Ce qui est étrange ici, c'est que je télécharge l'objet avec le même AmazonS3Client
donc le propriétaire de la ressource d'objet devrait être le même.Inexplicaable AmazonS3Client getObject() 403 AccessDenied exception
ClientConfiguration config = new ClientConfiguration();
config.setProtocol(Protocol.HTTP); // TODO Change to HTTPS?
AWSCredentials awsCredentials = new BasicAWSCredentials("myAccessKeyID","mySecretAccessKey");
AmazonS3 amazonS3 = new AmazonS3Client(awsCredentials, config);
amazonS3.setEndpoint(serviceInfo.getHost());
S3ClientOptions options = new S3ClientOptions();
options.setPathStyleAccess(true);
amazonS3.setS3ClientOptions(options);
amazonS3.putObject(“myBucket”, “keyVal”, file);
amazonS3.getObject(“myBucket”, “keyVal”); //AccessDenied
Même si je spécifie une ACL avec l'appel putObject()
, je reçois toujours l'exception AccessDenied.
Owner owner = amazonS3.getS3AccountOwner();
AccessControlList acl = new AccessControlList();
acl.grantPermission(new CanonicalGrantee(owner.getId()), Permission.Read);
amazonS3.putObject(new PutObjectRequest("mybucket", "myKey", f).withAccessControlList(acl));
amazonS3.getObject(“myBucket”, “keyVal”); //AccessDenied Still!!!
Je l'ai testé en incluant une ACL avec donataire ALL_USERS à l'appel amazonS3.putObject()
et cela me permet d'utiliser l'appel amazonS3.getObject()
correct sans exception il semble comme un problème d'autorisations quelque part. Mais où?! «Par défaut, toutes les ressources Amazon S3, telles que les compartiments, les objets et les sous-ressources connexes (par exemple, la configuration du cycle de vie et la configuration du site Web), sont privées: seul le propriétaire des ressources, un compte AWS qui l'a créé, peut accéder à la ressource. »
Modifier
Je l'ai dit à l'origine que j'utilise le client RiakCS pour se connecter à S3. au moment de cette modification, il semble y avoir un problème avec RiakCS
Le propriétaire des ressources est un compte AWS, et non un utilisateur individuel dans ce compte AWS; l'utilisateur doit toujours avoir l'autorisation d'accéder à l'objet, qui est influencé par la stratégie de compartiment et les stratégies d'utilisateur et de groupe IAM, de sorte que «même utilisateur» ne signifie pas nécessairement que vous pouvez lire ce que vous avez écrit. Les politiques doivent être là pour le permettre. Montrez votre seau et vos politiques d'utilisateur, peut-être? En outre, êtes-vous nouveau à S3 et/ou AWS ou était-ce une configuration de travail qui a cessé de fonctionner? –
De plus, l'objet que vous avez téléchargé est-il visible dans la console S3? Pouvez-vous réellement le télécharger manuellement en utilisant la capacité de téléchargement de la console, et utilisez-vous le même utilisateur IAM pour accéder à la console et à l'API? –
Oui, je suis nouveau à S3 et oui l'objet est visible en utilisant ma console Cyberduck S3 et je peux télécharger l'objet à travers cela. J'aurais dû le mentionner mais j'utilise le service Riak CS donc je n'ai jamais explicitement créé un compte utilisateur et AWS. En appelant 'amazonS3.getBucketPolicy (" myBucket ")' il renvoie null. – McLovin