SecurityGroupからIPアドレスによるアクセス制御をしていたのですが
諸事情によりIPアドレスが変更となったのでaws-sdkを使ってごそっと設定を変更してみました
スクリプト
- 例として元々 192.0.2.0/24 を設定していたものを 198.51.100.0/24,203.0.113.0/24 に変更してみます
- addとremoveの処理がだいだいコピペなんで直そうかと思ったけど面倒なのでこのままで。。。
- ~/.aws/credentials は別途用意して下さい
# !/usr/bin/env ruby
# encoding: utf-8
require 'aws-sdk'
require 'aws-sdk-core/errors'
OLD_IP_RANGE = '192.0.2.0/24'
NEW_IP_RANGE_1 = '198.51.100.0/24'
NEW_IP_RANGE_2 = '203.0.113.0/24'
def add_ip_range(sg_id:, permission:, region:)
sg = Aws::EC2::SecurityGroup.new(sg_id, region: region)
begin
sg.authorize_ingress(
ip_permissions: [
{
ip_protocol: permission.ip_protocol,
from_port: permission.from_port,
to_port: permission.to_port,
ip_ranges: [
{ cidr_ip: NEW_IP_RANGE_1 },
{ cidr_ip: NEW_IP_RANGE_2 },
],
ipv_6_ranges: [ {} ],
prefix_list_ids: [ {} ],
}
]
)
puts "[S]#{sg_id}(#{region}): #{permission.from_port}/#{permission.ip_protocol}"
rescue Aws::Errors::ServiceError => e
puts "[E]#{sg_id}(#{region}): " + e.inspect
end
end
def remove_ip_range(sg_id:, permission:, region:)
sg = Aws::EC2::SecurityGroup.new(sg_id, region: region)
begin
sg.revoke_ingress(
ip_permissions: [
{
ip_protocol: permission.ip_protocol,
from_port: permission.from_port,
to_port: permission.to_port,
ip_ranges: [
{ cidr_ip: OLD_IP_RANGE },
],
ipv_6_ranges: [ {} ],
prefix_list_ids: [ {} ],
}
]
)
puts "[S]#{sg_id}(#{region}): #{permission.from_port}/#{permission.ip_protocol}"
rescue Aws::Errors::ServiceError => e
puts "[E]#{sg_id}(#{region}): " + e.inspect
end
end
Aws.partition('aws').regions.each do |region|
ec2 = Aws::EC2::Client.new(region: region.name)
ec2.describe_security_groups.data.security_groups.each do |sg|
sg.ip_permissions.each do |perm|
perm.ip_ranges.each do |range|
if range.cidr_ip == OLD_IP_RANGE
add_ip_range(sg_id: sg.group_id, permission: perm, region: region.name)
remove_ip_range(sg_id: sg.group_id, permission: perm, region: region.name)
end
end
end
end
end