

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Voir les politiques IAM basées sur les ressources dans Lambda
<a name="access-control-resource-based"></a>

Lambda prend en charge les stratégies d’autorisations basées sur une ressource pour les fonctions et les couches Lambda. Vous pouvez utiliser des politiques basées sur les ressources pour accorder l’accès à d’autres [comptes](permissions-function-cross-account.md), [organisations](permissions-function-organization.md) ou [services AWS](permissions-function-services.md). Les stratégies basées sur les ressources s’appliquent à une seule fonction, version ou version de couche ou à un seul alias. 

------
#### [ Console ]

**Pour afficher la stratégie basée sur les ressources d’une fonction**

1. Ouvrez la [page Functions](https://console.aws.amazon.com/lambda/home#/functions) (Fonctions) de la console Lambda.

1. Choisissez une fonction.

1. Sélectionnez **Configuration** (Configuration), puis **Permissions** (Autorisations).

1. Faites défiler la page vers le bas, jusqu’à **Resource-based policy** (Stratégie basée sur les ressources), puis choisissez **View policy document** (Afficher le document de stratégie). La politique basée sur les ressources indique les autorisations appliquées lorsqu'un autre compte ou AWS service tente d'accéder à la fonction. L’exemple suivant montre une déclaration qui autorise Amazon S3 à invoquer une fonction nommée `my-function` pour un compartiment nommé `amzn-s3-demo-bucket` dans le compte `123456789012`.  
**Example politique basée sur les ressources**    
****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Id": "default",
       "Statement": [
           {
               "Sid": "lambda-allow-s3-my-function",
               "Effect": "Allow",
               "Principal": {
                 "Service": "s3.amazonaws.com"
               },
               "Action": "lambda:InvokeFunction",
               "Resource":  "arn:aws:lambda:us-east-2:123456789012:function:my-function",
               "Condition": {
                 "StringEquals": {
                   "AWS:SourceAccount": "123456789012"
                 },
                 "ArnLike": {
                   "AWS:SourceArn": "arn:aws:s3:::amzn-s3-demo-bucket"
                 }
               }
           }
        ]
   }
   ```

------
#### [ AWS CLI ]

Pour afficher une stratégie basée sur les ressources d’une fonction, utilisez la commande `get-policy`.

```
aws lambda get-policy \
  --function-name my-function \
  --output text
```

Vous devriez voir la sortie suivante:

****  

```
{"Version":"2012-10-17",		 	 	 "Id":"default","Statement":[{"Sid":"sns","Effect":"Allow","Principal":{"Service":"s3.amazonaws.com"},"Action":"lambda:InvokeFunction","Resource":"arn:aws:lambda:us-east-2:123456789012:function:my-function","Condition":{"ArnLike":{"AWS:SourceArn":"arn:aws:sns:us-east-2:123456789012:lambda*"}}}]}
```

Pour les versions et les alias, ajoutez le numéro de version ou l’alias au nom de la fonction.

```
aws lambda get-policy --function-name my-function:PROD
```

Pour supprimer les autorisations de votre fonction, utilisez `remove-permission`.

```
aws lambda remove-permission \
  --function-name example \
  --statement-id sns
```

Utilisez la commande `get-layer-version-policy` pour afficher les autorisations sur une couche.

```
aws lambda get-layer-version-policy \
  --layer-name my-layer \
  --version-number 3 \
  --output text
```

Vous devriez voir la sortie suivante:

```
b0cd9796-d4eb-4564-939f-de7fe0b42236    {"Sid":"engineering-org","Effect":"Allow","Principal":"*","Action":"lambda:GetLayerVersion","Resource":"arn:aws:lambda:us-west-2:123456789012:layer:my-layer:3","Condition":{"StringEquals":{"aws:PrincipalOrgID":"o-t194hfs8cz"}}}"
```

Utilisez `remove-layer-version-permission` pour supprimer des déclarations de la stratégie.

```
aws lambda remove-layer-version-permission --layer-name my-layer --version-number 3 --statement-id engineering-org
```

------

## Actions d’API prises en charge
<a name="permissions-resource-api"></a>

Les actions de l’API Lambda suivantes prennent en charge les politiques basées sur les ressources :
+ [CreateAlias](https://docs.aws.amazon.com/lambda/latest/api/API_CreateAlias.html)
+ [DeleteAlias](https://docs.aws.amazon.com/lambda/latest/api/API_DeleteAlias.html)
+ [DeleteFunction](https://docs.aws.amazon.com/lambda/latest/api/API_DeleteFunction.html)
+ [DeleteFunctionConcurrency](https://docs.aws.amazon.com/lambda/latest/api/API_DeleteFunctionConcurrency.html)
+ [DeleteFunctionEventInvokeConfig](https://docs.aws.amazon.com/lambda/latest/api/API_DeleteFunctionEventInvokeConfig.html)
+ [DeleteProvisionedConcurrencyConfig](https://docs.aws.amazon.com/lambda/latest/api/API_DeleteProvisionedConcurrencyConfig.html)
+ [GetAlias](https://docs.aws.amazon.com/lambda/latest/api/API_GetAlias.html)
+ [GetFunction](https://docs.aws.amazon.com/lambda/latest/api/API_GetFunction.html)
+ [GetFunctionConcurrency](https://docs.aws.amazon.com/lambda/latest/api/API_GetFunctionConcurrency.html)
+ [GetFunctionConfiguration](https://docs.aws.amazon.com/lambda/latest/api/API_GetFunctionConfiguration.html)
+ [GetFunctionEventInvokeConfig](https://docs.aws.amazon.com/lambda/latest/api/API_GetFunctionEventInvokeConfig.html)
+ [GetPolicy](https://docs.aws.amazon.com/lambda/latest/api/API_GetPolicy.html)
+ [GetProvisionedConcurrencyConfig](https://docs.aws.amazon.com/lambda/latest/api/API_GetProvisionedConcurrencyConfig.html)
+ [Invoke](https://docs.aws.amazon.com/lambda/latest/api/API_Invoke.html)
+ [InvokeFunctionUrl](urls-auth.md)(autorisation uniquement)
+ [ListAliases](https://docs.aws.amazon.com/lambda/latest/api/API_ListAliases.html)
+ [ListFunctionEventInvokeConfigs](https://docs.aws.amazon.com/lambda/latest/api/API_ListFunctionEventInvokeConfigs.html)
+ [ListProvisionedConcurrencyConfigs](https://docs.aws.amazon.com/lambda/latest/api/API_ListProvisionedConcurrencyConfigs.html)
+ [ListTags](https://docs.aws.amazon.com/lambda/latest/api/API_ListTags.html)
+ [ListVersionsByFunction](https://docs.aws.amazon.com/lambda/latest/api/API_ListVersionsByFunction.html)
+ [PublishVersion](https://docs.aws.amazon.com/lambda/latest/api/API_PublishVersion.html)
+ [PutFunctionConcurrency](https://docs.aws.amazon.com/lambda/latest/api/API_PutFunctionConcurrency.html)
+ [PutFunctionEventInvokeConfig](https://docs.aws.amazon.com/lambda/latest/api/API_PutFunctionEventInvokeConfig.html)
+ [PutProvisionedConcurrencyConfig](https://docs.aws.amazon.com/lambda/latest/api/API_PutProvisionedConcurrencyConfig.html)
+ [TagResource](https://docs.aws.amazon.com/lambda/latest/api/API_TagResource.html)
+ [UntagResource](https://docs.aws.amazon.com/lambda/latest/api/API_UntagResource.html)
+ [UpdateAlias](https://docs.aws.amazon.com/lambda/latest/api/API_UpdateAlias.html)
+ [UpdateFunctionCode](https://docs.aws.amazon.com/lambda/latest/api/API_UpdateFunctionCode.html)
+ [UpdateFunctionEventInvokeConfig](https://docs.aws.amazon.com/lambda/latest/api/API_UpdateFunctionEventInvokeConfig.html)

# Accorder l'accès à la fonction Lambda à Services AWS
<a name="permissions-function-services"></a>

Lorsque vous [utilisez un AWS service pour appeler votre fonction](lambda-services.md), vous accordez l'autorisation dans une déclaration relative à une politique basée sur les ressources. Vous pouvez appliquer la déclaration à l’ensemble de la fonction, ou limiter la déclaration à une seule version ou un seul alias.

**Note**  
Lorsque vous ajoutez un déclencheur à la fonction à l’aide de la console Lambda, celle-ci met à jour la stratégie basée sur une ressource de la fonction afin d’autoriser le service à l’invoquer. Pour accorder des autorisations à d’autres comptes ou services non disponibles dans la console Lambda, vous pouvez utiliser l’ AWS CLI.

Ajoutez une déclaration avec la commande [add-permission](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/add-permission.html). La déclaration de stratégie basée sur les ressources la plus simple autorise un service à invoquer une fonction. La commande ci-après accorde à Amazon Simple Notification Service l’autorisation d’invoquer une fonction nommée `my-function`.

```
aws lambda add-permission \
  --function-name my-function \
  --action lambda:InvokeFunction \
  --statement-id sns \
  --principal sns.amazonaws.com \
  --output text
```

Vous devriez voir la sortie suivante :

```
{"Sid":"sns","Effect":"Allow","Principal":{"Service":"sns.amazonaws.com"},"Action":"lambda:InvokeFunction","Resource":"arn:aws:lambda:us-east-2:123456789012:function:my-function"}
```

Amazon SNS peut ainsi appeler l’action d’[invocation](https://docs.aws.amazon.com/lambda/latest/api/API_Invoke.html) de l’API pour la fonction, mais ne restreint pas la rubrique Amazon SNS qui déclenche l’invocation. Afin de vous assurer que votre fonction est invoquée uniquement par une ressource spécifique, spécifiez l’ARN (Amazon Resource Name) de la ressource avec l’option `source-arn`. La commande ci-après autorise uniquement Amazon SNS à invoquer la fonction pour des abonnements à une rubrique nommée `my-topic`.

```
aws lambda add-permission \
  --function-name my-function \
  --action lambda:InvokeFunction \
  --statement-id sns-my-topic \
  --principal sns.amazonaws.com \
  --source-arn arn:aws:sns:us-east-2:123456789012:my-topic
```

Certains services peuvent invoquer des fonctions dans d’autres comptes. Cela ne pose pas de problème si vous spécifiez un ARN source qui contient votre ID de compte. Pour Amazon S3, cependant, la source est un compartiment dont l’ARN ne contient pas d’ID de compte. Il est possible que vous puissiez supprimer le compartiment et qu’un autre compte crée un compartiment du même nom. Utilisez l’option `source-account` avec votre ID de compte pour vous assurer que seules les ressources de votre compte peuvent invoquer la fonction.

```
aws lambda add-permission \
  --function-name my-function \
  --action lambda:InvokeFunction \
  --statement-id s3-account \
  --principal s3.amazonaws.com \
  --source-arn arn:aws:s3:::amzn-s3-demo-bucket \
  --source-account 123456789012
```

# Octroi de l’accès à la fonction à une organisation
<a name="permissions-function-organization"></a>

Pour accorder des autorisations à une organisation dans [AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html), spécifiez l’ID de l’organisation comme `principal-org-id`. La commande [ass-permission](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/add-permission.html) suivante accorde un accès d’invocation à tous les utilisateurs de l’organisation `o-a1b2c3d4e5f`.

```
aws lambda add-permission \
  --function-name example \
  --statement-id PrincipalOrgIDExample \
  --action lambda:InvokeFunction \
  --principal * \
  --principal-org-id o-a1b2c3d4e5f
```

**Note**  
Dans cette commande, `Principal` est `*`. Cela signifie que tous les utilisateurs de l’organisation `o-a1b2c3d4e5f` obtiennent des autorisations d’invocation de fonction. Si vous spécifiez un rôle Compte AWS ou comme étant le`Principal`, seul ce principal obtient les autorisations d'invocation des fonctions, mais uniquement s'il fait également partie de l'`o-a1b2c3d4e5f`organisation.

Cette commande crée une politique basée sur les ressources qui ressemble à ce qui suit :

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "PrincipalOrgIDExample",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "lambda:InvokeFunction",
            "Resource": "arn:aws:lambda:us-east-2:123456789012:function:example",
            "Condition": {
                "StringEquals": {
                    "aws:PrincipalOrgID": "o-a1b2c3d4e5f"
                }
            }
        }
    ]
}
```

------

Pour plus d'informations, consultez [aws : PrincipalOrg ID](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-principalorgid) dans le *guide de l'utilisateur d'IAM*.

# Octroi de l’accès à la fonction Lambda à d’autres comptes
<a name="permissions-function-cross-account"></a>

Pour partager une fonction avec une autre Compte AWS, ajoutez une déclaration d'autorisations entre comptes à la politique basée sur les [ressources](access-control-resource-based.md) de la fonction. Exécutez la commande [add-permission](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/add-permission.html) et spécifiez l’ID du compte en tant que `principal`. L’exemple suivant accorde au compte `111122223333` l’autorisation d’invoquer la fonction `my-function` avec l’alias `prod`.

```
aws lambda add-permission \
  --function-name my-function:prod \
  --statement-id xaccount \
  --action lambda:InvokeFunction \
  --principal 111122223333 \
  --output text
```

Vous devriez voir la sortie suivante:

```
{"Sid":"xaccount","Effect":"Allow","Principal":{"AWS":"arn:aws:iam::111122223333:root"},"Action":"lambda:InvokeFunction","Resource":"arn:aws:lambda:us-east-1:123456789012:function:my-function"}
```

La stratégie basée sur les ressources accorde à l’autre compte l’autorisation d’accéder à la fonction, mais n’autorise pas les utilisateurs de ce compte à dépasser leurs autorisations. Les utilisateurs de l’autre compte doivent disposer des [autorisations utilisateur](access-control-identity-based.md) correspondantes pour utiliser l’API Lambda.

Afin de limiter l’accès à un utilisateur ou à un rôle dans un autre compte, spécifiez l’ARN complet de l’identité en tant que principal. Par exemple, `arn:aws:iam::123456789012:user/developer`.

L’[alias](configuration-aliases.md) limite la version pouvant être invoquée par l’autre compte. L’autre compte doit alors inclure l’alias dans l’ARN de la fonction.

```
aws lambda invoke \
  --function-name arn:aws:lambda:us-east-2:123456789012:function:my-function:prod out
```

Vous devriez voir la sortie suivante:

```
{
    "StatusCode": 200,
    "ExecutedVersion": "1"
}
```

Le propriétaire de la fonction peut alors mettre à jour l’alias afin qu’il pointe vers une nouvelle version sans que l’appelant ait besoin de modifier la façon dont il invoque votre fonction. Cela permet de s’assurer que l’autre compte n’a pas besoin de changer son code pour utiliser la nouvelle version et qu’il est uniquement autorisé à invoquer la version de la fonction associée à l’alias.

Vous pouvez accorder l’accès entre comptes pour n’importe quelle action d’API qui s’exécute sur une fonction existante. Par exemple, vous pouvez accorder l’accès à `lambda:ListAliases` afin qu’un compte puisse obtenir une liste des alias ou à `lambda:GetFunction` pour qu’il puisse télécharger le code de votre fonction. Ajoutez chaque autorisation séparément ou utilisez `lambda:*` pour accorder l’accès à toutes les actions pour la fonction spécifiée.

Pour accorder à d’autres comptes l’autorisation pour plusieurs fonctions ou pour des actions qui ne s’exécutent pas sur une fonction, nous vous conseillons d’utiliser des [rôles IAM](access-control-identity-based.md).

# Octroi de l’accès de la couche Lambda à d’autres comptes
<a name="permissions-layer-cross-account"></a>

Pour partager une couche avec une autre Compte AWS, ajoutez une déclaration d'autorisations entre comptes à la politique basée sur les [ressources](access-control-resource-based.md) de la couche. Exécutez la [add-layer-version-permission](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/add-layer-version-permission.html)commande et spécifiez l'ID du compte sous la forme`principal`. Dans chaque instruction, vous pouvez accorder une autorisation à un compte unique, à tous les comptes ou à une organisation dans [AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html).

L’exemple suivant autorise le compte 111122223333 à accéder à la version 2 de la couche `bash-runtime`.

```
aws lambda add-layer-version-permission \
  --layer-name bash-runtime \
  --version-number 2 \  
  --statement-id xaccount \
  --action lambda:GetLayerVersion \
  --principal 111122223333 \
  --output text
```

Vous devez voir des résultats similaires à ce qui suit :

```
{"Sid":"xaccount","Effect":"Allow","Principal":{"AWS":"arn:aws:iam::111122223333:root"},"Action":"lambda:GetLayerVersion","Resource":"arn:aws:lambda:us-east-1:123456789012:layer:bash-runtime:2"}
```

Les autorisations ne s’appliquent qu’à une seule version de couche. Répétez le processus chaque fois que vous créez une nouvelle version de la couche.

Pour accorder l’autorisation à tous les comptes d’une organisation [AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html), utilisez l’option `organization-id`. L’exemple suivant accorde à tous les comptes d’une organisation `o-t194hfs8cz` l’autorisation d’utiliser la version 3 de `my-layer`.

```
aws lambda add-layer-version-permission \
  --layer-name my-layer \
  --version-number 3 \
  --statement-id engineering-org \
  --principal '*' \
  --action lambda:GetLayerVersion \
  --organization-id o-t194hfs8cz \
  --output text
```

Vous devriez voir la sortie suivante :

```
{"Sid":"engineering-org","Effect":"Allow","Principal":"*","Action":"lambda:GetLayerVersion","Resource":"arn:aws:lambda:us-east-2:123456789012:layer:my-layer:3","Condition":{"StringEquals":{"aws:PrincipalOrgID":"o-t194hfs8cz"}}}"
```

Pour octroyer l’autorisation à plusieurs comptes ou organisations, vous devez ajouter plusieurs instructions.