Mon compartiment Amazon S3 utilise un chiffrement par défaut avec une clé AWS KMS personnalisée. Comment autoriser des utilisateurs à télécharger depuis et charger vers le compartiment ?

Dernière mise à jour : 10/02/2021

J'ai configuré mon compartiment Amazon Simple Storage Service (Amazon S3) pour utiliser un 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 la clé pour accorder à l'utilisateur IAM des autorisations pour les actions kms:GenerateDataKey et kms:Decypt au minimum. Vous pouvez ajouter une instruction similaire à la suivante :

{
  "Sid": "ExampleStmt",
  "Action": [
    "kms:Decrypt",
    "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'aucune instruction de refus explicite n'est 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 pour une clé AWS KMS gérée par le client, mais pas pour 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 la 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:GenerateDataKey et kms:Decypt au minimum. Vous pouvez ajouter une instruction similaire à la suivante :

{
  "Sid": "ExampleStmt",
  "Action": [
    "kms:Decrypt",
    "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 de chargement et de téléchargement à partir du compartiment. La stratégie doit également fonctionner avec la clé AWS KMS qui est associée au compartiment.

Pour les scénarios entre comptes, envisagez d'accorder des autorisations s3:PutObjectAcl pour que l'utilisateur IAM puisse charger un objet. Accordez ensuite au compte du compartiment le contrôle total de l'objet (bucket-owner-full-control). Envisagez également d'accorder les autorisations s3:ListBucket qui sont 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 de 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: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 la stratégie de compartiment à jour pour accorder à l'utilisateur IAM l'accès au compartiment. Vous pouvez utiliser une stratégie similaire à la suivante :

Remarque : pour les valeurs de 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"
        ]
      }
    }
  ]
}