Comment utiliser les limites d'autorisations pour limiter la portée des utilisateurs et des rôles IAM et empêcher l'escalade des privilèges ?

Date de la dernière mise à jour : 11/09/2020

Comment créer une stratégie de limite d'autorisations pour restreindre l'accès administrateur à AWS Identity and Access Management (IAM) et empêcher l'escalade des privilèges ?

Solution

Utilisez l'exemple de stratégie IAM suivant pour fournir ces restrictions :

  • Tout mandataire IAM créé par les administrateurs IAM peut avoir un accès complet aux ressources AWS. L'accès complet aux ressources AWS dépend des stratégies basées sur l'identité, car les limites d'autorisations ne fournissent pas d'autorisations par elles-mêmes.
  • La stratégie empêche les mandataires IAM d'accéder aux services connexes à la facturation et gestion des coûts AWS.
  • Les mandataires IAM ne peuvent pas modifier les limites d'autorisations pour autoriser leurs propres autorisations à accéder aux services restreints.
  • Les administrateurs IAM ne peuvent pas créer de mandataires IAM disposant de plus de privilèges qu'ils n'en ont déjà.
  • Les mandataires IAM créés par les administrateurs IAM ne peuvent pas créer de mandataires IAM disposant de plus d'autorisations que les administrateurs IAM.

Enregistrez cette stratégie en tant que stratégie gérée nommée ScopePermissions. Remplacez YourAccount_ID par l'ID de votre compte.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowAdminAccess",
            "Effect": "Allow",
            "Action": "*",
            "Resource": "*"
        },
        {
            "Sid": "DenyAccessToCostAndBilling",
            "Effect": "Deny",
            "Action": [
                "account:*",
                "aws-portal:*",
                "savingsplans:*",
                "cur:*",
                "ce:*"
            ],
            "Resource": "*"
        },
        {
            "Sid": "DenyPermBoundaryIAMPolicyAlteration",
            "Effect": "Deny",
            "Action": [
                "iam:DeletePolicy",
                "iam:DeletePolicyVersion",
                "iam:CreatePolicyVersion",
                "iam:SetDefaultPolicyVersion"
            ],
            "Resource": [
                "arn:aws:iam::YourAccount_ID:policy/ScopePermissions"
            ]
        },
        {
            "Sid": "DenyRemovalOfPermBoundaryFromAnyUserOrRole",
            "Effect": "Deny",
            "Action": [
                "iam:DeleteUserPermissionsBoundary",
                "iam:DeleteRolePermissionsBoundary"
            ],
            "Resource": [
                "arn:aws:iam::YourAccount_ID:user/*",
                "arn:aws:iam::YourAccount_ID:role/*"
            ],
            "Condition": {
                "StringEquals": {
                    "iam:PermissionsBoundary": "arn:aws:iam::YourAccount_ID:policy/ScopePermissions"
                }
            }
        },
        {
            "Sid": "DenyAccessIfRequiredPermBoundaryIsNotBeingApplied",
            "Effect": "Deny",
            "Action": [
                "iam:PutUserPermissionsBoundary",
                "iam:PutRolePermissionsBoundary"
            ],
            "Resource": [
                "arn:aws:iam::YourAccount_ID:user/*",
                "arn:aws:iam::YourAccount_ID:role/*"
            ],
            "Condition": {
                "StringNotEquals": {
                    "iam:PermissionsBoundary": "arn:aws:iam::YourAccount_ID:policy/ScopePermissions"
                }
            }
        },
        {
            "Sid": "DenyUserAndRoleCreationWithOutPermBoundary",
            "Effect": "Deny",
            "Action": [
                "iam:CreateUser",
                "iam:CreateRole"
            ],
            "Resource": [
                "arn:aws:iam::YourAccount_ID:user/*",
                "arn:aws:iam::YourAccount_ID:role/*"
            ],
            "Condition": {
                "StringNotEquals": {
                    "iam:PermissionsBoundary": "arn:aws:iam::YourAccount_ID:policy/ScopePermissions"
                }
            }
        }
    ]
}

Pour tester cette stratégie :

1.    Créez un nouvel utilisateur IAM nommé Bob.

2.    Associez la stratégie AdministratorAccess directement à Bob et associez ScopePermissions en tant que limite d'autorisations.

3.    Connectez-vous à AWS Management Console en tant que Bob. Ensuite, essayez de :

  • Accédez au service de facturation et gestion des coûts AWS Cost Explorer.
  • Supprimez la limite d'autorisations de Bob.
  • Créez de nouveaux utilisateurs et rôles IAM sans limites d'autorisations.
  • Créez un utilisateur IAM nommé Alice disposant de limites d'autorisations appliquées, puis associez à Alice la stratégie AdministratorAccess en tant que stratégie basée sur l'identité.

4.    Connectez-vous à AWS Management Console en tant qu'Alice et essayez ce qui suit :

La limite d'autorisations permet de s'assurer que :

  • Bob ne peut pas créer de nouveaux utilisateurs sans associer la limite d'autorisations ScopePermissions.
  • Les utilisateurs et rôles IAM créés par Bob disposent des mêmes autorisations que Bob.
  • Bob et Alice ne peuvent pas modifier la stratégie IAM qui approvisionne la limite d'autorisations, comme la suppression de la version par défaut de la stratégie.
  • Bob et Alice ne peuvent ni modifier ni supprimer les limites d'autorisations appliquées à la stratégie ou à d'autres utilisateurs.
  • La limite d'autorisations refuse l'accès aux services restreints.
  • Alice adopte les mêmes autorisations que Bob, ce qui empêche l'escalade des privilèges. Si Alice crée un nouvel utilisateur IAM, le nouvel utilisateur ne dispose pas de plus d'autorisations que Bob. Cette limite d'autorisations garantit qu'aucun mandataires IAM n'est créé sans la limite d'autorisations, ce qui empêche l'escalade des privilèges.

Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?