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

Lecture de 4 minute(s)
0

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 vers la Console de gestion AWS ?

Brève description

Vous pouvez utiliser la clé de condition globale aws:SourceIp dans l'élément de condition d'une politique 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é, sauf si vous utilisez également la condition globale aws:ViaAWSService. Pour plus d'informations, consultez AWS : refuse l'accès à AWS en fonction de l'adresse IP source.

Imaginons que vous disposiez d'une fonction du service AWS permettant à AWS CloudFormation d'effectuer des appels vers Amazon Elastic Compute Cloud (Amazon EC2) afin d'arrêter 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 politique IAM.

Résolution

Créez un rôle IAM avec le même ensemble d'autorisations que la politique IAM attachée à l'utilisateur IAM. Cela donne à l'utilisateur IAM les autorisations nécessaires pour assumer l'API du rôle sts:AssumeRole uniquement 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'AWS CLI ou CreateRole à partir de l'API, vous pouvez transmettre le document de la politique 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 spécifiée 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 politique 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 AWS 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.


Informations connexes

Clés de contexte de condition globale AWS

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a un an