自动将当前公共 IP 添加到安全组以允许特定端口上的流量

自动将当前公共 IP 添加到安全组以允许特定端口上的流量

每次我更改公共 IP 时,我都必须添加新 IPSecurity groupAWS console允许端口 22 上的流量。

有什么方法可以自动完成这个吗?我的意思是每次更改公共 IP 时都运行一个脚本(在 OSX 中)将新 IP 添加到我的 IPSecurity group以允许流量port 22

谢谢!

答案1

我相信有多种方法可以做到这一点。但我可以分享一下我使用 Python 一段时间以来一直在做这件事的方法。我没有使用 OSX 的经验,但我认为它预装了 Python,所以你应该能够做到这一点。不过有一个警告,我必须安装boto,它是用于 API 调用的 AWS Python 接口。当然,你也可以用完成同样的事情EC2 CLI Tools

Boto 安装说明可在此处找到 -

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

导入 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。

答案2

您可以使用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!

答案3

我刚刚编写了一个脚本,可以自动执行此更新。虽然它仅供个人使用,但可能对其他人有用:

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)

答案4

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

相关内容