2011年10月17日月曜日

セキュリティグループの状態をテキスト化&バージョン管理(Git)

スズキです。

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

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

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/output-securitygroup
cd /opt/suzuki/var/suzuki_suz-lab.com/git
git add .
git commit -m "cloudpack" .

適当にセキュリティグループを変更し、上記を再度実行し
"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

次は、これをGitWebで閲覧します。
--------
http://www.suz-lab.com

0 コメント: