LoginSignup
0
2

More than 5 years have passed since last update.

aws-sdkからAWS SecurityGroupを変更する

Posted at

SecurityGroupからIPアドレスによるアクセス制御をしていたのですが
諸事情によりIPアドレスが変更となったのでaws-sdkを使ってごそっと設定を変更してみました

スクリプト

#!/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
0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2