AWS Éléments de politique JSON : NotPrincipal - AWS Identity and Access Management

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

L'NotPrincipalélément est utilisé "Effect":"Deny" pour refuser l'accès à tous les principaux, à l'exception du principal spécifié dans l'NotPrincipalélément. Un principal peut être un utilisateur IAM, un utilisateur 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 directeurs, consultezAWS Éléments de politique JSON : Principal.

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 stratégie 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

  • L'NotPrincipalélément est pris en charge dans les politiques basées sur les ressources pour certains AWS services, notamment les points de terminaison 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 avec la clé de contexte aws: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.

  • Lorsque vous l'utilisezNotPrincipal, 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'NotPrincipalélément 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'NotPrincipalélément

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 des approches alternatives 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

Vous pouvez utiliser une politique basée sur les ressources avec une instruction Deny 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 repose sur 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 au sein de votre AWS infrastructure.

Au lieu de l'utiliserNotPrincipal, nous vous recommandons d'utiliser une instruction Deny avec des clés contextuelles de condition globales et l'opérateur de condition, comme ArnNotEqualspour autoriser explicitement un rôle IAM à accéder à vos ressources. L'exemple suivant permet lois : PrincipalArn d'autoriser explicitement le rôle read-only-role à accéder aux compartiments Amazon S3 du Bucket_Account_Audit dossier.

{ "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:sts::444455556666:role/read-only-role" } } } ] }

Exemple de scénario utilisant un principal de service

Vous pouvez utiliser une instruction Deny pour empêcher tous les principaux de service, à l'exception de ceux spécifiés dans l'Conditionélément, 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 les différents services et applications de votre AWS environnement.

Au lieu de l'utiliserNotPrincipal, nous vous recommandons d'utiliser une instruction Deny avec des clés contextuelles de condition globales et l'opérateur de condition StringNotEqualspour autoriser explicitement un principal de service à accéder à vos ressources. L'exemple suivant permet lois : PrincipalServiceName d'autoriser explicitement le principal du AWS CodeBuild service à accéder aux compartiments Amazon S3 du BUCKETNAME dossier.

{ "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" } } } ] }