Comment accorder à mon rôle d'exécution Lambda l'accès à mon compartiment Amazon S3 ?

Dernière mise à jour : 11/06/2020

Je souhaite que ma fonction AWS Lambda puisse voir accès à mon compartiment Amazon Simple Storage Service (Amazon S3). Comment faire ?

Brève description

Procédez comme suit :

1.    Créez un rôle AWS Identity and Access Management (IAM) pour la fonction Lambda qui accorde également l'accès au compartiment S3.

2.    Définissez le rôle IAM en tant que rôle d'exécution de la fonction Lambda.

3.    Vérifiez que la stratégie de compartiment accorde l'accès au rôle d'exécution de la fonction Lambda.

Important : si le rôle IAM que vous créez pour la fonction Lambda se trouve dans le même compte AWS que le compartiment, vous n'avez pas besoin d'accorder d'autorisations Amazon S3 à la fois sur le rôle IAM et sur la stratégie de compartiment. À la place, vous pouvez accorder les autorisations sur le rôle IAM, puis vérifier que la stratégie de compartiment ne refuse pas explicitement l'accès au rôle de la fonction Lambda. Par exemple, la procédure suivante accorde à Amazon S3 des autorisations sur le rôle IAM. Si le rôle IAM et le compartiment se trouvent dans des comptes différents, vous devez accorder à Amazon S3 des autorisations à la fois sur le rôle IAM et sur la stratégie de compartiment.

Solution

Créer un rôle IAM (rôle d'exécution) pour la fonction Lambda qui accorde l'accès au compartiment S3

1.    Suivez les étapes de création d'un rôle d'exécution Lambda dans la console IAM.

2.    Dans la liste des rôles IAM, sélectionnez le rôle que vous venez de créer.

3.    Dans la vue Autorisations, sélectionnez Ajouter une stratégie en ligne.

4.    Sélectionnez l'onglet JSON.

5.    Saisissez une stratégie qui accorde l'accès à votre compartiment S3. Vous pouvez utiliser une stratégie similaire celle-ci :

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

6.    Sélectionnez Examiner une stratégie.

7.    Pour Nom, saisissez un nom pour votre stratégie.

8.    Choisissez Créer une stratégie.

Définir le rôle IAM en tant que rôle d'exécution de la fonction Lambda

1.    Ouvrez la console Lambda.

2.    Sélectionnez votre fonction Lambda.

3.    Sous Rôle d'exécution, pour Rôle existant, sélectionnez le rôle IAM que vous avez créé.

4.    Choisissez Enregistrer.

Vérifier que la stratégie de compartiment accorde l'accès au rôle d'exécution de la fonction Lambda

Si le rôle d'exécution (rôle IAM) de votre fonction Lambda se trouve dans le même compte AWS que le compartiment, vérifiez alors que la stratégie de compartiment ne refuse pas explicitement l'accès à la fonction Lambda ou à son rôle d'exécution. Tant que la stratégie de compartiment ne refuse pas explicitement l'accès, la fonction Lambda peut accéder au compartiment grâce aux autorisations accordées sur son rôle IAM.

Si le compartiment et le rôle d'exécution de votre fonction Lambda appartiennent à des comptes différents, vous devez ajouter une stratégie de compartiment qui autorise l'accès au compartiment lorsque la requête est émise par le rôle d'exécution. Pour cet accès inter-comptes, vous devez accorder au rôle d'exécution les autorisations sur Amazon S3 à la fois sur sa stratégie IAM et sur la stratégie de compartiment.

Vous pouvez utiliser une stratégie de compartiment similaire à la suivante :

{
  "Id": "ExamplePolicy",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "ExampleStmt",
      "Action": [
        "s3:GetObject"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::AWSDOC-EXAMPLE-BUCKET/*"
      ],
      "Principal": {
        "AWS": [
          "arn:aws:iam::123456789012:role/ExampleLambdaRoleFor123456789012"
        ]
      }
    }
  ]
}

Cette page vous a-t-elle été utile ?

Cette page peut-elle être améliorée ?


Vous avez besoin d'aide ?