Comment puis-je offrir un accès détaillé aux fonctions Lambda ?

Lecture de 10 minute(s)
0

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 puis-je offrir un accès détaillé à des 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 qui ne prennent pas en charge les autorisations au niveau des ressources exigent la présence d'un caractère générique (« * ») dans l’élément Resource, et ne peuvent pas appliquer de clés de condition spécifiques au service Lambda. Pour en savoir plus 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 Resource 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 à celui de la fonction identifiée par les paramètres FunctionName et Qualifier d’une demande Invoke. Pour en savoir plus, 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 resource.

Solution

Autorisations requises pour créer une fonction Lambda

Remarque : Si vous recevez des erreurs lors de l'exécution de commandes depuis l'interface de ligne de commande AWS CLI, vérifiez que vous utilisez la version la plus récente d'AWS CLI.

Les autorisations lambda:CreateFunction et iam:PassRole sont nécessaires pour créer une fonction Lambda à l'aide de l'interface de ligne de commande AWS CLI ou d'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 suivante permet à l’appelant de l'API de créer une fonction Lambda, de faire passer le rôle IAM en tant que rôle d'exécution Lambda pour la fonction, puis de charger le code à partir de 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 à partir d'un compartiment Amazon Simple Storage Service (Amazon S3), ajoutez une politique similaire à la politique IAM existante pour 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 politique 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 les chaînes lambda:AddPermission et lambda:RemovePermission à un principal inclus dans une politique transmise. Vous pouvez également limiter lambda:UpdateEventSourceMapping et lambda:DeleteEventSourceMapping à un mappage de source d'évènement. Pour en savoir plus, consultez Politiques IAM basées sur l'identité pour AWS Lambda.

Pour spécifier une clé AWS KMS (AWS Key Management Service) 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.


AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 3 ans