Je dois connecter mon adresse IP dynamique (qui change à chaque fois) à la machine AWS EC2.
Pour cela, j'ai mappé mon adresse IP publique sur le nom de domaine (xyz.com). J'essaie maintenant de l'ajouter au groupe de sécurité.
Mais le groupe de sécurité AWS ne permet pas d’ajouter des noms DNS. Est-ce le bon processus pour le faire, sinon, veuillez me le suggérer.
Les groupes de sécurité et les ACL ne peuvent pas résoudre les noms d'hôte DNS.
Vous pouvez utiliser l'AWS CLI pour programmer la mise à jour de votre adresse IP dynamique:
aws ec2 authorize-security-group-ingress - group-id --protocol tcp --port 22 --cidr/24
http://docs.aws.Amazon.com/cli/latest/userguide/cli-ec2-sg.html
J'ai utilisé ce petit script bash pour percer un trou dans le pare-feu depuis mon adresse actuelle:
#!/bin/sh
AWS_IP=$(curl http://checkip.amazonaws.com)
aws ec2 authorize-security-group-ingress --group-name my-security-group \
--protocol tcp --port 22 \
--cidr $AWS_IP/32
Cependant, cela crée un groupe de sécurité plein de trous dans le fromage suisse provenant d'adresses IP aléatoires. Vous voudrez donc poser la question suivante: comment ne pas avoir un groupe de sécurité avec des adresses temporaires qui ne sont plus les vôtres? Une façon de résoudre ce problème consiste à configurer un VPN doté d'un point de terminaison (relativement) stable, puis d'autoriser cette adresse unique uniquement via le groupe de sécurité.
Je crée un groupe de sécurité pour les ips dynamiques et chaque fois que je lance mon script, supprime l'adresse IP stockée dans un fichier.
Ceci est ma solution pour Windows.
SETLOCAL
@echo off
SET mypath=%~dp0
set PATH=%PATH%;"C:\Program Files\Amazon\AWSCLI\";"C:\Program Files (x86)\PuTTY\";"C:\MyApps\gnuwin32\bin"
set GROUPID= PUT YOUR DYNAMIC SECURITY GROUP ID HERE
rem aws ec2 create-security-group --group-name dynamic_ips --vpc-id vpc-81a519e5 --description "Dynamic Ip Address"
set /p MYIP=<%mypath%\MYIP_NODELETE.txt
aws ec2 revoke-security-group-ingress --group-id %GROUPID% --protocol tcp --port 0-65535 --cidr %MYIP%/24
wget -qO %mypath%\MYIP_NODELETE.txt http://ipinfo.io/ip
set /p MYIP=<%mypath%\MYIP_NODELETE.txt
aws ec2 authorize-security-group-ingress --group-id %GROUPID% --protocol tcp --port 0-65535 --cidr %MYIP%/24
rem cat %mypath%\MYIP_NODELETE.txt
pause
Vous ne pouvez pas connecter une adresse IP dynamique comme vous le souhaitez. chaque fois que votre adresse IP change, si vous souhaitez l'autoriser via vos groupes de sécurité, vous devez modifier le paramètre avec votre nouvelle adresse IP.
Vous pouvez écrire un petit script que vous créez sous forme d'icône sur votre bureau, mais qui utilise l'API AWS pour autoriser de nouveau votre adresse IP actuelle afin de faciliter les choses lorsqu'elle change.
Les règles de sécurité AWS autorisent uniquement les plages IP, appelées CIDR , que vous pouvez mettre à jour avec AWS CLI. Cependant, vous ne pouvez pas simplement mettre à jour le CIDR d'une règle existante, vous devez:
aws ec2 revoke-security-group-ingress ...
aws ec2 authorize-security-group-ingress ...
Exemple
J'ai trouvé une forme de ce script utile pour encapsuler les étapes nécessaires:
#!/bin/bash
# == Script Config ===================
# The rule description is used to determine the rule that should be updated.
RULE_DESCRIPTION=My-Rule-Description
SECURITY_GROUP_NAME=My-Security-Group-Name
# ====================================
OLD_CIDR_IP=`aws ec2 describe-security-groups --query "SecurityGroups[?GroupName=='"$SECURITY_GROUP_NAME"'].IpPermissions[*].IpRanges[?Description=='"$RULE_DESCRIPTION"'].CidrIp" --output text`
NEW_IP=`curl -s http://checkip.amazonaws.com`
NEW_CIDR_IP=$NEW_IP'/32'
# If IP has changed and the old IP could be obtained, remove the old rule
if [[ $OLD_CIDR_IP != "" ]] && [[ $OLD_CIDR_IP != $NEW_CIDR_IP ]]; then
aws ec2 revoke-security-group-ingress --group-name $SECURITY_GROUP_NAME --protocol tcp --port 8080 --cidr $OLD_CIDR_IP
fi
# If the IP has changed and the new IP could be obtained, create a new rule
if [[ $NEW_IP != "" ]] && [[ $OLD_CIDR_IP != $NEW_CIDR_IP ]]; then
aws ec2 authorize-security-group-ingress --group-name $SECURITY_GROUP_NAME --ip-permissions '[{"IpProtocol": "tcp", "FromPort": 8080, "ToPort": 8080, "IpRanges": [{"CidrIp": "'$NEW_CIDR_IP'", "Description": "'$RULE_DESCRIPTION'"}]}]'
fi
Explication
Cette méthode utilise les 3 commandes AWS CLI suivantes, extraites de l'exemple ci-dessus avec le script bash supprimé.
1) Obtenez l'adresse IP CIDR d'une règle dans un groupe de sécurité spécifique à l'aide de la description de la règle. Cette commande utilise JMESPath dans le paramètre query
pour renvoyer uniquement les données souhaitées:
aws ec2 describe-security-groups --query "SecurityGroups[?GroupName=='MY_SECURITY_GROUP_NAME'].IpPermissions[*].IpRanges[?Description=='MY_RULE_DESCRIPTION'].CidrIp" --output text
2) Supprimer la règle pour l'ancien CIDR (réussit même si la règle n'existe pas):
aws ec2 revoke-security-group-ingress --group-name MY_SECURITY_GROUP_NAME --protocol tcp --port 80 --cidr 0.0.0.0/32
3) Ajouter une règle pour le nouveau CIDR (échec lorsque la règle existe déjà):
aws ec2 authorize-security-group-ingress --group-name MY_SECURITY_GROUP_NAME --ip-permissions '[{"IpProtocol": "tcp", "FromPort": 8080, "ToPort": 8080, "IpRanges": [{"CidrIp": "1.1.1.1/32", "Description": "MY_RULE_DESCRIPTION"}]}]'