セキュリティグループの状態をテキストで取得で紹介した内容のアップデートです。

セキュリティグループをテキスト化するスクリプトは、上記で紹介したものを下記のように変更しています。

・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

こちらの記事はなかの人(suz-lab)監修のもと掲載しています。
元記事は、こちら