Comment utiliser les rôles IAM pour restreindre les appels d'API provenant d'adresses IP spécifiques vers AWS Management Console ?

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

Je souhaite restreindre l'accès aux appels d'API AWS à des adresses IP spécifiques. Comment utiliser les rôles AWS Identity and Access Management (IAM) pour restreindre l'accès des appels d'API à AWS Management Console ?

Brève description

Vous pouvez utiliser la clé de condition globale aws:SourceIp dans l'élément Condition d'une stratégie IAM pour restreindre les appels d'API provenant d'adresses IP spécifiques. Cependant, l'accès aux services AWS qui effectuent des appels en votre nom, tels qu'AWS CloudFormation, sera refusé.

Imaginons que vous disposiez d'un rôle de service AWS permettant à AWS CloudFormation d'effectuer des appels en direction d'Amazon Elastic Compute Cloud (Amazon EC2), afin d'interrompre une instance. La demande est refusée car le service cible (Amazon EC2) détecte l'adresse IP du service appelant (AWS CloudFormation) et non celle de l'utilisateur d'origine. Vous ne pouvez pas transmettre l'adresse IP d'origine au service cible via un service appelant à des fins d'évaluation dans une stratégie IAM.

Solution

Créez un rôle IAM profitant du même ensemble d'autorisations que la stratégie IAM associée à l'utilisateur IAM. L'utilisateur IAM dispose uniquement des autorisations nécessaires pour assumer le rôle sts:AssumeRole si la demande provient de l'adresse IP spécifiée. Ceci est dû au fait que le contrôle de restriction aws:SourceIp est exécuté lorsque l'utilisateur tente d'assumer le rôle. Lorsque l'utilisateur assume le rôle IAM, il acquiert les autorisations applicables à la stratégie IAM qui lui est associée. Dans la mesure où la stratégie IAM associée au rôle n'inclut pas la clé de condition aws:SourceIp, l'accès aux services AWS est autorisé.

Créez la stratégie IAM ci-dessous, puis associez-la à un utilisateur IAM disposant d'un accès par programmation. Cette stratégie IAM permet à l'utilisateur IAM d'utiliser l'API AssumeRole avec le nom de rôle Bob. Bob n'a pas besoin d'autorisations supplémentaires. Toutes les autres autorisations nécessaires sont acquises lorsque l'utilisateur IAM assume avec succès le rôle Bob.

Remarque :

Exemple de stratégie d'utilisateur IAM

Cet exemple de stratégie dispose des autorisations pour effectuer des appels d'API sur les ressources dans le compte.

{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": "arn:aws:iam::EXAMPLEIAMACCOUNTID:role/Bob"
}
}

Créez le rôle IAM Bob pour déléguer des autorisations à l'utilisateur IAM. Suivez les instructions contenues dans Création d'un rôle IAM (console). Vous pouvez également utiliser l'interface de ligne de commande AWS ou l'API.

Remarque :

  • Lorsque vous utilisez la console pour créer le rôle, modifiez la stratégie d'approbation du rôle, comme dans cet exemple se rapportant à la stratégie d'approbation Bob. En utilisant create-role à partir de l'interface de ligne de commande AWS ou CreateRole à partir de l'API, vous pouvez transmettre le document de la stratégie de relation d'approbation en tant que valeur dans le paramètre de document update-assume-role-policy.
  • La demande doit provenir de la plage d'adresses IP 103.15.250.0/24 ou 12.148.72.0/23, sinon l'utilisateur IAM ne pourra pas assumer le rôle et effectuer des appels d'API.

Exemple de stratégie d'approbation de rôle IAM

Cet exemple de stratégie d'approbation permet à l'utilisateur d'assumer le rôle si la demande provient de la plage d'adresses IP 103.15.250.0/24 ou 12.148.72.0/23.

Remarque : remplacez YOURIAMUSERNAME par votre nom d'utilisateur IAM.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::account-id:user/YOURIAMUSERNAME"
      },
      "Action": "sts:AssumeRole"
    },
    {
      "Effect": "Deny",
      "Principal": {
        "AWS": "arn:aws:iam::account-id:user/YOURIAMUSERNAME"
      },
      "Action": "sts:AssumeRole",
      "Condition": {
        "NotIpAddress": {
          "aws:SourceIp": [
            "103.15.250.0/24",
            "12.148.72.0/23"
          ]
        }
      }
    }
  ]
}

Remarque : cette méthode a une incidence sur les journaux CloudTrail, car les actions sont effectuées par le rôle IAM assumé par l'utilisateur, et non par l'utilisateur IAM. L'appel d'API assumeRole effectué par l'utilisateur IAM est consigné dans les journaux CloudTrail sous l'utilisateur IAM. Tous les autres appels d'API effectués par le rôle IAM sont consignés dans les journaux CloudTrail sous le nom du rôle.

Vous pouvez également utiliser une stratégie IAM qui refuse l'accès à toutes les actions AWS du compte lorsque la demande provient de mandataires situés en dehors de la plage d'adresses IP spécifiée. Pour plus d'informations, consultez AWS : Refuser l'accès à AWS en fonction de l'adresse IP source.


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


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