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

AWS Éléments de politique JSON: NotPrincipal

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 principal utilisateur fédéré AWS STS, un rôle IAM, une session de rôle endossé, un Compte AWS, un service AWS ou un autre type principal. Pour plus d’informations sur les principaux, consultez AWS É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 NotPrincipalpour 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

  • 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 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 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 qui endosse un rôle (quelqu'un qui utilise un rôle) est évalué, AWS peut valider d'abord le compte, puis le rôle et enfin, l'utilisateur qui endosse le rôle. 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

Lorsque vous gérez le contrôle d’accès dans AWS, il peut arriver que vous deviez refuser explicitement l’accès à une ressource à tous les principaux, à l’exception d’un ou plusieurs principaux que vous spécifiez. AWS recommande d’utiliser une instruction Refuser avec des clés de contexte de condition globales pour un contrôle plus précis et un dépannage plus facile. 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

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 de sécurité AWS selon lequel un refus explicite prime toujours sur toute autorisation et contribue à maintenir le principe du moindre privilège dans l’ensemble de votre infrastructure 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 comme ArnNotEquals pour autoriser explicitement un rôle IAM à accéder à vos ressources. L’exemple suivant utilise aws: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

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