こんにちは、わたなべです。
先日、6月16日に、Nifty Cloudにもファイアウォール機能が追加されましたが皆さんもうお使いですか?
既に中の人による紹介記事も掲載されているので、ご利用されている方も多いのではないかと思います。
ルールをコントーロールパネル上で一元管理出来ますし、サーバーまで到達する前にフィルターされるのは安心なのでまだご利用されていない方は是非使ってみると良いと思います。
さて、このファイアーウォール機能はコントロールパネルからだけではなくAPIをサポートしており、公式のJavaSDKやCLIコマンドを使用すればAPI経由で設定が可能です。
という事で今回は、以前このブログで書いた非公式のPHP SDKにファイアーウォールAPIのサポートを追加したので紹介したいと思います。
追加されたファイアーウォール関連API
今回追加されたファイアーウォール関連のAPIは以下になります。
- AuthorizeSecurityGroupIngress
- CreateSecurityGroup
- DeleteSecurityGroup
- DeregisterInstancesFromSecurityGroup
- DescribeSecurityActivities
- DescribeSecurityGroups
- RegisterInstancesWithSecurityGroup
- RevokeSecurityGroupIngress
- UpdateSecurityGroup
指定したファイアウォールグループへ許可ルールを追加します。
ファイアウォールグループを新規作成します。
指定したファイアウォールグループを削除します。
指定したファイアウォールグループから、指定したサーバーをはずします。
指定したファイアウォールグループのログ情報を取得します。
指定したファイアウォールグループの設定情報を取得します。
指定したファイアウォールグループを指定したサーバーへ適用します。
指定したファイアウォールグループから許可ルールを削除します。
ファイアウォールグループの設定情報を更新します。
今回、非公式PHP SDKでは上記すべてのAPIに対応しましたが、この中でAPI経由で使用される事が多そうなAPIの使用方法を簡単に解説したいと思います。
ファイアウォールグループを使う
RegisterInstancesWithSecurityGroupとUnregisterInstancesWithSecurityGroupを使って、指定したファイアウォールグループをサーバーへ適用したり、外したりする事が出来ます。
サーバーを追加
ファイアウォールグループにサーバーを追加する場合、以下のように設定が可能です。 下記は、'apitest'という名称のサーバーに 'default(Linux)'を適用するサンプルです。
<?php
include_once('niftycloud.sdk.class.php');
include_once('services'.DIRECTORY_SEPARATOR.'niftycloud.class.php');
$apiparams = array(
'access_key' => "アクセスキー",
'secret_key' => "シークレットアクセスキー",
);
$api = new NiftyCloud($apiparams);
$params = array('GroupName'=>'default(Linux)', 'InstanceId'=>'apitest');
$result = $api->register_instances_with_security_group($params);
if ( $api->isError() ) {
echo "errorn";
} else {
foreach($result->instancesSet->item as $item) {
echo "instanceId:{$item->instanceId}n";
}
}
ファイアウォールグループ名と、適用するサーバー名を指定して'register_instances_with_security_group'を呼び出します。また、以下のように、InstanceIdに配列を指定する事で複数のサーバーを一度に適用する事も可能です。
...
$params = array(
'GroupName'=>'default(Linux)',
'InstanceId' => array(
'apitest1',
'apitest2',
)
);
...
サーバーを外す
サーバーをファイアーウォールグループから外す場合は、ファイアーウォールグループへの適用とほぼ同様ですが以下の様になります。
<?php
include_once('niftycloud.sdk.class.php');
include_once('services'.DIRECTORY_SEPARATOR.'niftycloud.class.php');
$apiparams = array(
'access_key' => "アクセスキー",
'secret_key' => "シークレットアクセスキー",
);
$api = new NiftyCloud($apiparams);
$params = array('GroupName'=>'default(Linux)', 'InstanceId'=>array('apitest'));
$result = $api->deregister_instances_with_security_group($params);
if ( $api->isError() ) {
echo "errorn";
} else {
foreach($result->instancesSet->item as $item) {
echo "instanceId:{$item->instanceId}n";
}
}
新規作成するサーバーにファイアウォールグループを適用
今回追加されたAPIではありませんが、サーバー作成時に指定したファイアーウォールグループを適用するオプションが追加になっています。 以下がサーバー作成時にファイアーウォールグループを適用するサンプルです。
<?php
include_once('niftycloud.sdk.class.php');
include_once('services'.DIRECTORY_SEPARATOR.'niftycloud.class.php');
$apiparams = array(
'access_key' => "アクセスキー",
'secret_key' => "シークレットアクセスキー",
);
$api = new NiftyCloud($apiparams);
$result = $api->run_instances(array(
'ImageId' => 1, // CentOS 5.3 32bit Plain
'KeyName' => '適用するSSHキー名',
'InstanceType' => 'mini',
'InstanceId' => 'apitest',
'AccountingType' => NiftyCloud::ACCOUNTING_TYPE_PAYPER,
'Admin' => null,
'Password' => 'rootのパスワード',
// Firewall機能が有効でない環境の場合は以下を指定するとエラーが発生します。
'SecurityGroup' => 'firewall01',
));
if ( $api->isError() ) {
echo "Errorn";
} else {
echo "{$result->instancesSet->item->instanceId}: {$result->instancesSet->item->instanceState->name}n";
}
SecurityGroupに適用したいファイアーウォールグループ名を指定する事で、作成したサーバーに適用されます。また、以下のようにファイアーウォールグループ名を配列で指定する事で一度に複数のファイアーウォールグループを適用する事が出来ます。
...snip
'SecurityGroup' => array(
'firewall01',
'firewall02',
)
...snip
SSL証明書関連API
ファイアーウォール機能と同時にリリースされたSSL証明書関連の機能の対応ですが、試験の為にSSL証明書を実際に取得するのはちょっと厳しいので今回は対応していません。 DryRunの様なオプションがあれば実装しやすいんですがねぇー。どうでしょうか(^^;?
まとめ
今回は以上です。繰り返しになりますが、ファイアーウォール機能を利用するとルールを一元管理出来ますし、サーバー作成時に設定済みのファイアーウォールグループを適用出来るのでかなり便利になると思います。
非公式PHP SDKは、githubで公開しております。今回紹介したAPI以外のファイアーウォール関連APIを利用するサンプルも含まれておりますので、是非使ってみてください。
最後に念のため…、非公式PHP SDKは私わたなべが個人的に開発した物ですのでくれぐれもNIFTYさんに問い合わせ等しないようお願いします。