En utilisant AWS re:Post, vous acceptez les AWS re:Post Conditions d’utilisation

Comment fournir un accès granulaire aux fonctions Lambda ?

Lecture de 8 minute(s)
0

Je souhaite accorder des autorisations de lecture et d'écriture pour une fonction AWS Lambda spécifique à un utilisateur d'AWS Identity and Access Management (IAM).

Résolution

Utilisez les stratégies IAM pour configurer les autorisations permettant aux utilisateurs IAM de créer, de supprimer, de modifier, d'invoquer et de surveiller des fonctions Lambda, et d'afficher la configuration d'une fonction Lambda.

Les exemples de stratégies suivants limitent les actions d'API Lambda qui prennent en charge les autorisations au niveau des ressources à une fonction Lambda spécifique répertoriée dans l'élément Ressource. Vous pouvez utiliser l'élément Condition dans les actions d'API pour identifier la fonction Lambda dans la stratégie IAM.

Pour les actions d'API qui ne prennent pas en charge les autorisations au niveau des ressources, vous devez utiliser un caractère générique (*) dans l’élément Ressource. Vous ne pouvez pas appliquer de clés de condition spécifiques à Lambda. Pour en savoir plus, consultez la page Actions, ressources et clés de condition pour AWS Lambda.

L'élément Ressource utilise un ARN pour identifier les ressources auxquelles s'applique l'instruction. Par exemple, lorsque l’Action est Invoquer, la valeur de Ressource est un ARN de fonction. IAM compare l'ARN à l'ARN de la fonction dans les paramètres FunctionName et Qualificateur de la requête Invoquer. Pour plus d'informations sur les ARN dans les différentes versions de Lambda, consultez la section Utilisation des versions.

Si vous utilisez plusieurs versions de Lambda, il n'est pas nécessaire d'ajouter chaque ARN Lambda. Incluez plutôt le caractère générique (*) dans l'élément Ressources :

arn:aws:lambda:AWS_REGION:AWS_ACCOUNT_ID:function:LAMBDA_FUNCTION_NAME:*

Remarque : Remplacez AWS_REGION:AWS_ACCOUNT_ID par votre ARN Lambda et LAMBDA_FUNCTION_NAME par le nom de la fonction Lambda.

Dans les exemples de stratégies IAM suivants, remplacez les valeurs suivantes :

  • AWS_ACCOUNT_ID par votre ID de compte AWS
  • LAMBDA_FUNCTION_NAME par le nom de votre fonction Lambda
  • IAM_USER_NAME par l'utilisateur IAM auquel vous fournissez un accès Lambda
  • AWS_REGION par votre région AWS
  • KEY_ID par votre clé AWS Key Management Service (AWS KMS)
  • IAM_ROLE_NAME par votre rôle IAM
  • S3_BUCKET_NAME par le nom de votre compartiment Amazon Simple Storage Service (Amazon S3)

Autorisations pour créer une fonction Lambda

Remarque : Si des erreurs surviennent lorsque vous exécutez des commandes de l'interface de la ligne de commande AWS (AWS CLI), consultez la section Résoudre des erreurs liées à l’AWS CLI. Vérifiez également que vous utilisez bien la version la plus récente de l’AWS CLI.

Pour utiliser l'AWS CLI ou la console Lambda afin de créer une fonction Lambda, vous devez disposer des autorisations lambda:CreateFunction et iam:PassRole. Pour obtenir des exemples de stratégies, consultez la section Stratégies IAM basées sur l'identité pour Lambda.

La stratégie suivante permet à l'appelant d'API de créer une fonction Lambda et de transmettre le rôle IAM comme rôle d'exécution Lambda pour la fonction :

{  "Version": "2012-10-17",  "Statement": [
    {
      "Sid": "PermissionToCreateFunction",
      "Effect": "Allow",
      "Action": [
        "lambda:CreateFunction"
      ],
      "Resource": [
        "arn:aws:lambda:AWS_REGION:AWS_ACCOUNT_ID:function:LAMBDA_FUNCTION_NAME"
      ]
    },
    {
      "Sid": "PermissionToPassARole",
      "Effect": "Allow",
      "Action": [
        "iam:PassRole"
      ],
      "Resource": "arn:aws:iam::AWS_ACCOUNT_ID:role/IAM_ROLE_NAME"
    }
  ]
}

Si vous stockez le code de la fonction Lambda dans un compartiment S3, ajoutez une stratégie pour accorder des autorisations Amazon S3 à la stratégie IAM.

Exemple de stratégie :

{  "Sid": "PermissionToUploadCodeFromS3",
  "Effect": "Allow",
  "Action": "s3:GetObject",
  "Resource": "arn:aws:s3:::S3_BUCKET_NAME/FileName.zip"
}

Remarque : Remplacez FileName.zip par le fichier .zip de votre code de fonction Lambda.

Pour afficher et mettre à jour la fonction, vous devez ajouter des actions d'API en lecture et des autorisations.

Exemple de stratégie :

{  "Version": "2012-10-17",  "Statement": [
    {
      "Sid": "PermissionsToViewFunctionsInConsole",
      "Effect": "Allow",
      "Action": [
        "lambda:ListFunctions",
        "lambda:GetAccountSettings"
      ],
      "Resource": "*"
    },
    {
      "Sid": "PermissionsToCreateAndUpdateFunction",
      "Effect": "Allow",
      "Action": [
        "lambda:CreateFunction",
        "lambda:GetFunction",
        "lambda:ListTags"
        "lambda:UpdateFunctionCode"
      ],
      "Resource": [
        "arn:aws:lambda:AWS_REGION:AWS_ACCOUNT_ID:function:LAMBDA_FUNCTION_NAME"
      ]
    },
    {
      "Sid": "PermissionToListExistingRoles",
      "Effect": "Allow",
      "Action": [
        "iam:ListRoles"
      ],
      "Resource": "*"
    },
    {
      "Sid": "PermissionToPassARole",
      "Effect": "Allow",
      "Action": [
        "iam:PassRole"
      ],
      "Resource": "arn:aws:iam::AWS_ACCOUNT_ID:role/IAM_ROLE_NAME"
    }
  ]
}

Pour créer un rôle IAM pendant le processus de création de la fonction Lambda, ajoutez les autorisations IAM suivantes :

{  "Sid": "PermmissionsToCreateAndUpdateARole",
  "Effect": "Allow",
  "Action": [
    "iam:CreateRole",
    "iam:CreatePolicy",
    "iam:PutRolePolicy",
    "iam:AttachRolePolicy"
  ],
  "Resource": "*"
}

Autorisations pour supprimer une fonction Lambda

Pour supprimer une fonction Lambda, ajoutez les autorisations suivantes à la stratégie IAM :

{  "Version": "2012-10-17",  "Statement": [
    {
      "Sid": "PermissionToDeleteFunction",
      "Effect": "Allow",
      "Action": [
        "lambda:DeleteFunction"
      ],
      "Resource": [
        "arn:aws:lambda:AWS_REGION:AWS_ACCOUNT_ID:function:LAMBDA_FUNCTION_NAME"
      ]
    }
  ]
}

Pour utiliser la console Lambda afin de supprimer une fonction, ajoutez des autorisations d'accès en lecture Lambda à la stratégie IAM :

{  "Version": "2012-10-17",  "Statement": [
    {
      "Sid": "PermissionsToViewFunctionsInConsole",
      "Effect": "Allow",
      "Action": [
        "lambda:ListFunctions",
        "lambda:GetAccountSettings"
      ],
      "Resource": "*"
    },
    {
      "Sid": "PermissionToDeleteFunction",
      "Effect": "Allow",
      "Action": [
        "lambda:DeleteFunction"
      ],
      "Resource": [
        "arn:aws:lambda:AWS_REGION:AWS_ACCOUNT_ID:function:LAMBDA_FUNCTION_NAME"
      ]
    }
  ]
}

Autorisations pour afficher les détails de configuration d'une fonction Lambda

Pour permettre à un utilisateur de consulter les détails de configuration d'une fonction Lambda, ajoutez les autorisations suivantes à la stratégie IAM :

{  "Version": "2012-10-17",  "Statement": [
    {
      "Sid": "ActionsWhichSupportResourceLevelPermissions",
      "Effect": "Allow",
      "Action": [
        "lambda:GetFunction",
        "lambda:ListTags",
        "lambda:TagResource",
        "lambda:GetFunctionConfiguration",
        "lambda:GetPolicy",
        "lambda:GetAlias",
        "lambda:ListVersionsByFunction",
        "lambda:ListAliases"
      ],
      "Resource": [
        "arn:aws:lambda:AWS_REGION:AWS_ACCOUNT_ID:function:LAMBDA_FUNCTION_NAME"
      ]
    },
    {
      "Sid": "ActionsWhichDoNotSupportResourceLevelPermissions",
      "Effect": "Allow",
      "Action": [
        "lambda:ListTags",
        "lambda:GetEventSourceMapping",
        "lambda:ListEventSourceMappings"
      ],
      "Resource": "*"
    }
  ]
}

Remarque : Selon le niveau d'accès en lecture que vous souhaitez accorder, vous pouvez ajouter toutes les autorisations précédentes ou seulement certaines d'entre elles. Si vous utilisez des couches Lambda, vous pouvez également ajouter les autorisations lambda:GetLayerVersion ou lambda:ListLayerVersions.

Pour utiliser la console Lambda afin d'afficher les détails de configuration d'une fonction, ajoutez les autorisations suivantes à la stratégie IAM :

{  "Sid": "PermissionsToViewFunctionsInConsole",
  "Effect": "Allow",
  "Action": [
    "lambda:ListFunctions",
    "lambda:GetAccountSettings"
  ],
  "Resource": "*"
}

La console Lambda utilise des identifications sur les fonctions Lambda, ce qui vous permet de filtrer les fonctions Lambda par identification. Pour utiliser les identifications, ajoutez les autorisations suivantes à la stratégie IAM :

{  "Sid": "PermissionsToFilterFunctionsByTags",
  "Effect": "Allow",
  "Action": [
     "tag:GetResources"
  ],
  "Resource": "*"
}

La console Lambda affiche des informations sur le rôle IAM associé à une fonction Lambda et les ressources auxquelles le rôle de la fonction a accès. Pour afficher les détails, ajoutez les autorisations suivantes à la stratégie IAM :

{  "Sid": "PermissionsToViewRolesAndPolicies",
  "Effect": "Allow",
  "Action": [
    "iam:GetPolicy",
    "iam:GetPolicyVersion",
    "iam:GetRolePolicy",
    "iam:ListRoles",
    "iam:ListRolePolicies",
    "iam:ListAttachedRolePolicies"
  ],
  "Resource": "*"
}

Si vous avez des exigences supplémentaires, vous devrez peut-être accorder des autorisations supplémentaires à d'autres services AWS.

Autorisations pour modifier une fonction Lambda

Pour autoriser un utilisateur à modifier une fonction Lambda, ajoutez les autorisations suivantes à la stratégie IAM :

{  "Version": "2012-10-17",  "Statement": [
    {
      "Sid": "ActionsWhichSupportResourceLevelPermissions",
      "Effect": "Allow",
      "Action": [
        "lambda:AddPermission",
        "lambda:RemovePermission",
        "lambda:CreateAlias",
        "lambda:UpdateAlias",
        "lambda:DeleteAlias",
        "lambda:UpdateFunctionCode",
        "lambda:UpdateFunctionConfiguration",
        "lambda:PutFunctionConcurrency",
        "lambda:DeleteFunctionConcurrency",
        "lambda:PublishVersion",
        "lambda:UpdateFunctionEventInvokeConfig",
        "lambda:PutFunctionEventInvokeConfig"
      ],
      "Resource": "arn:aws:lambda:AWS_REGION:AWS_ACCOUNT_ID:function:LAMBDA_FUNCTION_NAME"
    },
    {
      "Sid": "ActionsWhichSupportCondition",
      "Effect": "Allow",
      "Action": [
        "lambda:CreateEventSourceMapping",
        "lambda:UpdateEventSourceMapping",
        "lambda:DeleteEventSourceMapping"
      ],
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "lambda:FunctionArn": "arn:aws:lambda:AWS_REGION:AWS_ACCOUNT_ID:function:LAMBDA_FUNCTION_NAME"
        }
      }
    },
    {
      "Sid": "ActionsWhichDoNotSupportResourceLevelPermissions",
      "Effect": "Allow",
      "Action": [
        "lambda:UntagResource",
        "lambda:TagResource"
      ],
      "Resource": "*"
    }
  ]
}

Remarque : Selon le niveau d'accès en écriture que vous souhaitez accorder, vous pouvez ajouter toutes les autorisations précédentes ou seulement certaines d'entre elles.

Pour restreindre l'accès, ajoutez lambda:AddPermission et lambda:RemovePermission à un principal inclus dans une stratégie attachée. Vous pouvez également limiter lambda:UpdateEventSourceMapping et lambda:DeleteEventSourceMapping à un mappage des sources d'événements spécifique.

Pour utiliser une clé gérée par le client afin de chiffrer les variables d'environnement, ajoutez les autorisations AWS KMS suivantes à la stratégie IAM :

{  "Sid": "PermissionsForCryptoOperations",
  "Effect": "Allow",
  "Action": [
    "kms:Encrypt",
    "kms:Decrypt",
    "kms:CreateGrant"
  ],
  "Resource": "arn:aws:kms:AWS_REGION:AWS_ACCOUNT_ID:key/KEY_ID"
},
{
  "Sid": "PermissionsToListExistingKeys",
  "Effect": "Allow",
  "Action": [
    "kms:ListKeys",
    "kms:ListAliases"
  ],
  "Resource": "*"
}

Pour utiliser la console Lambda afin de modifier les configurations d'une fonction Lambda, ajoutez les autorisations suivantes à la stratégie IAM :

{  "Sid": "PermissionsToViewFunctionsInConsole",
  "Effect": "Allow",
  "Action": [
    "lambda:ListFunctions",
    "lambda:GetAccountSettings"
  ],
  "Resource": "*"
}

Autorisations pour invoquer une fonction Lambda

Pour invoquer manuellement une fonction Lambda, ajoutez les autorisations suivantes à la stratégie IAM :

{  "Version": "2012-10-17",  "Statement": [
    {
      "Sid": "PermissionToInvoke",
      "Effect": "Allow",
      "Action": "lambda:InvokeFunction",
      "Resource": "arn:aws:lambda:AWS_REGION:AWS_ACCOUNT_ID:function:LAMBDA_FUNCTION_NAME"
    }
  ]
}

Pour utiliser la console Lambda afin de répertorier les fonctions Lambda, ajoutez les autorisations suivantes à la stratégie IAM :

{  "Sid": "PermissionsToViewFunctionsConfigInConsole",
  "Effect": "Allow",
  "Action": [
    "lambda:ListFunctions",
    "lambda:GetAccountSettings",
    "lambda:GetFunction",
    "lambda:ListTags"
  ],
  "Resource": "*"
}

Pour permettre à d'autres services d'invoquer une fonction Lambda, utilisez des stratégies basées sur les ressources pour Lambda. Vous pouvez également utiliser des stratégies de fonction pour fournir un accès intercompte aux fonctions Lambda.

L'exemple de stratégie suivant permet à un utilisateur d'un autre compte AWS d'invoquer manuellement une fonction Lambda :

{  "Version": "2012-10-17",  "Id": "default",
  "Statement": [
    {
      "Sid": "PermissionToInvoke",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::External_AWS_ACCOUNT_ID:user/IAM_USER_NAME"
      },
      "Action": "lambda:InvokeFunction",
      "Resource": "arn:aws:lambda:AWS_REGION:AWS_ACCOUNT_ID:function:LAMBDA_FUNCTION_NAME"
    }
  ]
}

Remarque : Remplacez External_AWS_ACCOUNT_ID par le compte que vous souhaitez autoriser à invoquer la fonction.

Autorisations pour surveiller les fonctions Lambda

Pour afficher les métriques Amazon CloudWatch dans l'onglet Surveillance de la console Lambda, ajoutez les autorisations suivantes à la stratégie IAM :

{  "Version": "2012-10-17",  "Statement": [
    {
      "Sid": "PermissionForCloudWatchMetrics",
       "Effect": "Allow",
       "Action": [
          "cloudwatch:GetMetricStatistics",
          "cloudwatch:GetMetricData"
        ],
        "Resource": "*"
     }
  ]
}

Pour accorder des autorisations à des métriques CloudWatch spécifiques et à Amazon CloudWatch Logs Insights, consultez les sections Référence des autorisations Amazon CloudWatch et Référence des autorisations CloudWatch Logs.