Mon compartiment Amazon S3 dispose du chiffrement par défaut grâce à une clé AWS KMS personnalisée. Comment puis-je permettre aux utilisateurs d'effectuer des téléchargements et des chargements vers le compartiment ?

Date de la dernière mise à jour : 27/03/2020

J'ai configuré mon compartiment Amazon Simple Storage Service (Amazon S3) afin qu'il utilise le chiffrement par défaut grâce à une clé AWS Key Management Service (AWS KMS) personnalisée. Je souhaite que des utilisateurs AWS Identity and Access Management (IAM) puissent effectuer des téléchargements et des chargements dans le compartiment. Comment procéder ?

Solution

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

Tout d'abord, ouvrez la console AWS KMS et procédez comme suit :

  1. Dans le volet de navigation, sélectionnez Clés gérées par le client.
  2. Dans la liste des clés, ouvrez la clé associée à votre compartiment.
  3. Sous Utilisateurs de clé, sélectionnez Ajouter.
  4. Dans la liste des utilisateurs et rôles IAM, sélectionnez l'utilisateur IAM.
  5. Sélectionnez Ajouter.

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 celle-ci :

Remarque : pour la valeur Resource, 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": "ExampleStmt1",
      "Action": [
        "s3:GetObject",
        "s3:PutObject"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::awsexamplebucket/*"
    }
  ]
}

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.

Tout d'abord, ouvrez la console AWS KMS à partir du compte qui dispose de la clé AWS KMS et du compartiment S3. Procédez comme suit :

  1. Dans le volet de navigation, sélectionnez Clés gérées par le client.
  2. Dans la liste des clés, ouvrez la clé associée à votre compartiment.
  3. Sous Autres comptes AWS, sélectionnez Ajouter d'autres comptes AWS.
  4. Dans la zone de texte, saisissez l'ID du compte AWS de l'utilisateur IAM.
  5. Sélectionnez Enregistrer les modifications.

Ouvrez ensuite la console IAM à partir du compte auquel l'utilisateur IAM appartient. 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, envisagez d'accorder des autorisations s3:PutObjectAcl afin que l'utilisateur IAM puisse 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 celle-ci :

Remarque : pour la première valeur Resource, 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. Pour la troisième valeur Resource, 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:::awsexamplebucket/*"
    },
    {
      "Sid": "ListBucket",
      "Action": [
        "s3:ListBucket"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::awsexamplebucket"
    },
    {
      "Sid": "KMSAccess",
      "Action": [
        "kms:Decrypt",
        "kms:DescribeKey",
        "kms:Encrypt",
        "kms:GenerateDataKey*",
        "kms:ReEncrypt*"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:kms:example-region-1:123456789098:key/111aa2bb-333c-4d44-5555-a111bb2c33dd"
    }
  ]
}

Enfin, ouvrez la console Amazon S3 à partir du compte qui possède le 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 celle-ci :

Remarque : pour les valeurs Principal, saisissez l'ARN de l'utilisateur IAM. Pour la première valeur Resource, 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:::awsexamplebucket/*",
      "Principal": {
        "AWS": [
          "arn:aws:iam::123exampleaccountID:user/Jane"
        ]
      }
    },
    {
      "Sid": "ListBucket",
      "Action": [
        "s3:ListBucket"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::awsexamplebucket",
      "Principal": {
        "AWS": [
          "arn:aws:iam::123exampleaccountID:user/Jane"
        ]
      }
    }
  ]
}