每次我更改公共 IP 时,我都必须添加新 IPSecurity group
以AWS 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