share facebook facebook2 twitter menu hatena pocket slack

2016.02.29 MON

AWS CloudTrailをタダで可視化する

WRITTEN BY齊藤 愼仁

TrailDash01

シンジです。AWSの全操作ログを取得しておくと、実は裏でAWSが自分の環境を触ったりしているのも見えたりするのでかなり楽しいです。いやいや、事件事故が起きたときにもなにかと便利なので、CloudTrailを有効にしておくのは超オススメなのですが、有効にしたところで人間が見るには耐えないログファイルが大量に出てくるので、それを人に優しい形にしようとしてみたら、その手順が人に優しくなかったという話です。

ログの可視化にはTrailDashを使います

cloudpackでは、Logstorageとか、Splunkといった有償の最高なソフトウェアでログ解析しているのですが、個人利用ではかなり厳しい価格設定なので、TrailDashを使って無料で構築します。

前提として

TrailDashを動かすためのEC2にIAM Roleを紐付ける必要があるので、もし既存のサーバーでTrailDashも一緒に動かしたいのであれば、既にIAM Roleの紐付けが無い場合は、EC2の作り直しになります。
すだちブログがまさにそれで、一度AMIを取得して、EIPの紐付けを解いて(ダウン発生)、EIPを新しいEC2に付け直して(復旧)、ってな具合でやりました。(ELB使ってロードバランスしていないロードバランスすだちくんなのだ)

更に前提として

Dockerを使いますが、今日時点でのAmazon LinuxとyumでインストールできるDockerではTrailDashが起動してきません。で、いろいろやった結果、DockerをGithubから落としてきて、自分でMakeしてごにょごにょしてやる必要があります。これがマジで面倒(待ち時間が長い)

手順概要

  • AWS CloudTrailを有効にします
  • SNSの設定をします
  • S3バケットの設定をします
  • SQSの設定をします
  • EC2にIAM Role付けて起動します(今回はAmazon Linux)
  • Dockerをインストールします
  • Dockerを超絶最新版にします
  • TrailDashをインストールします
  • TrailDashの使い方を覚えようと努力します
  • 突如訪れる世界平和

まずはAWS CloudTrailを有効化する

AWSマネジメントコンソールから、AWS CloudTrailを選択すると、下の画面がでます。

TrailDash02

はじめましょう!
お好きな感じで入力して下さい。S3バケットと、SNS Topicは自動的に作成されます。便利〜

TrailDash03

SQSの設定をします

名前だけ決めたら、後はそのままでOKです

TrailDash04

作成されたキューをクリックして、キュー操作、SNSトピックへのキューのサブスクライブ、をクリック

TrailDash05

トピックを選択して、サブスクライブしましょう。

TrailDash06

でもって作成出来たキューを見ると、下の方にURLが書いてありますよね。
URL: https://sqs.ap-northeast-1.amazonaws.com/なんかここに数字/自分で決めた名前
これ後で使いますので控えておきます。

IAM Roleを設定しよう

今度はIAM Roleです。AWSマネジメントコンソールからIAMを選択して、左側メニューからロールをクリック。新しいロールを作成して下さい。
ロール名の設定を行いますが、この名前、二度と変えられないので、奇跡的センスを抜群に発揮して決めて下さい。

ロールタイプの選択は、Amazon EC2を選択して下さい。

TrailDash08

ポリシーのアタッチですが、厳密には以下のようになれば良いです。

{
  "Id": "AllowTraildashAccountAccess",
  "Statement": [
    {
      "Sid": "AllowTraildashBucketAccess",
      "Action": [
        "s3:ListBucket"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::<your-bucket-name>",
      "Principal": {
        "AWS": [
          "<TRAILDASH ACCOUNT ID>"
        ]
      }
    },
    {
      "Sid": "AllowTraildashObjectAccess",
      "Action": [
        "s3:GetObject"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::<your-bucket-name>/*",
      "Principal": {
        "AWS": [
          "<TRAILDASH ACCOUNT ID>"
        ]
      }
    }
  ]
}

シンジは手早く幸せな気持ちになりたかったので、こうしました。ごめんなさい。

TrailDash07

EC2を立ち上げます

今回は新規でEC2を立ち上げる想定にします。Amazon Linuxです。t2.microで十分です。
起動時に先程作成したIAM Roleをくっつけてやります。

TrailDash09

更に下の方に行くと「高度な詳細」といういかにもプロっぽい項目があるので、ここに以下のアレをアレします。

#cloud-config
write_files:
 - content: |
     repo_update: true
     repo_upgrade: true
     locale: ja_JP.UTF-8
     timezone: Asia/Tokyo
   owner: root:root
   path: /etc/cloud/cloud.cfg.d/99_mysettings.cfg
   permissions: '0644'
runcmd:
 - yum update -y

と書いてやります。こうすると、起動時に勝手にいろいろ最新版にしてくれます。便利〜
で、重要なのがセキュリティグループですが、SSH用の22番は自分のIPアドレスだけアクセスできるように閉じておきましょう。追加でカスタムTCPルールを追加して、7000番を空けておきます。これも接続元は自分のIPのみにしておきましょう。
なので、22と7000が自分のIPで空いてる、2つがあればOKです。

ここからはサーバーにSSHログインして作業です

sudo su -
yum install -y docker
service docker start

とりあえずDockerは起動完了です。起動させておきます。

Dockerを最高なDockerでドッカドッカする

これ、30分くらいかかるかもなので、みかんでも食べながら気長に待ちましょう。

yum install git make -y
git clone https://git@github.com/docker/docker
cd docker
make build

長かったぜ。終わったら次です。これはそこそこさくっといきます。

make binary

完成だぜ!!!
いま動いているDockerは要らない子なので停止させます。

service docker stop

最高のDockerを起動させる

まずは既存のDockerをリネームして待避させておきます

mv /usr/bin/docker /usr/bin/docker-iranaiko

最高のDockerを最高な場所に配置します

cp /root/docker/bundles/latest/binary/docker-1.10.0-dev /usr/bin/docker

最高の起動

service docker start

バージョン確認してみましょう

docker version

Client:
 Version:      1.10.0-dev
 API version:  1.22
 Go version:   go1.5.2
 Git commit:   312c826
 Built:        Mon Dec 21 23:29:56 2015
 OS/Arch:      linux/amd64

Server:
 Version:      1.10.0-dev
 API version:  1.22
 Go version:   go1.5.2
 Git commit:   312c826
 Built:        Mon Dec 21 23:29:56 2015
 OS/Arch:      linux/amd64

よろしい。

ようやくTrailDashのインストールです

SQSのURLだけ書き換えて下さい。

docker run -i -d -p 7000:7000 
    -e "AWS_REGION=ap-northeast-1" 
    -e "AWS_SQS_URL=https://ここにさっきメモったSQSのURLを書く" 
    -e "DEBUG=1" 
    -v /home/traildash:/var/lib/elasticsearch/ 
    appliedtrust/traildash

念のため、起動確認です

docker ps

CONTAINER ID        IMAGE                    COMMAND             CREATED             STATUS              PORTS                    NAMES
721ee5cb719a        appliedtrust/traildash   "/root/start"       About an hour ago   Up About an hour    0.0.0.0:7000->7000/tcp   hopeful_northcutt

ブラウザからポート7000でアクセスします

http://IPアドレス:7000

で、アクセスしてみてください。最高です。たぶん。

そのうちDockerのVersionがあがれば、Dockerをmakeしなくても済むはずです

DockerのGithubでのやりとりを見てたところ、バグ持ちで、エラーも同様でした。というわけで今回はわざわざdevの最新版を引っ張ってきたわけです。きっと時間が解決してくれます。

とりあえずこれでKibana3.1.2が起動してます

シンジはKibanaを使ったことが無いので使い方が分かりません!!そしてシンジはこっそりとLogstorageとSplunkに出戻りするのです。AWS Configも可視化できるし?
というのは冗談で、すだちブログにせっかく入れてみたのでこれからいろいろ試してみたいと思います〜

参考リンク

https://github.com/AppliedTrust/traildash

元記事はこちら

AWS CloudTrailをタダで可視化する

齊藤 愼仁

cloudpack 社内インフラ担当、情報セキュリティ責任者。HPCを経て現職に至る。無類の猫好きで、すだち君という名の猫を飼っている。