カテゴリー別アーカイブ: 技術ネタ

2014-07
09
11:23:02
AWS EC2のダイナミックIPを起動時に自動的にRoute 53へ登録してスタティックに利用できるようにしてみる


AWS EC2を使っている人なら重々承知しているように、EC2サーバーは再起動する度にパブリックIP(とプライベートIPも)は動的に割り振られるので毎回異なったIPが振られることになります。
これ、他のVPSに慣れていると割と面倒臭く、まあIP資源は有限なので有効に使うには仕方ないのも理解できるし、本当に固定したいならElastic IPを設定すればいいのだけど、何台も管理しているといろいろ面倒臭くなりますよね。

なんかつい最近NO-IPとかの外部Dynamic DNSサービスを使って固定したDNS名で扱えるようにする方法が紹介されていたような気がするのだけど、最近NO-IPがマルウェアの温床だとしてマイクロソフトが裁判所にドメイン差し止めを申し立てたなんて嫌なニュースがあったり、どうせなら自分のドメイン使いたいよねとか、そもそもAWSなんだからRoute 53で管理したいよね、と思うので、実は僕はEC2起動時にシェルスクリプトを実行してRoute 53へAWS API経由でNameタグをホスト名としてその時のIPアドレスを登録して、ダイナミックDNSのように(厳密にはプロトコルは違う)使用しています。
つまりNameタグとしてホスト名を設定できて(本当は別タグにしてもいいです)、SSHとかでずっと同じDNS名で指定できるようになります。
割と便利に気軽に使えるようになって満足しているので、本稿でちょっと紹介してみます。皆さんのご参考になれば嬉しいです。

と言いつつ実は元々はネット検索していろいろなチャレンジされているのを幾つか参考にして組み合わせつつ自分でも試行錯誤して作ったんですが、どれがどれだったかURLとか忘れてしまっているので、ここであらためて参考にさせて頂いた方々へ感謝申し上げたいと思います。直接ご紹介できなくて申し訳ないです。

Continue reading

2013-12
10
00:23:28
SQLインジェクション対策で大垣靖男氏は何を勘違いしていたか


以下のTogetterでまとめて頂いているが、大垣靖男氏と「何故氏はSQLインジェクション対策においてプリペアドステートメントの利用よりも入力データのエスケープ処理を優先するのか」について議論させて頂いた。

SQLインジェクション対策としてのプリペアドステートメントとエスケープについての議論

僕の疑問は一番最初の方にもあるが、「プリペアドステートメント+プレースホルダーで複雑な自作エスケープなどせずともシンプルにさほどの技術力も無く少なくとも『SQLインジェクション対策』としては機能するのに、何故そこまでエスケープ処理対応を一義に拘るのか」という点だった。

この優先順位度合いは以下のブログの部分からも明らかだ。

出力先のシステムが同じでも、出力先が異なる、を意識する

実際の開発に利用するコーディングルールでは出力先によって「API > エスケープ > バリデーション」の順番になる場合もありますが、セキュリティを維持するための重要度は「エスケープ > API > バリデーション」であることは変わりません

さて経緯は上記Togetterに譲るが、結論として何故氏はそのような無謀な主張を延々繰り返すか、氷解したような気がする。
少しツイートもしたが誤解があるかも知れないのでもう少し詳しく説明しておきたい。またこれは以外に面白い視点も内包しているかも知れない。

Continue reading

2013-09
04
06:44:48
ワンタイムパスワードの送付先にケータイメールは相応しくない


近年大手のWEBサービスも含めて所謂リスト攻撃などで不正ログインが多発するなどしており、一躍注目を集めているのが二要素認証(二段階認証)だ。通常のユーザーID/パスワードでの認証に加えて、その一時にだけ有効なワンタイムパスワード(OTP/One Time Password)を発行しこれも一致しないとログインを認めない方法である。
このワンタイムパスワードの発行方法またはユーザーへの送付方法には幾つかのパターンがある。
最も「厳しい」物理的なハードウェアトークンをユーザー毎に配布して表示される番号をワンタイムパスワードとして入力する方法(Paypalでの例)や、より簡易にスマホなどのソフトウェアでワンタイムパスワードを確認できる方法(有名なソフトウェアとしてはGoogle Authenticatorなどがある。但しサービスがこれらのソフトへ対応していないといけない)のほか、もっとも一般的には「ユーザーが別途指定したメールアドレスへワンタイムパスワードをメールする」方法がある。

ワンタイムパスワード自体は二要素認証のためだけの方法でも無い。ログイン時だけでは無く、例えば銀行サイトで他口座への振込などの資金移動をする際にワンタイムパスワードの設定をしていなければ操作できなくしている銀行も多い。これもまた近年高まっているセキュリティ保護の機運を反映したものだろう。

最近ではスマホなどモバイル環境の一般化によってか、「メールアドレスへのワンタイムパスワードの送付」パターンの場合にはPC用メールアドレスでは無く「ケータイメール」(すなわち携帯キャリアが提供しているメール)への送信を強く要請してくるようになった。
例えば三菱東京UFJ銀行や楽天銀行では最近になって「携帯メールでの登録」を勧める旨の記載が増えた。

三菱東京UFJ銀行 / インターネットバンキングのログイン時の本人確認方法を一部追加します。(平成24年2月12日(日)より)

楽天銀行 / セキュリティ強化のためのワンタイム認証のルール変更について

一方以下はGoogleでの二要素認証設定時の様子だ。ワンタイムパスワードの取得方法としてGoogle Authenticatorを使用することも出来るが、デフォルトではこのように各携帯キャリアのメールアドレスを指定することになっており、設定後は信頼できない端末からのログインの際はこのアドレスへワンタイムパスワードが送られる。

スクリーンショット 2013-08-02 5.19.49

前述の通り幾つかのバリエーションはあるものの、これらの例のように近年ではワンタイムパスワードは「ケータイメール」へ送付することが大変一般的になってきたと感じるし、実際多くの方がそのようにされているのでは無いだろうか。

しかしながらPCメールなどよりも「ケータイメール」をワンタイムパスワードの入手元とすることは果たして「より安全」な方法だろうか。

Continue reading

2012-10
23
01:23:25
Windowsの64bit版のシェアが32bit版に拮抗しつつあるっぽい


仮想環境ではもう触ってはいるんだけど、そろそろWindows8に乗り換えるかどうかは結構迷いどころ。僕はWindowsは開発機兼テスト機なので割と慎重にならざるを得ません。
また同時に今もっとも悩んでいるのは「32bit版のままで行くか、あるいは64bit版に乗り換えるか」です。

もちろん利用できるメモリ量などを考えれば64bit版の方が有利なのですが、実は開発で用いているVisual Studioには32bit版しか無かったのです。と言っても64bitOSでもWOW64環境で動くことは保証されていますし、32bitOSと同じく64bitOS上のVisual Studioでも32bit/64bitアプリ共に問題無くコンパイル可能です。
ただそれでもやはり「ユーザーが最も利用している、これから利用するであろう環境で」開発することは重要と考えています。
そこで「現時点で32bitOSと64bitOSそれぞれのシェアを調べてみよう」と思い立ちました。

Continue reading

2012-08
27
03:26:21
NASをRAID5ではなくRAID10にしていて助かった話


まあインフラ周りの仕事をしていてよくご存じの方には今更の話なんですが、近年家庭用のNAS(外付けHDDでもですが)も安く出回って一般ユーザーにも広まっており、何かの参考になるかなあと思ったので書いておきますね。

以前まともにバックアップしていなくて開発したソフトのコードを全損しかけた(笑)経験から、家庭用外付けハードディスクを幾つか渡り歩いた後、メーカー限らずあまりによく壊れるので(理由は熱暴走とか突如のHDD破壊とか様々です)、試しにRAID対応のNASを買ってみました。結構前のことで、2009年春頃のことです。
買ったのはバッファローのLS-Q2.0LS/R5という機種で、これを選んだ理由はあまり覚えていないのですが、 「値段手頃」で「その前に壊れたのがIOデータ製だったから」とかそんな程度の理由だったと思います。

いわゆるPCの定期バックアップと言うよりは普段使わないデータの保存先が主な目的で、一時期MacのTime Machineバックアップにも使用していましたがその後純正Time Capsuleを買ったのでその目的では使わなくなりました。また開発コードやコンテンツなども最新版をコピーしていましたが、同時にsubversionも使用していますので、基本的にはこれまでのデータの退避先ですね。

という状態で3年ほど何事も無く過ぎていたのですが、基本的に先日家に帰るとNASが停止していて、すぐには気付いていなかったのですがアラートメールが届いていました。
非常に分かりにくいメールでしたが(なので一般ユーザーだと何が起こったのか、分からないんじゃないかなあ。。)、どうやらRAIDを構成するディスクにエラーが発生し縮退運転に入り、また縮退運転時には自動停止する設定にしていたのでNASがシャットダウンされていたようです。

RAIDで運用している訳ですからエラーの出ているHDDを普通に交換すればいいだけなんですが、アラートメールだけでは詳しい状況が分からなかったので試しに起動し直してみると、意外にも「壊れたHDDは2台」だったことが前面のアクセスランプから判明しました。ここで多少血の気が引いていくのを感じたのを覚えています(笑)

一般的にRAIDと言われるとよく知られているのはRAID5では無いでしょうか。こちらにRAIDの種類については詳しい説明がありますが、RAID5というのは「パリティと呼ばれる、他の残りデータと組み合わせると欠損データを回復できる仕組みを用いた冗長化」が主な特徴になっています。このパリティは常にHDD1台分のデータが必要とされるのでRAID5を構成している1台のHDDが故障してもこれを交換すれば自動的にデータ復旧が行われて回復可能です。
しかしHDD2台が同時に破損するとデータ復旧は不可能です。


http://www.data-sos.com/raid/raid09.html より引用

しかし僕はすっかり忘れていたのですが、RAID10で運用していたのでした。

RAID10は、RAID1 + RAID0が命名の語源で、まず構成されるHDDは二つのミラーセットに分けられます。書き込みデータはRAID0と同様にストライピング(ミラーリングの単位で分散配置される)とともにRAID1のようにミラーリングセット間でミラーリングされます。パリティは無いのでRAID5より信頼性は劣るとされますが、同じミラーリングセット内で無い限り、二台のHDDが故障してもデータは保証されます。


http://www.data-sos.com/raid/raid015.html より引用

僕の場合はまさしく、「たまたま」この故障した二台のHDDは二つ存在したミラーリングセットそれぞれの一台ずつで、幸いにもHDD2台を交換することで正常にリビルドが行われ、元に戻すことが出来ました。良かった良かった・・・

では果たして、RAID5よりもRAID10にしておくべきなのか?

これは先に示したサイトでも詳細に説明されていますが、そう単純なことではありません。ここに記載した事例は「幸い良い方向に倒れた一つの事例」に過ぎません。
RAIDなどのバックアップ方法は「求める目的」と「許容できる障害範囲」(と場合によっては「パフォーマンス」「容量」も)によって選ばれるべきです。でも、そこの見極めが難しいんですよねえ。
先に書いたとおりですが、企業内利用ならともかく、個人利用だと目的や要件が利用しているうちに変わってしまうことは多いでしょう。するとRAIDも含めてバックアップ方針はそれに応じて変更することを常に考えた方がいいでしょう。

一般的には、RAID対応のNASを買う以上はほとんどの場合そのバックアップ内容に「信頼性」を求める場合がほとんどかと思います。しかし例えばRAID5にしていても、常にディスク状態をチェックして交換用ディスクを準備してすぐに交換できなければ(RAID5では1台が故障中にもう1台故障すればデータは全損します)RAIDを組んでいた意味がありません。また昨年の計画停電時には停電でRAIDのコントローラーやHDDがダメージを受けた例が多発したそうです。そうした場合で無くとも、極端な場合落雷や過電流などでHDDが全損する可能性もゼロでは無いはずです。

実は僕の場合、何故HDDが同時に2台故障したのだろうかと疑問だったのですが、よくよく調べてみると、実は1年以上前に故障したHDDの1台からエラーが発生したというアラートメールが届いていたのを見過ごしていました。ただアクセスランプは正常だったので恐らく自動的にエラーセクターは修復されていたのでしょう。しかしそもそも調子は悪かったはずで今回エラーになった際に同時に巻き込まれた?などと推測しています。しかし最初のエラーの際にディスクチェックや交換などを行っていればもう少し状況は変わったかも知れません。しかし個人での運用なんて「その程度」のものなのですよね。

逆に言えばRAIDなどハードウェアに頼り切るよりも、実は運用こそが重要と言えるかも知れません。
今回の件からは、例えばRAID対応NASよりは、例えば安く買えるRAID対応していないNASを2台並べて、またはNASに外付けHDDを増設して定期的に一方向バックアップでも十分かなあと思い始めています。
メディアバックアップも意外に馬鹿にはできません。最近は4層120Gに対応した書き込み型Blu-rayディスク(BDXL)もありますので、本当に重要なデータなら選択的にこれらを活用してもいいでしょう。
またプライバシーや情報漏洩上は問題も指摘されますが、1TBなどの非常に大きなデータで無い限りは、クラウドのバックアップサービスを選択しても良いでしょう。これは例えば自宅が火事や災害によって被害を受けることを想定した場合には非常に有効です。
上記は「無くなっては困るがもう頻繁には更新されない重要なデータ」には有効な手段でしょう。

蛇足ですが

実は今僕が使っているLS-Q2.0LS/R5に限らず、バッファローのNAS/外付けHDD用の交換HDDって、とっても高いんですよ!
数が出る製品でも無いので、アマゾンでも1台=2万円ほどしており、つまり今回は2台で約4万円も交換にかかってしまいました。。。
そもそもここまでコストをかけてHDD交換するか、別のNASに買い換えるか悩んだんですが、別のNASにした場合データ移行時に現在のNASで仮にもう1台HDDが故障した場合はもう全損なので、安全を取ってHDD交換/リビルドを選択してしまいました。つまり体よく「メーカー・ロックオン」されてしまった訳ですね。一応「出荷時に専用検査とエイジングテスト実施」とは謳っているんですが、あまりに高いでは無いですか、そもそもこのNASは45000円で買ったものなんですけども。なのでせめてあと3年は使えてくれないと困ります。。
そもそものRAID(Redundant Arrays of Inexpensive Disks)という名称の由来に反してませんかねぇ。。

幸い最近は専用で無くとも市販の安価なHDDで組めるRAID機も多く出回っていますので、皆様におかれては「交換ディスクは幾らで買えるか」もちゃんと確認してRAID対応NAS/外付けHDDを選ばれるようにオススメします(^.^)