Mon compartiment Amazon S3 dispose d'un chiffrement par défaut utilisant une clé AWS KMS personnalisée. Comment puis-je permettre aux utilisateurs de télécharger et de charger vers le compartiment ?

Date de la dernière mise à jour : 20/10/2020

J'ai configuré mon compartiment Amazon Simple Storage Service (Amazon S3) pour utiliser le chiffrement par défaut avec une clé AWS Key Management Service (AWS KMS) personnalisée. Je veux qu'un utilisateur d'AWS Identity and Access Management (IAM) puisse télécharger depuis et charger vers le compartiment. Comment dois-je procéder ?

Résolution

L'utilisateur IAM et la clé AWS KMS appartiennent au même compte AWS.

1.    Ouvrez la console AWS KMS, puis affichez le document de stratégie de la clé à l'aide de l'affichage des stratégies. Modifiez la stratégie de clé pour accorder à l'utilisateur IAM des autorisations pour les actions kms:Encrypt, kms:GenerateDataKey et kms:Decrypt au minimum. Vous pouvez utiliser une stratégie similaire à la suivante :

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "ExampleStmt",
      "Action": [
        "kms:Decrypt",
        "kms:Encrypt",
        "kms:GenerateDataKey"
      ],
      "Effect": "Allow",
      "Principal": [
        "AWS": "arn:aws:iam::111122223333:user/Jane"
      ],
      "Resource": "*"
    }
  ]
}

Remarque : cet exemple de stratégie inclut uniquement les autorisations minimales requises pour qu'un utilisateur IAM individuel puisse faire un chargement et un téléchargement dans un compartiment S3 chiffré. Vous pouvez modifier ou développer les autorisations en fonction de votre cas d'utilisation. 

2.    Ouvrez la console IAM. Ajoutez une stratégie à l'utilisateur IAM qui accorde les autorisations de chargement et de téléchargement à partir du compartiment. Vous pouvez utiliser une stratégie similaire à la suivante :

Remarque : pour la valeur Ressource saisissez l'Amazon Resource Name (ARN) du compartiment avec un caractère générique pour indiquer les objets du compartiment.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "ExampleStmt",
      "Action": [
        "s3:GetObject",
        "s3:PutObject"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
    }
  ]
}

Important : les autorisations S3 accordées par la stratégie utilisateur IAM peuvent être bloquées par une instruction de refus explicite dans la stratégie de compartiment. Veillez à vérifier la stratégie de compartiment pour confirmer qu'il n'existe aucune instruction de refus explicite qui soit en conflit avec la stratégie d'utilisateur IAM.

L'utilisateur IAM se trouve dans un autre compte que la clé AWS KMS et le compartiment S3.

Important : vous pouvez accorder un accès entre comptes à une clé AWS KMS gérée par le client, mais pas à une clé AWS KMS gérée par AWS. La stratégie de clé d'une clé AWS KMS gérée par AWS ne peut pas être modifiée. 

1.    Ouvrez la console AWS KMS, puis affichez le document de stratégie de clé à l'aide de l'affichage des stratégies. Modifiez la stratégie de la clé pour accorder à l'utilisateur IAM des autorisations pour les actions kms:Encrypt, kms:GenerateDataKey et kms:Decypt au minimum. Vous pouvez utiliser une stratégie similaire à la suivante :

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "ExampleStmt",
      "Action": [
        "kms:Decrypt",
        "kms:Encrypt",
        "kms:GenerateDataKey"
      ],
      "Effect": "Allow",
      "Principal": [
        "AWS": "arn:aws:iam::111122223333:user/Jane"
      ],
      "Resource": "*"
    }
  ]
}

Remarque : cet exemple de stratégie inclut uniquement les autorisations minimales requises pour qu'un utilisateur IAM individuel puisse faire un chargement et un téléchargement dans un compartiment S3 chiffré. Vous pouvez modifier ou développer les autorisations en fonction de votre cas d'utilisation.

2.    Ouvrez la console IAM à partir du compte auquel appartient l'utilisateur IAM. Ajoutez une stratégie à l'utilisateur IAM qui accorde les autorisations nécessaires pour effectuer des chargements et téléchargements à partir du compartiment, ainsi que pour utiliser la clé AWS KMS associée au compartiment.

Pour les scénarios entre comptes, pensez à accorder des autorisations s3:PutObjectAcl afin que l'utilisateur IAM puisse télécharger un objet, puis accordez au compte du compartiment le contrôle total de l'objet (bucket-owner-full-control). Envisagez également d'accorder les autorisations s3:ListBucket requises pour exécuter une opération de synchronisation ou de copie récursive. Vous pouvez utiliser une stratégie similaire à la suivante :

Remarque : pour la première valeur de Ressource entrez l'ARN du compartiment avec un caractère générique pour indiquer les objets du compartiment. Pour la deuxième valeur Resource, saisissez l'ARN du compartiment. Pour la troisième valeur Ressource, saisissez l'ARN de la clé AWS KMS.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "DownloadandUpload",
      "Action": [
        "s3:GetObject",
        "s3:GetObjectVersion",
        "s3:PutObject",
        "s3:PutObjectAcl"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
    },
    {
      "Sid": "ListBucket",
      "Action": [
        "s3:ListBucket"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET"
    },
    {
      "Sid": "KMSAccess",
      "Action": [
        "kms:Decrypt",
        "kms:Encrypt",
        "kms:GenerateDataKey"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:kms:example-region-1:123456789098:key/111aa2bb-333c-4d44-5555-a111bb2c33dd"
    }
  ]
}

3.    Ouvrez la console Amazon S3 à partir du compte propriétaire du compartiment S3. Mettez à jour la stratégie de compartiment pour accorder à l'utilisateur IAM l'accès au compartiment. Vous pouvez utiliser une stratégie similaire à la suivante :

Remarque : pour les valeurs Principal, saisissez l'ARN de l'utilisateur IAM. Pour la première valeur Ressource, saisissez l'ARN du compartiment avec un caractère générique pour indiquer les objets du compartiment. Pour la deuxième valeur Resource, saisissez l'ARN du compartiment.

{
  "Id": "Policy1584399307003",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "DownloadandUpload",
      "Action": [
        "s3:GetObject",
        "s3:GetObjectVersion",
        "s3:PutObject",
        "s3:PutObjectAcl"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*",
      "Principal": {
        "AWS": [
          "arn:aws:iam::111122223333:user/Jane"
        ]
      }
    },
    {
      "Sid": "ListBucket",
      "Action": [
        "s3:ListBucket"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET",
      "Principal": {
        "AWS": [
          "arn:aws:iam::111122223333:user/Jane"
        ]
      }
    }
  ]
}