Deep Security as a ServiceをAWS MarketPlaceで買ってみる

こんにちは、ひろかずです。

先日、AWS Blogにて、AWS Marketplace Update – SaaS Contracts in Actionが発表されました。
そのラインナップにDeep Security as a Service(以下、DSaaS)が含まれていたので、お試しついでに一筆書きます。

メリットと注意点

メリット

  • 何と言っても、その費用です。
  • 支払いがAWSに統合されます。
  • 時間課金が可能です。AutoScaleも何のその。(Annual除く)

注意点

  • サポートが、米国(英語)になります。
  • 国内サポートを希望の人は、ライセンス販売代理店から購入してください。
  • AWSアカウントに紐付けられるDSaaSアカウントは一つのようです。

工程

  1. 事前準備
  2. DSaaSをサブスクライブする
  3. DSaaSアカウントを作成する

0. 事前準備

まず、DSaaSをサブスクライブしたいAWSアカウントにログインしておきます。
当該AWSアカウントにDSaaSの利用料が課金されます。

1. DSaaSをサブスクライブする

AWS MarketPlaceにアクセスして、Deep Security で検索します。
Marketplace1.png

以下2つがターゲットになります。
一年間に起動する数が分かっている場合は、 Annual を選ぶ感じですね。
今回は、Trend Micro Deep Security as a Serviceを選択します。

  • Trend Micro Deep Security as a Service
  • Trend Micro Deep Security as a Service – Annual

Marketplace2.png

費用を確認して、Continueをクリックします。
オンプレミスにも対応しているんですね。
システム要件を鑑みると、Smallインスタンスの利用は避けるべきですね。
Software FeesにRegionの違いはないようです。
Marketplace3.png

続けて Subscribe をクリックします。
ちなみに、AWSアカウントがDSaaSを既にサブスクライブしている場合、以下のように表示されます。
Marketplace5.png

サブスクライブか完了すると以下のように表示されます。
Set Up Your Account をクリックして、DSaaSのアカウント登録を実施します。
Marketplace4.png

2. DSaaSアカウントを作成する

先の Set Up Your Account をクリックするとDSaaSのアカウント登録設定画面が表示されます。
重要な項目に絞って解説します。
DSaaS01.png

Company/Account

DSaaSアカウント名です。
一意な名称が求められます。
ログインに必要な要素です。

Email

登録後に接続情報メールが送られてくるメールアドレスになります。
デフォルト表示のようにメールアドレス以外を設定すると、接続情報メールは送られません。
その場合は、先のCompany/AccountEmail,Passwordを控えておきましょう。

Language

言語表示です。日本語にしておきましょう。

TimeZone

DSaaS管理画面で表示される時間のタイムゾーンです。
後からでも変更可能ですが、お好みで合せておきましょう。

ひろかずは、こんな感じで設定しました。
DSaaS021.png

Sign Upをクリックするとこのような画面が表示されます。
DSaaS03.png

しばらくすると、Emailに入力したメールアドレスにアカウント作成メールが送られてきます。
DSaaS04.png

一つ目のURLをクリックすると、DSaaS管理画面が表示されます。
パスワードを入力して、Sign Inしてください。
Emailにメールアドレスを設定していない場合、DSaaS管理画面からCompany/AccountEmail,Passwordを入力してSign Inしてください。
DSaaS05.png

気になるライセンスの状態を確認します。
画面上のダッシュボードタブをクリックして、一番下にライセンスが表示されます。
既に課金されているようですね。
DSaaS06.png

アカウントの詳細 をクリックすると、状態が確認できます。
なんと、初期配置されているデモサーバが課金対象になってますね汗
DSaaS07.png

デモサーバのAWS料金は課金されませんが、License Feesはかかってしまうので、デモサーバを無効化します。
コンピュータタブを選択して、デモサーバを右クリックします。
処理無効化をクリックします。
DSaaS08.png

確認ダイアログにOKします。
DSaaS09.png

ステータスが、非管理対象(有効化が必要)となっていることを確認します。
DSaaS10.png

ダッシュボード画面からアカウントの利用状況を確認すると、0台になってますね。
DSaaS11.png

以上で、Market PlaceでサブスクライブしたDSaaSを利用する準備ができました。
今日はここまでです。
お疲れ様でした。

続きを読む

PHPerだけどAWS STSを活用してSaaSをマルチテナント化した

本記事はcloudpack あら便利カレンダー2017の06/07(水)の記事です。

AWSアカウント:プロジェクト = 1:n なSaaSをβでリリースしてたけど、本番稼働にあたってAWSの請求情報わけられないじょん!
っていうヤバさを解決したい人生でした。

経緯

S3(Web) - EC2(API) - Device Farm
ユーザ認証:Cognito User Pools/DynamoDB
  1. ひとつのアカウント内のDevice FarmをSaaSで提供したい
  2. こんな感じのアーキテクチャ構想で組んで、これでいけるぜ!ってなった
  3. Device Farmには複数のProjectを立てることができる
  4. Cognitoに登録したユーザとProjectのヒモ付はDynamoDBで行っている
  5. サービスの課金形態的に、Projectごとの利用時間を計算する必要がある
  6. そんなことすっかり忘れてた!!
  7. 四則演算絶対やりたくない == ズレたときに燃えるのが目に見えてる
  8. Device Farmを別のアカウントにわけちゃおうぜ!!

どうやって実現したか

AWSには、他アカウントのリソースにアクセスする仕組みが用意されているため、それを使って実現しました。
STSの仕組みについてはこちらを参考にしてください。

  1. Cognitoのログインユーザーを特定して
  2. それをキーにDynamoDBからRoleのARNをひいて
  3. そのアカウントのDeviceFarmClientを取得する

こうすることで、

  • 請求情報はクライアント毎のアカウントに紐づくため請求処理も楽ちんに!!(ログインして請求情報見るだけ)
  • 今までプログラム上で「このProjectはこのユーザと紐付けて…」みたいな認証処理が不要に!! == セキュアに!

みたいなメリットが得られました!便利だね!すごいね2017年!

結論

AWS STS AssumeRoleつかったクロスアカウントアクセスは便利

コードのっけておきます

なんとなくstaticなSingletonで実装しました。

呼び出し側.php
<?php

use App\AwsClient;

$arn = ''; // なんかしらとってくる
$DeviceFarmClient = AwsClient::DeviceFarm($arn);

return $DeviceFarmClient->listProjects()->toArray();
呼び出され側.php
<?php

namespace App;

use Aws\CognitoIdentityProvider\CognitoIdentityProviderClient;
use Aws\Credentials\AssumeRoleCredentialProvider;
use Aws\DeviceFarm\DeviceFarmClient;
use Aws\Sts\StsClient;

class AwsClient
{
    private static $DeviceFarm;

    private function __construct()
    {
    }

    final function __clone()
    {
        throw new \Exception('__clone() is not allowed'); 
    }

    public static function DeviceFarm($arn = null)
    {
        if (!self::$DeviceFarm) {
            $assumeRoleCredentials = new AssumeRoleCredentialProvider([
                'client' => new StsClient([
                    'region' => 'us-west-2',
                    'version' => 'latest'
                ]),
                'assume_role_params' => [
                    'RoleArn' => $arn,
                    'RoleSessionName' => 'service-' . time(),
                ]
            ]);

            self::$DeviceFarm = new DeviceFarmClient([
                'region' => 'us-west-2',
                'version' => 'latest',
                'credentials' => $assumeRoleCredentials
            ]);
        }

        return self::$DeviceFarm;
    }
}

参考:http://docs.aws.amazon.com/aws-sdk-php/v3/guide/guide/credentials.html#assume-role-credentials

続きを読む