La AWS SDK for Java version 1.x est entrée en mode maintenance le 31 juillet 2024 et atteindra end-of-support
Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Gestion de l'accès àAmazon S3Utilisation de stratégies de compartiment
Vous pouvez définir, obtenir ou supprimer une stratégie de compartiment pour gérer l'accès à vos compartiments Amazon S3.
Définition d'une stratégie de compartiment
Vous pouvez définir la stratégie de compartiment pour un compartiment S3 :
-
Appel du client AmazonS3
setBucketPolicy
et lui fournir unSetBucketPolicyRequest -
En définissant la stratégie directement à l'aide de la surcharge
setBucketPolicy
qui prend un nom de compartiment et un texte de stratégie (au format JSON)
Importations
import com.amazonaws.AmazonServiceException; import com.amazonaws.auth.policy.Policy; import com.amazonaws.auth.policy.Principal;
Code
s3.setBucketPolicy(bucket_name, policy_text); } catch (AmazonServiceException e) { System.err.println(e.getErrorMessage()); System.exit(1); }
Utilisation de la classe Policy pour générer ou valider une stratégie
Lorsque vous fournissez une stratégie de compartiment à setBucketPolicy
, vous pouvez effectuer les actions suivantes :
-
Spécifier la stratégie directement sous la forme d'une chaîne de texte au format JSON
-
Créer la stratégie à l'aide de la classe Policy
En utilisant la classe Policy
, vous n'avez pas à vous soucier de formater correctement votre chaîne de texte. Pour obtenir le texte de stratégie JSON à partir de la classe Policy
, utilisez sa méthode toJson
.
Importations
import com.amazonaws.auth.policy.Resource; import com.amazonaws.auth.policy.Statement; import com.amazonaws.auth.policy.actions.S3Actions; import com.amazonaws.regions.Regions; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3ClientBuilder;
Code
new Statement(Statement.Effect.Allow) .withPrincipals(Principal.AllUsers) .withActions(S3Actions.GetObject) .withResources(new Resource( "{region-arn}s3:::" + bucket_name + "/*"))); return bucket_policy.toJson();
La classe Policy
fournit également une méthode fromJson
qui peut tenter de créer une stratégie à l'aide d'une chaîne JSON transmise. La méthode valide cette dernière pour s'assurer que le texte peut être transformé en une structure de stratégie valide et échoue avec une exception IllegalArgumentException
si le texte de la stratégie n'est pas valide.
Policy bucket_policy = null; try { bucket_policy = Policy.fromJson(file_text.toString()); } catch (IllegalArgumentException e) { System.out.format("Invalid policy text in file: \"%s\"", policy_file); System.out.println(e.getMessage()); }
Vous pouvez utiliser cette technique pour prévalider une stratégie que vous lisez à partir d'un fichier ou avec tout autre moyen.
Veuillez consulter l'exemple complet
Obtention d'une stratégie de compartiment
Pour récupérer la stratégie pour unAmazon S3, appelez le client AmazonS3getBucketPolicy
en lui transmettant le nom du compartiment à partir lequel récupérer la stratégie.
Importations
import com.amazonaws.AmazonServiceException; import com.amazonaws.regions.Regions; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3ClientBuilder;
Code
try { BucketPolicy bucket_policy = s3.getBucketPolicy(bucket_name); policy_text = bucket_policy.getPolicyText(); } catch (AmazonServiceException e) { System.err.println(e.getErrorMessage()); System.exit(1); }
Si le compartiment nommé n'existe pas, si vous n'y avez pas accès ou s'il n'a pas de stratégie de compartiment, une exception AmazonServiceException
est levée.
Veuillez consulter l'exemple complet
Suppression d'une stratégie de compartiment
Pour supprimer une stratégie de compartiment, appelez la méthode du client AmazonS3deleteBucketPolicy
en lui fournissant le nom du compartiment.
Importations
import com.amazonaws.AmazonServiceException; import com.amazonaws.regions.Regions; import com.amazonaws.services.s3.AmazonS3;
Code
try { s3.deleteBucketPolicy(bucket_name); } catch (AmazonServiceException e) { System.err.println(e.getErrorMessage()); System.exit(1); }
Cette méthode aboutit même si le compartiment ne comporte pas encore de stratégie. Si vous spécifiez un nom de compartiment qui n'existe pas ou si vous n'avez pas accès au compartiment, une exception AmazonServiceException
est levée.
Veuillez consulter l'exemple complet
Plus d'informations
-
Présentation du langage d'access policydans leAmazon Simple Storage ServiceGuide de l'utilisateur
-
Exemples de stratégie de compartimentdans leAmazon Simple Storage ServiceGuide de l'utilisateur