

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.

# AWS Éléments de politique JSON : NotPrincipal
<a name="reference_policies_elements_notprincipal"></a>

L’élément `NotPrincipal` utilise `"Effect":"Deny"` pour refuser l’accès à tous les principaux, ***sauf*** le principal spécifié dans l’élément `NotPrincipal`. Un principal peut être un utilisateur IAM, un utilisateur principal AWS STS fédéré, un rôle IAM, une session de rôle assumé Compte AWS, un AWS service ou un autre type principal. Pour plus d’informations sur les principaux, consultez [AWS Éléments de politique JSON : Principal](reference_policies_elements_principal.md).

L'élément `NotPrincipal` doit être utilisé avec `"Effect":"Deny"`. Son utilisation avec `"Effect":"Allow"` n'est pas prise en charge. 

**Important**  
Nous ne recommandons pas l’utilisation de `NotPrincipal`pour les nouvelles politiques basées sur les ressources dans le cadre de votre politique de sécurité et d’autorisation. Lorsque vous utilisez l'élément `NotPrincipal`, il peut être difficile de résoudre les problèmes liés à plusieurs types de politique. Nous recommandons plutôt l'utilisation de la clé de contexte `aws:PrincipalArn` avec les opérateurs de condition ARN.

## Points clés
<a name="notprincipal-key-points"></a>
+ L’élément `NotPrincipal` est pris en charge dans des politiques basées sur les ressources pour certains services AWS , y compris les points de terminaison d’un VPC. Les politiques basées sur les ressources sont des politiques que vous intégrez directement à une ressource. Vous ne pouvez pas utiliser l'élément `NotPrincipal` dans une politique IAM basée sur l'identité ni dans une politique d'approbation du rôle IAM.
+ N'utilisez pas de déclarations de politique basée sur les ressources qui incluent un élément de politique `NotPrincipal` ayant un effet `Deny` sur les utilisateurs IAM ou les rôles auxquels est attachée une politique de limite des autorisations. L'élément `NotPrincipal` ayant un effet `Deny` refusera toujours tout principal IAM auquel est attachée une politique de limite des autorisations, quelles que soient les valeurs spécifiées dans l'élément `NotPrincipal`. Certains utilisateurs ou rôles IAM qui auraient autrement eu accès à la ressource n'y ont donc plus accès. Nous vous recommandons de modifier vos déclarations de politique basée sur les ressources afin d'utiliser l'opérateur de condition [`ArnNotEquals`](reference_policies_elements_condition_operators.md#Conditions_ARN) avec la clé de contexte [`aws:PrincipalArn`](reference_policies_condition-keys.md#condition-keys-principalarn) dans le but de limiter l'accès plutôt que l'élément `NotPrincipal`. Pour plus d'informations sur les limites des autorisations, veuillez consulter [Limites d'autorisations pour les entités IAM](access_policies_boundaries.md).
+ Lorsque vous utilisez `NotPrincipal`, vous devez également spécifier l’ARN du compte du principal non refusé. Dans le cas contraire, la politique peut refuser l'accès à l'ensemble du compte contenant le principal. En fonction du service que vous incluez dans votre politique, AWS peut valider d'abord le compte, puis l'utilisateur. Si un utilisateur assumant un rôle (une personne utilisant un rôle) est en cours d'évaluation, AWS vous pouvez d'abord valider le compte, puis le rôle, puis l'utilisateur assumé. Ce dernier est identifié par le nom de session de rôle qui est spécifié lorsqu'il endosse le rôle. Par conséquent, nous vous recommandons vivement d'inclure explicitement l'ARN du compte d'un utilisateur, ou inclure à la fois l'ARN d'un rôle et l'ARN du compte contenant le rôle.
+ L’élément `NotPrincipal` n’est pas pris en charge dans les politiques de contrôle des services (SCP) et les politiques de contrôle des ressources (RCP).

## Alternatives à l’élément `NotPrincipal`
<a name="notprincipal-alternatives"></a>

Lorsque vous gérez le contrôle d'accès dans AWS, il peut arriver que vous deviez refuser explicitement à tous les principaux l'accès à une ressource, à l'exception d'un ou de plusieurs principaux que vous spécifiez. AWS recommande d'utiliser une instruction Deny avec des clés contextuelles de condition globales pour un contrôle plus précis et un dépannage simplifié. Les exemples suivants montrent d’autres approches utilisant des opérateurs de condition tels que `StringNotEquals` ou `ArnNotEquals` pour refuser l’accès à tous les principaux, à l’exception de ceux spécifiés dans l’élément Condition.

## Exemple de scénario utilisant un rôle IAM
<a name="notprincipal-alternative-role"></a>

Vous pouvez utiliser une politique basée sur les ressources avec une instruction Refuser pour empêcher tous les rôles IAM, à l’exception de ceux spécifiés dans l’élément Condition, d’accéder à vos ressources ou de les manipuler. Cette approche suit le principe AWS de sécurité selon lequel un refus explicite a toujours priorité sur toute instruction d'autorisation et contribue à maintenir le principe du moindre privilège dans l'ensemble de votre AWS infrastructure.

Au lieu d’utiliser `NotPrincipal`, nous vous recommandons d’utiliser une instruction Refuser avec des clés de contexte de condition globales et l’opérateur de condition comme [`ArnNotEquals`](reference_policies_elements_condition_operators.md#Conditions_ARN) pour autoriser explicitement un rôle IAM à accéder à vos ressources. L’exemple suivant utilise [aws:PrincipalArn](reference_policies_condition-keys.md#condition-keys-principalarn) pour autoriser explicitement le rôle `read-only-role` à accéder aux compartiments Amazon S3 dans le dossier `Bucket_Account_Audit`.

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "DenyCrossAuditAccess",
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:*",
      "Resource": [
        "arn:aws:s3:::{{Bucket_Account_Audit}}",
        "arn:aws:s3:::{{Bucket_Account_Audit}}/*"
      ],
      "Condition": {
        "ArnNotEquals": {
          "aws:PrincipalArn": "{{arn:aws:iam::444455556666:role/read-only-role}}"
        }
      }
    }
  ]
}
```

------

## Exemple de scénario utilisant un principal de service
<a name="notprincipal-alternative-service-principal"></a>

Vous pouvez utiliser une instruction Refuser pour empêcher tous les principaux de service, à l’exception de ceux spécifiés dans l’élément `Condition`, d’accéder à vos ressources ou de les manipuler. Cette approche est particulièrement utile lorsque vous devez mettre en œuvre des contrôles d’accès précis ou établir des limites de sécurité entre différents services et applications dans votre environnement AWS .

Au lieu d’utiliser `NotPrincipal`, nous vous recommandons d’utiliser une instruction Refuser avec des clés de contexte de condition globales et l’opérateur de condition [`StringNotEquals`](reference_policies_elements_condition_operators.md#Conditions_String) pour autoriser explicitement un principal de service à accéder à vos ressources. L’exemple suivant utilise `aws:PrincipalServiceName` pour autoriser explicitement le principal de service AWS CodeBuild à accéder aux compartiments Amazon S3 dans le dossier `BUCKETNAME`.

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "DenyNotCodeBuildAccess",
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:*",
      "Resource": [
        "arn:aws:s3:::{{BUCKETNAME}}",
        "arn:aws:s3:::{{BUCKETNAME}}/*"
      ],
      "Condition": {
        "StringNotEqualsIfExists": {
          "aws:PrincipalServiceName": "{{codebuild.amazonaws.com}}"
        }
      }
    }
  ]
}
```

------