Comment puis-je autoriser un utilisateur à accéder à un dossier spécifique dans mon compartiment Amazon S3 ?

Lecture de 6 minute(s)
0

Je souhaite limiter l'accès d'un utilisateur Gestion des identités et des accès AWS (AWS IAM) à certains dossiers spécifiques dans Amazon Simple Storage Service (Amazon S3).

Résolution

Si l'utilisateur et le compartiment appartiennent au même compte AWS, vous pouvez utiliser une politique IAM pour autoriser l'utilisateur à accéder à un dossier du compartiment. Si l'accès est autorisé par la politique IAM, vous n'avez pas besoin de mettre à jour la politique du compartiment.

Remarque : si la politique du compartiment Amazon S3 refuse explicitement à l'utilisateur IAM d'accéder au dossier, vous devez la mettre à jour.

Si l'utilisateur IAM et le compartiment S3 appartiennent à des comptes AWS différents, vous devez accorder l'accès à la fois dans la politique IAM et dans la politique du compartiment. Pour en savoir plus, reportez-vous à Comment puis-je autoriser un utilisateur appartenant à un autre compte AWS à charger des objets dans mon compartiment Amazon S3 ?

Politique relative aux utilisateurs uniques

L'exemple de politique IAM suivant accorde à un utilisateur nommé David un accès complet à son propre dossier uniquement (/home/David).

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowStatement1",
      "Action": [
        "s3:ListAllMyBuckets",
        "s3:GetBucketLocation"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::*"
      ]
    },
    {
      "Sid": "AllowStatement2A",
      "Action": [
        "s3:ListBucket"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::DOC-EXAMPLE-BUCKET"
      ],
      "Condition": {
        "StringEquals": {
          "s3:prefix": [
            "",
            "home/",
            "home/David"
          ],
          "s3:delimiter": [
            "/"
          ]
        }
      }
    },
    {
      "Sid": "AllowStatement3",
      "Action": [
        "s3:ListBucket"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::DOC-EXAMPLE-BUCKET"
      ],
      "Condition": {
        "StringLike": {
          "s3:prefix": [
            "home/David/*"
          ]
        }
      }
    },
    {
      "Sid": "AllowStatement4A",
      "Effect": "Allow",
      "Action": [
        "s3:*"
      ],
      "Resource": [
        "arn:aws:s3:::DOC-EXAMPLE-BUCKET/home/David/*"
      ]
    }
  ]
}

La politique inclut les déclarations suivantes :

  • AllowStatement1 : permet à l'utilisateur de répertorier les compartiments qui appartiennent à son compte AWS. Cette autorisation permet à l'utilisateur d'accéder au compartiment dans la console.
  • AllowStatement2A : permet à l'utilisateur de répertorier les dossiers dans DOC-EXAMPLE-BUCKET. Cette autorisation permet à l'utilisateur d'accéder au dossier dans la console.
  • AllowStatement3 : permet à l'utilisateur de répertorier le contenu du dossier DOC-EXAMPLE-BUCKET/home/David.
  • AllowStatement4A : autorise toutes les actions, telles que les autorisations de lecture, d'écriture et de suppression, uniquement dans le dossier DOC-EXAMPLE-BUCKET/home/David.

Politique relative aux utilisateurs multiples

Il peut arriver que vous ne connaissiez pas le nom exact de la ressource au moment de rédiger la politique. Supposons par exemple que vous souhaitiez autoriser chaque utilisateur à disposer de ses propres objets dans un compartiment Amazon S3. Au lieu de créer des politiques individuelles pour chaque utilisateur, vous pouvez utiliser des variables de politique pour créer une politique de groupe qui s'applique à plusieurs utilisateurs. Les variables de politique vous permettent de spécifier des espaces réservés dans une politique. Lorsque vous envoyez une demande à AWS, une valeur issue de la demande remplace alors l'espace réservé lors de l'évaluation de la politique.

L'exemple suivant montre une politique pour un compartiment Amazon S3 qui utilise la variable de politique ${aws:username} :

Remarque : cet article utilise la clé aws:username et renvoie le nom convivial de l'utilisateur, tel que « Adele » ou « David ». Cette valeur est obtenue à partir du nom d'utilisateur fourni lors de la création de l'utilisateur IAM. Dans certains cas, il est préférable d'utiliser une valeur globale unique respective. Par exemple, lorsque vous utilisez un rôle IAM, il se peut que la valeur de aws:username ne soit pas valide pour cette entité IAM. Pour en savoir plus, reportez-vous à Valeurs de la clé du principal.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowGroupToSeeBucketListInTheConsole",
      "Action": [
        "s3:ListAllMyBuckets",
        "s3:GetBucketLocation"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::*"
      ]
    },
    {
      "Sid": "AllowRootAndHomeListingOfCompanyBucket",
      "Action": [
        "s3:ListBucket"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::DOC-EXAMPLE-BUCKET"
      ],
      "Condition": {
        "StringEquals": {
          "s3:prefix": [
            "",
            "home/"
          ],
          "s3:delimiter": [
            "/"
          ]
        }
      }
    },
    {
      "Sid": "AllowListingOfUserFolder",
      "Action": [
        "s3:ListBucket"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::DOC-EXAMPLE-BUCKET"
      ],
      "Condition": {
        "StringLike": {
          "s3:prefix": [
            "home/${aws:username}/*",
            "home/${aws:username}"
          ]
        }
      }
    },
    {
      "Sid": "AllowAllS3ActionsInUserFolder",
      "Action": [
        "s3:*"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::DOC-EXAMPLE-BUCKET/home/${aws:username}/*"
      ]
    }
  ]
}

Dans cette politique, lorsqu'un utilisateur adresse une demande à AWS, le nom du demandeur remplace la variable. Par exemple, si David envoie une demande, ${aws:username} est remplacé par David.

Remarque : l'utilisateur IAM peut répertorier tous les préfixes au niveau parent, par exemple DOC-EXAMPLE-BUCKET/. Les utilisateurs peuvent accéder à leur répertoire personnel dans n'importe quel client d'interface utilisateur graphique. Si vous ne fournissez pas l'action de liste au niveau parent, vous devez utiliser une interface de ligne de commande pour accéder directement au dossier spécifique.

Limiter l'accès en fonction du principal de l'utilisateur IAM Identity Center

Vous pouvez contrôler l'accès à un dossier du compartiment S3 en fonction du principal de l'utilisateur AWS IAM Identity Center (successeur d'AWS Single Sign-On). Chaque utilisateur du répertoire IAM Identity Center a un ID d'utilisateur unique. Utilisez la variable de politique ${identitystore:UserId} pour chaque utilisateur dont vous souhaitez limiter l'accès au dossier. Remarque : lorsque vous créez le dossier S3, assurez-vous que le nom du dossier correspond à l'ID d'utilisateur dans le répertoire IAM Identity Center.

Supposons, par exemple, qu'un utilisateur (« John ») du répertoire IAM Identity Center a l'ID d'utilisateur unique correspondant 1111111111-2a2aaa222-bb33-4444-5555-5cc5555c555c. Pour gérer cet utilisateur, créez un dossier destiné à John dans le compartiment S3 avec le nom /home/1111111111-2a2aaa222-bb33-4444-5555-5cc5555c555c. Pour trouver les ID de vos utilisateurs, accédez à chaque utilisateur dans la console IAM Identity Center ou utilisez l'API DescribeUser. L'exemple de politique IAM suivant utilise la variable ${identitystore:UserId} :

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowGroupToSeeBucketListInTheConsole",
      "Action": [
        "s3:ListAllMyBuckets",
        "s3:GetBucketLocation"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::*"
      ]
    },
    {
      "Sid": "AllowRootAndHomeListingOfCompanyBucket",
      "Action": [
        "s3:ListBucket"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::DOC-EXAMPLE-BUCKET"
      ],
      "Condition": {
        "StringEquals": {
          "s3:prefix": [
            "",
            "home/"
          ],
          "s3:delimiter": [
            "/"
          ]
        }
      }
    },
    {
      "Sid": "AllowListingOfUserFolder",
      "Action": [
        "s3:ListBucket"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::DOC-EXAMPLE-BUCKET"
      ],
      "Condition": {
        "StringLike": {
          "s3:prefix": [
            "home/${identitystore:UserId}/*",
            "home/${identitystore:UserId}"
          ]
        }
      }
    },
    {
      "Sid": "AllowAllS3ActionsInUserFolder",
      "Effect": "Allow",
      "Action": [
        "s3:*"
      ],
      "Resource": [
        "arn:aws:s3:::DOC-EXAMPLE-BUCKET/home/${identitystore:UserId}/*"
      ]
    }
  ]
}

Informations connexes

Générateur de politiques AWS

Contrôle de l'accès à un compartiment à l'aide de politiques utilisateur

Exemples de clés de condition Amazon S3

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 7 mois