セキュリティグループの状態をテキストで取得で紹介した内容のアップデートです。
セキュリティグループをテキスト化するスクリプトは、上記で紹介したものを下記のように変更しています。
・commit-securitygroup
require_once("/opt/aws/php/default/sdk.class.php"); $regions = array( AmazonEC2::REGION_US_E1, AmazonEC2::REGION_US_W1, AmazonEC2::REGION_EU_W1, AmazonEC2::REGION_APAC_SE1, AmazonEC2::REGION_APAC_NE1 ); if(!file_exists("/opt/suzuki/var/suzuki_suz-lab.com/git/securitygroup")) { mkdir("/opt/suzuki/var/suzuki_suz-lab.com/git/securitygroup", 0644, true); } $ec2 = new AmazonEC2( "XXXXXXXXXXXXXXXXXXXX", "yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy" ); foreach($regions as $region) { $ec2->set_region($region); $response = $ec2->describe_security_groups(); file_put_contents( "/opt/suzuki/var/suzuki_suz-lab.com/git/securitygroup/$region.yaml", yaml_emit(json_decode($response->body->securityGroupInfo->to_json(), true)) ); } exit(0);
上記を実行すると、下記のようにリージョン毎のセキュリティグループのYAMLが出力されます。
ap-northeast-1.yaml ap-southeast-1.yaml eu-west-1.yaml us-east-1.yaml us-west-1.yaml
前回は出力するYAMLが中途半端なものでしたので、今回はphp-pecl-yamlパッケージをインストールすることで利用可能になるyaml_emitでYAMLを作成しています。
(一度JSONにしてからYAMLを作成すると良くなります)
--- item: - ownerId: "000000000000" groupId: sg-xxxxxxxx groupName: default groupDescription: default group ipPermissions: item: - ipProtocol: tcp fromPort: "0" toPort: "65535" groups: item: userId: "000000000000" groupId: sg-xxxxxxxx groupName: default ipRanges: [] ...
上記を定期的に下記スクリプトで実行することにより、
セキュリティグループのバージョン管理(Git)を行います。
#!/bin/sh /opt/suzuki/bin/commit-securitygroup git add /opt/suzuki/var/suzuki_suz-lab.com/git git commit -m "cloudpack" /opt/suzuki/var/suzuki_suz-lab.com/git
確認の為、セキュリティグループを変更し、上記を再度実行してgit diff HEAD^で差分を確認すると、以下のように、変更された部分を確認することができます。
diff --git a/securitygroup/ap-northeast-1.yaml b/securitygroup/ap-northeast-1.yaml index 719a63c..28bc7f6 100644 --- a/securitygroup/ap-northeast-1.yaml +++ b/securitygroup/ap-northeast-1.yaml @@ -55,13 +55,6 @@ item: item: - cidrIp: xxx.xxx.xxx.xxx/32 - cidrIp: yyy.yyy.yyy.yyy/32 - - ipProtocol: tcp - fromPort: "3389" - toPort: "3389" - groups: [] - ipRanges: - item: - cidrIp: xxx.xxx.xxx.xxx/32 ipPermissionsEgress: [] - ownerId: "000000000000" groupId: sg-xxxxxxxx