Sévérité : MoyenneAWS S3

AccessDenied sur un bucket S3 malgré une politique IAM correcte

```text
An error occurred (AccessDenied) when calling the PutObject operation: Access Denied
```

Détecter

Un traitement exécuté sur EC2 échoue à lire ou écrire dans un bucket ; la politique IAM du rôle semble autoriser l'action.

Symptômes

Un traitement exécuté sur EC2 échoue à lire ou écrire dans un bucket ; la politique IAM du rôle semble autoriser l'action.

Environnement

Instance EC2 avec rôle IAM, bucket chiffré SSE-KMS, politique de bucket, point de terminaison VPC.

Cause racine

L'accès S3 est l'intersection de plusieurs couches : politique IAM, politique de bucket (Deny explicite, condition aws:SourceVpce), clé KMS (le rôle doit avoir kms:GenerateDataKey/kms:Decrypt et être autorisé dans la key policy), SCP d'organisation, Block Public Access, propriété des objets.

Diagnostic

  1. Identité réelle : aws sts get-caller-identity.
  2. Simulation : aws iam simulate-principal-policy ….
  3. Lire la politique de bucket et la key policy KMS.
  4. CloudTrail : l'événement indique souvent la politique en cause (errorMessage).

Solution

Ajouter la permission manquante à la bonne couche — typiquement kms:GenerateDataKey sur la clé pour l'écriture, ou élargir la condition du bucket au bon VPC endpoint — sans ouvrir plus que nécessaire.

Commandes

aws sts get-caller-identity
aws s3api get-bucket-policy --bucket rapports-prod
aws kms get-key-policy --key-id <id> --policy-name default

Prévention

Politiques en IaC testées, IAM Access Analyzer, modèles de rôle incluant les droits KMS associés, documentation des conditions de bucket.