Comment fournir un accès précis aux fonctions Lambda ?

Date de la dernière mise à jour : 14/08/2020

Je souhaite accorder un droit d'accès en lecture et en écriture à une fonction AWS Lambda spécifique identifiée par son Amazon Resource Name (ARN). Comment fournir un accès précis aux fonctions Lambda ?

Brève description

Vous pouvez définir les autorisations des fonctions Lambda à l’aide des stratégies AWS Identity and Access Management (IAM) afin d’effectuer les actions suivantes :

  • Créer une fonction Lambda
  • Supprimer une fonction Lambda
  • Afficher les détails de la configuration d’une fonction Lambda
  • Modifier une fonction Lambda
  • Invoquer une fonction Lambda
  • Surveiller une fonction Lambda

Dans les exemples de stratégies qui suivent, les actions d’API Lambda prenant en charge les autorisations au niveau des ressources sont limitées à une fonction Lambda spécifique répertoriée dans l’élément Ressource de chaque instruction. Un nom de fonction spécifique est utilisé dans l’élément Condition pour les actions d’API qui prennent en charge ces éléments.

Les actions d’API ne prenant pas en charge les autorisations au niveau de ressource exigent un caractère générique (« * ») dans l’élément Ressource, et ne peuvent pas appliquer de clés de condition spécifiques au service Lambda. Pour plus d’informations sur les actions, les ressources et les conditions IAM prises en charge par Lambda, consultez Actions, ressources et clés de condition pour AWS Lambda.

La valeur de l’élément Ressource de l’instruction utilise l'ARN pour identifier les ressources auxquelles l’instruction s'applique. Par exemple, lorsqu’il s’agit d’une action Invoke (Appeler), la ressource est une fonction ARN. IAM compare cet ARN à l’ARN de la fonction identifiée par les paramètres FunctionName et Qualifier d’une demande Invoke. Pour plus d'informations, consultez Versions des fonctions AWS Lambda.

Remarque : si vous utilisez plusieurs versions et alias, vous devez inclure « arn:aws:lambda:region:AccountID:function:function_name:* » dans l’élément de ressource.

Solution

Autorisations requises pour créer une fonction Lambda

Les autorisations lambda:CreateFunction et iam:PassRole sont nécessaires pour créer une fonction Lambda en utilisant l’interface de ligne de commande (CLI) AWS ou un kit SDK. Pour obtenir des exemples de stratégies, consultez Stratégies IAM basées sur l’identité pour AWS Lambda. La stratégie qui suit permet à le mandataire API de créer une fonction Lambda, de transmettre le rôle IAM en tant que rôle d’exécution Lambda de la fonction et de télécharger le code depuis votre machine locale :

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "PermissionToCreateFunction",
            "Effect": "Allow",
            "Action": [
                "lambda:CreateFunction"
            ],
            "Resource": [
                "arn:aws:lambda:region:AccountID:function:function_name"
            ]
        },
        {
            "Sid": "PermissionToPassARole",
            "Effect": "Allow",
            "Action": [
                "iam:PassRole"
            ],
            "Resource": "arn:aws:iam::AccountID:role/role_name"
        }
    ]
}

Remarque : mettez à jour la stratégie pour y inclure la région concernée, l’ID de compte, le nom de fonction, l’ARN, etc.

Si vous chargez le code depuis un compartiment Simple Storage Service (Amazon S3), ajoutez une stratégie similaire à stratégie IAM existante, afin d’octroyer les autorisations requises pour Amazon S3 :

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

Remarque : mettez à jour la stratégie pour inclure le compartiment S3 et les noms de fichier concernés.

Comme le code ne peut être fourni au moment de la création de la fonction dans la console Lambda, les autorisations d’API, telles que les actions d’API au niveau lecture et l'autorisation d’afficher et de mettre à jour la fonction, sont requises. Pour octroyer ces autorisations, ajoutez une stratégie comparable à celle qui suit :

{
    "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:UpdateFunctionCode"
            ],
            "Resource": [
                "arn:aws:lambda:region:AccountID:function:function_name"
            ]
        },
        {
            "Sid": "PermissionToListExistingRoles",
            "Effect": "Allow",
            "Action": [
                "iam:ListRoles"
            ],
            "Resource": "*"
        },
        {
            "Sid": "PermissionToPassARole",
            "Effect": "Allow",
            "Action": [
                "iam:PassRole"
            ],
            "Resource": "arn:aws:iam::AccountID:role/role_name"
        }
    ]
}

Remarque : mettez à jour la stratégie pour y inclure la région concernée, l’ID de compte, le nom de fonction, l’ARN, etc.

Pour créer un rôle IAM pendant la création de la fonction Lambda, ajoutez des autorisations IAM similaires à ce qui suit :

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

Autorisations requises pour supprimer une fonction Lambda

Pour supprimer une fonction Lambda à l’aide de l’interface de ligne de commande (CLI) AWS ou d’un kit SDK, ajoutez des autorisations similaires à ce qui suit :

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

Remarque : mettez à jour la stratégie pour y inclure la région concernée, l’ID de compte, le nom de fonction, l’ARN, etc.

Pour supprimer une fonction Lambda à l’aide de la console Lambda, ajoutez des autorisations d’accès en lecture comme suit :

{
    "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:region:AccountID:function:function_name"
            ]
        }
    ]
}

Remarque : mettez à jour la stratégie pour y inclure la région concernée, l’ID de compte, le nom de fonction, l’ARN, etc.

Autorisations requises pour l’affichage des détails de configuration d’une fonction Lambda

Pour autoriser un utilisateur à afficher les informations de configuration d’une fonction Lambda, ajoutez des autorisations similaires à ce qui suit :

Remarque : selon le niveau d’accès en lecture que vous souhaitez octroyer, il se peut que vous deviez accorder toutes les autorisations qui suivent, ou une partie de ces dernières lorsque vous utilisez l’interface de ligne de commande AWS ou un kit SDK.

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

Remarque : mettez à jour la stratégie pour y inclure la région concernée, l’ID de compte, le nom de fonction, l’ARN, etc.

Pour afficher les informations de configuration d’une fonction en utilisant la console Lambda, ajoutez des autorisations similaires à ce qui suit :

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

La console Lambda utilise les fonctions Lambda de balisage, ce qui vous permet de filtrer les fonctions Lambda en fonction des balises. Pour utiliser le service de balisage AWS, ajoutez des autorisations similaires à ce qui suit :

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

La console Lambda affiche des détails sur le rôle IAM associé à une fonction Lambda et les ressources auxquelles le rôle IAM de la fonction a accès. Pour afficher ces détails, ajouter des autorisations comme suit :

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

Remarque : en fonction de vos besoins et des services intégrés à votre fonction Lambda, il peut être nécessaire d’octroyer des autorisations supplémentaires pour d’autres services AWS. Pour plus d’informations, consultez Autorisations AWS Lambda.

Autorisations requises pour modifier une fonction Lambda

Pour autoriser un utilisateur à modifie rune fonction Lambda, ajoutez des autorisations similaires à ce qui suit :

Remarque : selon le niveau d’accès en écriture que vous souhaitez octroyer, il se peut que vous deviez accorder toutes les autorisations qui suivent, ou une partie de ces dernières lorsque vous utilisez l’interface de ligne de commande AWS ou un kit SDK.

{
    "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"
            ],
            "Resource": "arn:aws:lambda:region:AccountID:function:function_name"
        },
        {
            "Sid": "ActionsWhichSupportCondition",
            "Effect": "Allow",
            "Action": [
                "lambda:CreateEventSourceMapping",
                "lambda:UpdateEventSourceMapping",
                "lambda:DeleteEventSourceMapping"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "lambda:FunctionArn": "arn:aws:lambda:region:AccountID:function:function_name"
                }
            }
        },
        {
            "Sid": "ActionsWhichDoNotSupportResourceLevelPermissions",
            "Effect": "Allow",
            "Action": [
                "lambda:UntagResource",
                "lambda:TagResource"
            ],
            "Resource": "*"
        }
    ]
}

Remarque : mettez à jour la stratégie pour y inclure la région concernée, l’ID de compte, le nom de fonction, l’ARN, etc.

Vous pouvez encore restreindre l’accès en utilisant lambda:AddPermission et lambda:RemovePermission à un mandataire inclus dans une stratégie transmise. Vous pouvez également limiter lambda:UpdateEventSourceMapping et lambda:DeleteEventSourceMapping à un mappage de source d’événement. Pour plus d’informations, consultez Stratégies IAM basées sur l’identité pour AWS Lambda.

Pour spécifier une clé AWS Key Management Service (AWS KMS) gérée par le client pour chiffrer les variables d’environnement, ajoutez des autorisations KMS en utilisant un extrait de stratégie IAM comme suit :

...
{
    "Sid": "PermissionsForCryptoOperations",
    "Effect": "Allow",
    "Action": [
        "kms:Encrypt",
        "kms:Decrypt",
        "kms:CreateGrant"
    ],
    "Resource": "arn:aws:kms:region:AccountID:key/keyID"
},
{
    "Sid": "PermissionsToListExistingKeys",
    "Effect": "Allow",
    "Action": [
        "kms:ListKeys",
        "kms:ListAliases"
    ],
    "Resource": "*"
}
...

Remarque : mettez à jour la stratégie pour y inclure la région concernée, l’ID de compte, le nom de fonction, l’ARN, etc.

Pour modifier les configurations d'une fonction Lambda à l'aide de la console Lambda, ajoutez des autorisations comme suit :

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

Autorisations requises pour invoquer une fonction Lambda

Pour appeler manuellement une fonction Lambda à des fins de test à l’aide de l’interface de ligne de commande (CLI) AWS ou un kit SDK, ajoutez des autorisations similaires à ce qui suit :

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

Remarque : mettez à jour la stratégie pour y inclure la région concernée, l’ID de compte, le nom de fonction, l’ARN, etc.

Pour répertorier les fonctions Lambda à l’aide de la console Lambda, ajoutez des autorisations similaires à ce qui suit :

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

Pour permettre à d’autres services d’appeler un fonction Lambda, utilisez des stratégies basées sur les ressources pour AWS Lambda. Vous pouvez également utiliser des stratégies de fonction pour fournir un accès entre comptes aux fonctions Lambda. L’exemple de stratégie suivant peut être utilisé pour autoriser un utilisateur provenant d’un autre compte AWS à invoquer manuellement une fonction Lambda :

{
    "Version": "2012-10-17",
    "Id": "default",
    "Statement": [
        {
            "Sid": "PermissionToInvoke",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::ExternalAccountID:user/username"
            },
            "Action": "lambda:InvokeFunction",
            "Resource": "arn:aws:lambda:region:AccountID:function:function_name"
        }
    ]
}

Remarque : mettez à jour la stratégie pour y inclure la région concernée, l’ID de compte, le nom de fonction, l’ARN, etc.

Autorisations requises pour surveiller les fonctions Lambda

Pour afficher les métriques Amazon CloudWatch dans la vue Monitoring (Surveillance) de la console Lambda, ajoutez des autorisations similaires à ce qui suit :

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

Pour octroyer des autorisations à des métriques CloudWatch spécifiques et à CloudWatch Logs Insights, consultez Référence des autorisations d’Amazon CloudWatch et Référence des autorisations CloudWatch Logs.


Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?