AWSのアカウントをGitHubにpushしてしまった…

ことの起こり

昨日うっかりとしたミスからGitHubの公開リポジトリへAWSのアクセスキーIDとシークレットキーをpushしてしまいました。理由は、.zashrcに環境変数としてAWSのアクセスキーIDとシークレットキーを設定している状態で.zahrcをgit管理するためにpushしました。

pushしたとたんにメールが送信されてきた

GitHubへpushしたとほぼ同時にメールが送信されてきました。たまたま、一段落したのでPokemon GOをはじめようとしていたため、手元にiPhoneがありメールにすぐ気づきました。私信ではないので全文を載せておきます。

  • 件名

    I think I found your aws credentials

  • 本文

    Hi, It looks like you put your aws credentials on github here: https://github.com/yoichiro-manabe/dotfiles/commit/.....

    If these are actually aws credentials, you shouldn't post 'em on github. I found it, so someone else probably did too. If these are real, you should do the following:

    1. You should first change your aws credentials. As soon as you push code to Github, you should treat any exposed credentials as compromised. This page describes how to delete and reset aws credentials: http://docs.aws.amazon.com/general/latest/gr/managing-aws-access-keys.html
    2. Look at your account to see if anyone has already started to use it. Go through all the AWS services to make sure no one messed with anything else. (in particular look for ec2 instances in all the regions). An easy way to know where to look is to go to your billing page and view all the areas that accumulated charges for the month.
    3. If you see any suspicious activity, contact aws support, and shut down the servers that the hacker has set up.
    4. Then you should use a safe method to manage your credentials in your code (i.e. by using env variables or a config file that is ignored through .gitignore)

    I'd be happy to hear any feedback or questions you have about this email. And, if you want to never get an email like this again, let me know, and I'll make sure that you are never emailed again.

    Best, Michael

    P.S. If you are wondering how I found your credentials, I made a program that scans through github looking for aws credentials. When it finds one, the program sends an email (this one) to the person that made the commit.

このメールはmKurrels/testHelpfulOwlにあったtestHelpfulOwlリポジトリにあるとおり、GitHubにAWSに関する情報を公開すると数秒でメールが送信されてくるサービス?から送信されていたメールでした。

どのようなアルゴリズムで検出しているのかなどはわからないですが、このメールのおかげで私は助かりました。とても感謝しています。

対応

とりあえず、次のことを行いました。

  1. IAMアカウントに関連するアクセスキーIDとシークレットキーを無効化のあと思い立って削除
  2. IAMアカウントのアクセスアドバイザーを確認してサービスへのアクセス状況の確認
  3. 請求情報の確認
  4. すべてのリージョンのEC2インスタンスで知らないインスタンスがないかの確認
  5. GitHubのリポジトリの削除

今考えると、1についてはIAMアカウントに関連するアクセスキーIDは無効化にする方が良かったのかもしれません。やはりそのときになると「とりあえずこうしよう」と思いついたことを行ってしまうので良くないです。

ここまでで、とりあえず特におかしなことはなかったのでいったん様子を見ることにしました。

今後の対応

今回のことは正直なところ自分がやらかすとは思っていませんでした。ただ、冷静に考えるとまず間違いなくやらかしそうなことでした。GitHubにpushすることはごくごく普通にあることです。

何が書いているかすべて把握していないけど、個人の物だからと軽い気持ちでpushしたのが今回の事象で、個人の環境だけであったことは不幸中の幸いでした。

とりあえず、うっかりGitHubに公開したを防ぐ方法はprivateリポジトリを利用することくらいしか思いつかないので、いったんそれを実践します。公開するときはセルフレビューしてからにしようと思います。

あとは、公開してしまったときに影響範囲を小さくするためのアカウント情報の管理を考える必要があります。

さいごに

うっかりミスを通知してくれた Michael さんに感謝します。彼が言うようにこのようなメールを受信することがないようにしたいです。

また、QiitaやTwitterで何度か話題になっているインシデントですが、対岸の火事と思わず自分のこととしてとらえるようにしたいと思います。

dhtmlXGridでコンボボックスを利用する

こんばんは。beaglesoftの真鍋です。

dhtmlXGridの設定をXMLで行うときに、列の設定としてcomboを指定するとコンボボックスのオプションは2通りの設定を行えます。

  1. XMLに直接設定する。
  2. XHRなどでGridの行ロード時に取得する。

2のケースはコンボボックスに指定する値をXMLファイルで取得することで可能です。

一方、1のケースではXMLの設定としてxmlcontent="1"を指定する必要があります。この指定をしないと、行に指定されたオプションの値(下のケースでは0~3)が表示されコンボボックスの値が正しく表示されません。

<column width="150" type="combo" align="center" sort="str" editable="false" xmlcontent="1">種別
    <option value="0">日単位</option>
    <option value="1">時間単位</option>
    <option value="2">月単位</option>
    <option value="3">一括</option>
</column>

ちょっとしたことなのですが、最初のうちは嵌まりどころだと思うので注意が必要ですね。

参照先

Integration with dhtmlxCombo DHTMLX Docs

xmlcontent - in this case options can be defined directly in grid XML;

tslintのインストール

こんにちは。beaglesoftの真鍋です。

最近はRailsとTypeScriptでの開発が中心になってきました。TypeScriptはJavaScriptを書いていることを忘れさせてくれるのですが、そうはいってもきちんとやることをやる必要があるなと思うことがありましたので、規約をチェックするためにTslintをインストールすることにしました。

TSLint

なお、以下の手順はあらかじめTypeScriptで開発できる環境が整っていることを前提とします。

インストール

tslintのインストールはnpmで行います。すべてのプロジェクトで利用するのでシステムグローバルにインストールします。

$ sudo npm install -g tslint typescript
[sudo] password for ymanabe: 
/usr/local/bin/tslint -> /usr/local/lib/node_modules/tslint/bin/tslint
/usr/local/bin/tsc -> /usr/local/lib/node_modules/typescript/bin/tsc
/usr/local/bin/tsserver -> /usr/local/lib/node_modules/typescript/bin/tsserver
/usr/local/lib
├─┬ tslint@3.13.0 
│ ├── colors@1.1.2 
│ ├── diff@2.2.3 
│ ├─┬ findup-sync@0.3.0 
│ │ └── glob@5.0.15 
│ ├─┬ glob@7.0.5 
│ │ ├── fs.realpath@1.0.0 
│ │ ├─┬ inflight@1.0.5 
│ │ │ └── wrappy@1.0.2 
│ │ ├── inherits@2.0.1 
│ │ ├─┬ minimatch@3.0.2 
│ │ │ └─┬ brace-expansion@1.1.6 
│ │ │   ├── balanced-match@0.4.2 
│ │ │   └── concat-map@0.0.1 
│ │ ├── once@1.3.3 
│ │ └── path-is-absolute@1.0.0 
│ ├─┬ optimist@0.6.1 
│ │ ├── minimist@0.0.10 
│ │ └── wordwrap@0.0.3 
│ ├── resolve@1.1.7 
│ └─┬ underscore.string@3.3.4 
│   ├── sprintf-js@1.0.3 
│   └── util-deprecate@1.0.2 
└── typescript@1.8.10 

tslint.jsonの生成

インストールが完了したら、設定ファイルを作成します。

$ cd /path/to/project
$ tslint -i 

これで /path/to/project にtslint.jsonが作成されます。今回はTypeScriptで今すぐ使える実践的『ECMAScript 2015』 | HTML5Experts.jpを参考にして"use-strict"のチェックを行いたいと思ったのでデフォルトのtslint.jsonに追加しました。

use-strictを導入したtslint.config

実行する

設定ファイルの作成が完了したら実際に実行してみます。何も引っかからなければ特に何も表示されません。

$ tslint -c ./tslint.json app/assets/javascripts/common/dhtmlxHelper.ts
app/assets/javascripts/common/dhtmlxHelper.ts[7, 1]: missing 'use strict'

lintでチェックした内容は以下の通りです。

/// <reference path="../../../../typings/index.d.ts" />

declare var dhtmlXCalendarObject: any;

export namespace common.dhtmlx {

// ↓ここをコメントアウトした
// "use strict";

    /**
     * このモジュールはDHTMLXライブラリのサポート用クラス
     */
    export class DhtmlxHelper {
...
    }
}

確かに"use strict"が設定されていない場合にはエラーが表示されます。

RubyMineでの設定

今回はIDEとしてRubyMineを利用しているので、その設定もあわせて確認します。

メニューの File -> Settings から Settingsを表示して、Languages & Frameworks > TypeScript > TSLint を表示します。

表示した画面のEnableチェックボックスにチェックし、TSLint package のドロップダウンをクリックして表示される内容を選択します。また、Configuration fileでは Search fo tslint.json を選択します。

rubymine_tslint.jpg (112.5 kB)

これで対象のファイルを開くとこの通りエラーが表示されます。

rubymine_tslint2.jpg (14.5 kB)

あとは、CIの中でチェックをするなどすれば良いのではと思います。その辺はもう少し後で試そうと思います。