Назад | Перейти на главную страницу

Автоматически добавлять текущий общедоступный IP-адрес в группу безопасности, чтобы разрешить трафик на определенный порт

Каждый раз, когда я меняю свой общедоступный IP-адрес, я должен добавить новый IP-адрес в Security group в AWS console чтобы разрешить трафик на порт 22.

Есть ли способ автоматизировать это? Я имею в виду, что при каждом изменении общедоступного IP-адреса запускайте сценарий (в OSX) для добавления нового IP-адреса к моему Security group для разрешения движения на port 22.

Спасибо!

Я считаю, что есть несколько способов сделать это. Но я могу поделиться тем, как я некоторое время делал это с помощью Python. У меня нет опыта работы с OSX, но я предполагаю, что он предустановлен вместе с Python, так что вы сможете это сделать. Одно предостережение: мне пришлось установить boto, который представляет собой интерфейс Python для AWS для вызовов API. Определенно вы можете сделать то же самое с EC2 CLI Tools.

Инструкции по установке Boto можно найти здесь -

http://boto.readthedocs.org/en/latest/getting_started.html

import boto.ec2
conn=boto.ec2.connect_to_region('us-east-1')
conn.authorize_security_group(group_name='my_sec_group', ip_protocol='tcp', from_port='22', to_port='22', cidr_ip='1.2.3.4/32')

Шаги -

Импортируйте необходимый модуль
Подключайтесь к любому региону
Используйте authorize_security_group и укажите имя группы безопасности, протокол, порт для / от и ваш IP.

Я просто собрал скрипт, который делает это обновление автоматически. Может быть полезно другим, хотя написано только для личного пользования:

import boto.ec2
import requests

LAST_IP_FILENAME = 'last_ip.txt'
AWS_REGION = '{your aws region}'
GROUP_NAME = '{the security group you wanna update}'
FROM_PORT = {from port}
TO_PORT = {to port}

AMAZON_IP_ENDPOINT = 'http://checkip.amazonaws.com/'

def get_last_ip():
    try:
        with open(LAST_IP_FILENAME, 'r') as fp:
            ip = fp.readline().strip()
    except:
        ip = None
    return ip

def get_connection():
    return boto.ec2.connect_to_region(AWS_REGION)

def get_security_group(conn, group_name):
    return [s for s in conn.get_all_security_groups() if s.name == group_name].pop()

def delete_ip(sg, ip):
    if not sg.revoke('tcp', FROM_PORT, TO_PORT, cidr_ip=ip):
        raise Exception('Removing ip from security group failed')

def get_current_ip():
    resp = requests.get(AMAZON_IP_ENDPOINT)
    resp.raise_for_status()
    return resp.content.strip() + '/32'

def add_new_ip(ip):
    if not sg.authorize('tcp', FROM_PORT, TO_PORT, cidr_ip=ip):
        raise Exception('Adding ip to security group failed')

def save_new_ip(ip):
    with open(LAST_IP_FILENAME, 'w') as fp:
        fp.write(ip + '\n')

if __name__ == '__main__':
    last_ip = get_last_ip()
    current_ip = get_current_ip()

    if last_ip == current_ip:
        print 'Last ip and current ip are the same.. abort.'
        exit(0)

    conn = get_connection()
    sg = get_security_group(conn, GROUP_NAME)
    if last_ip is not None:
        print 'Found old ip {}'.format(last_ip)
        delete_ip(sg, last_ip)
        print '    ..deleted successfully..'
    else:
        print 'No old ip was found..'

    print 'Current ip is {}'.format(current_ip)
    add_new_ip(current_ip)
    print '    ..updated successfully'
    save_new_ip(current_ip)

Вы должны использовать VPN, которая может быть открыта для всего Интернета, и SSH для ваших серверов только через VPN. Он будет работать хорошо, безопасность хорошая (если вы умеете правильно обращаться со своими сертификатами), и вам не нужно обнаруживать, что ваш IP-адрес был изменен. И есть еще одно преимущество - вы не хотите разрешать использование всех отелей, вокзалов или мобильных телефонов во время путешествия.

Или вы можете просто открыть порт 22 для Интернета вообще, это безопасно, если вы используете ключи и отключили аутентификацию только по паролю.

Ты можешь использовать aws_ipadd , чтобы легко обновлять правила группы безопасности AWS и управлять ими, а также вносить в белый список свой общедоступный IP-адрес при его изменении.

$ aws_ipadd my_project_ssh
 Your IP 10.10.1.14/32 and Port 22 is whitelisted successfully.

$ aws_ipadd my_project_ssh
 Modifying existing rule...
 Removing old whitelisted IP '10.10.1.14/32'.
 Whitelisting new IP '10.4.10.16/32'.
 Rule successfully updated!

https://github.com/jamiemccrindle/aws-access - это инструмент командной строки узла, позволяющий поддерживать группу безопасности AWS в актуальном состоянии с использованием вашего текущего IP-адреса, например

# install aws-access
npm install -g aws-access

# add current ip address to a security g
aws-access -g remote-working -r us-east-1