3月24日、サイバーエージェントのエンジニア・クリエイターによる技術カンファレンス「CyberAgent Developer Conference2022」を開催しました。本記事では、サイバーエージェントグループが使用するデータセンターの物理的なセキュリティについての取り組みで、サイバーラックの鍵をインテリジェントキーシステムに置き換えた経緯について紹介する「データセンターの物理的セキュリティを守るインテリジェントキーシステム」の様子をお届けします。
目次
■データセンター、インテリジェントキーシステム置き換えプロジェクトの背景
■設計
■プロトタイピング
■ハードウェア開発
■ソフトウェア開発
■プロジェクトの成果
■データセンター、インテリジェントキーシステム置き換えプロジェクトの背景
サイバーエージェントでは、データセンターのサイバーラックの鍵を社内製のインテリジェントキーシステムに置き換えました。今日はその背景や、どのようなものを、どうやって作ったのか、ご紹介していきます。
従来のデータセンターでは、1営業日前までにExcelファイルに会社名、氏名、作業対象、作業目的などを細かく記入し、メール送信。当日の入館後は、別の用紙「ラックの解錠申請」てに再び、会社名、氏名、作業対象などを記入、管理室に持参して、その用紙が管理室から解錠作業者に依頼され、やっとラックが開くという、非常に煩雑な手続きで時間のロスも発生しており、緊急時に1秒でも早く作業をしたいときには、大きな時間のロスになる懸念もありました。
手続きが煩雑なのでラックの開閉を最小限に抑えたくなり、ラックの開けっ放し、施錠忘れなどセキュリティー上のリスクもありました。新しいデータセンターも検討しましたが、電気錠の導入は可能なものの、Windows Serverが必要で、シングルポイントが多く信頼できない部分があり、緊急時の運用が煩雑になるうえ、導入費用が高く、価値に合わないことから断念しました。
そこで、自社で電気錠システムを検討したところ、技術的な障壁は特になく、課題を全てを解決できるうえ、導入コストも低く抑えられるとして、内製のキーシステムプロジェクトがスタートしました。
■設計
セキュリティ関連プロジェクトではセキュリティの堅さと運用のやりやすさの両方が求められます。そこで個人に紐付くデジタル鍵にすれば2つが両立できると判断し、個人鍵を軸に設計することにしました。
社内で内製するなら、自分たちに使い勝手の良いシステムに仕上げたいと思いました。要件は次の通りです。まずFeliCaカード認証。社員全員がFeliCaのICカードで認証しているためです。冗長構成で信頼性のあるもの、10年間メンテナンス不要、Linux OS対応していること。物理仕様では、RJ45、RJ11(データセンターでよく使う汎用のコネクター)が使えること、監視カメラ連携、Slack連携、LDAP連携、GUI管理などです。GUI要件では、施錠管理の閲覧、遠隔操作での解錠、履歴の保存と閲覧、権限の細分化がまとまりました。
詳細設計を3つのコンポーネント(青)で示します。ROCK Managerを略してROCKMと呼んでいます。左からROCKMカード、ROCKMコレクション、ROCKMエグゼ、この3つを基本構成として設計しています。
左のROCKMカードはカードキーを読み取り、施錠対象のラックを指定します。右のROCKMエグゼはラックのドアの開閉状態の監視と、ラック電気錠の解錠を実行します。真ん中のROCKMコレクションは認証やAPIの連携と、ログの記録です。
次に物理、キーパッドのデザインです。開けたいラックの番号をスイッチで指定して、ICカードで認証します。組み立て図で示すと鍵の解錠信号と、ドアの開閉状態を検知する、信号制御装置となります。19インチラックに収まるようにデザインしています。
選定したパーツはこちらです。産業用USBのIO Module、USBのInput Module、産業用の小型PC、抵抗器など部品総数1054点、膨大な数になりました。
部品を選定してコスト計算したところ、ROCKMカードは15万円強、ROCKMエグゼは41万6000円ほど。共通パーツは15万円強で、合計で72万8000円。非常に低コストで製作ができると試算ができました。詳細設計は、この他にも回路図、フローチャート、API仕様DBスキーマー、GUI画面などをまとめましたが、割愛させていただきます。
■プロトタイピング
プロトタイピングでは実物と同じパーツを使用して、小型の模型を作成します。目的はカードリーダーの動作確認、ラックの開閉センサの配置と動作の確認、電気錠の開閉動作確認、コネクターの接続性と配線の確認、ステータスLEDの色と配置の確認、強制解錠の運用手順などです。こちらは信号制御回路のプロトタイプです。パワーリレーを経由してLEDを点灯させるという、単純なものです。
次にこちらが、信号中継装置のプロトタイプです。12ボルト電源で動作し、上流にはRJ45 端子、下流にはRJ11端子があります。RJ11には電気錠のソレノイド、電磁石、あと入力としてセンサの端子が付きます。
各パーツの配置や動作、運用手順に問題がないか模型で確認しました。プロトタイピング当時、解錠システムが故障したときは、写真にあるような強制解錠キーで強制解錠をする設計でした。しかし後に鍵付きの電気錠を採用するという設計に変更しましたので、この鍵は設計から削除しました。
■ハードウェア開発
プロトタイピングで見直すポイントを設計に反映し、実際に本番環境で設置するハードウェアを開発します。対象ラックの番号を指定するキーパッドはユーザーが接する機会が最も多い大事なコンポーネントですので、分かりやすく、使いやすく、美しく、頑丈に作らないといけません。
キーパッドのベースとなる筐体では、ちょうどいい大きさのアルミの傾斜ボックスを見つけました。ここにスイッチとカードリーダーを配置します。
次にGoogleドライブの図形描画で、配線図を作ります。裏から作業するので、配置図は反転します。右利きの人が操作しやすいようにデザインしています。印刷して位置決めをしたら、紙の上からポンチでへこみを付けます。
ポンチのへこみを足掛かりに16ミリの穴をホルソーで開けます。穴を開けた所にはスイッチを取り付け、配線します。下の写真はグランドを通し終わったところです。
産業用の小型PCと接続して、ラベルを貼り付けて完成です。オルタネイトスイッチは左側の青がラック番号の指定で、右の赤がラックの前面、背面を指定するためのスイッチです。スイッチはフルメタル性で繰り返しの仕様に耐える頑丈さと、UXに配慮した、大きいLEDの付いている高級品を採用しました。一粒が大体400円ぐらいです。スイッチの配置はフロアーを上空から見たビューで、直感的に作業できるように配慮しています。1枚のラックドアから、最大60枚のラック全てを1回のカードの操作で開錠できます。
次に開錠信号の制御とラックのドアの開閉を検知するセンサ部分です。30本のラックそれぞれに配置する信号中継装置と、これらをまとめる信号制御装置です。スライドの緑色の部分を組み立てます。
4台のUSB IOモジュール、30ポートのRJ45 コネクターを配置して、位置関係と配線の長さを確認します。RJ45端子とピンの端子をハンダで結線している模様がこちらです。
結線が終わると完成です。インプットが60チャンネル、アウトプットが60チャンネル、RJ45で接続します。製作時間は大体2週間でした。
次に信号中継装置です。電気錠を動かすためのリレー入力が2チャンネル、ラックドアのセンサから出力するリレーが2チャンネル載るだけの単純なものです。ハンダ付けが終わるとケースに入れます。32個同じものを作りました。
右側の黄色い線がRJ45端子です。センサの入力が2チャンネル、開錠信号入力が2チャンネルです。下に見える白い2本の線はラックの前と後ろに結線され、センサの入力と解錠の出力のチャンネルです。LEDは赤がドアの開閉状態を示すセンサ、緑の2つが開錠信号、青が電源です。こちらは製作期間が4日間、32個すべて制作をしました。
続いて電気錠です。ラックメーカーから純正オプションで電気錠がラインアップされていましたので、標準のカギからアップグレードしました。仕組みは簡単で、電気を流すと電磁石でボルトが引っ込み、電気が流れている間だけドアが開けられる仕組みです。
次にリードスイッチです。ホームセキュリティーの窓センサで使われているものと同じで、Amazonにてワンセット140円程度で購入しました。
■ソフトウェア開発
ソフトウェア開発ではソフトウェアモジュールを開発して、モジュールを各コンポーネントに導入します。各コンポーネントを設置、接続して、最終調整や修正後に完成です。
まずはUSBのIO Moduleです。入力機能はキーパッドの読み取りと、ラックの開閉のセンサの読み取りです。出力機能はラックに解錠の信号を送ります。開発環境はC/C++。Windows版は4日間、Linux版は約1日で開発しました。入力制御のデモでは、デバイス名を引数にしてゲットコマンドを渡すと、各チャンネルの入力状態を0または1で取得できます。
こちらの入力のデモ画面では、チャンネル1とチャンネル3の接点がクローズ、つまりONの状態で、読み取りします。
こちらの出力のデモ画面では、対象のチャンネル4を10秒間通電するScriptを実行しています。このような制御を組み合わせ、特定のラックの電磁石に電流を流して、カギを開けます。
次にFelica Card Moduleです。Felica CardのIDを読み取り、一定間隔でポーリングして、読み取り内容を通知します。開発環境はC言語で、開発期間はおよそ半日でした。常駐プロセスを起動している状態で、Felica Cardをリーダーにかざすと、一意のIDを読み取り標準出力します。
続いて、UI、API、バックエンドです。10年間メンテナンスフリーでの稼働を目標としていますので、安定していて枯れた言語のPerlで作りました。画面左がユーザー管理画面で、右がラックの解錠状態を確認するビューです。ラックのドアが開いていると、黒く示している部分が赤く点滅して、どこが開いているのが一目で分かります。開発期間は大体9日でした。
次に外部APIモジュールです。Slackと連携して、ラックドアの開閉状態や解錠操作などのイベントをメッセージで通知して、管理者間で共有します。監視カメラとも連携をして、異常操作発生時にはカメラ映像をSlackに投稿します。監視カメラの映像は映像のスナップショットを取得するHTTP APIが実装されていますので、簡単にロックマネージャーと連携できました。
■プロジェクトの成果
プロジェクトの成果は、稼働時間が約1266日、イベント処理件数が31252回、ダウンタイムが103分、稼働率が99.994パーセントでした。低コスト制作にしては、十分な安定性です。
運用負荷を低減した成果もあります。インテリジェントな解錠と施錠で複雑なワークフローや物理の鍵は不要になり、待ち時間もなくなりました。GUIによるリモート化で、施錠状態の確認、リモート解錠も可能となり、運用負荷低減の成果につながりました。
セキュリティーの強化も挙げられます。個人に紐付く認証ですので、権限の細分化、監視カメラやSlackのリアルタイム連携ができるようになったほか、個人のイベントに対して詳細なロギングも可能となりました。これにより、施錠忘れ、鍵の紛失、権限の違反、不正操作など、インシデントの発生件数はゼロ件に抑えられています。
次にコスト効果です。専用の1Uラックサーバーが不要となり、Windows不要、OSのライセンスも不要、自作ハードウェアの圧倒的なコストパフォーマンスを得られました。既存製品と比較して、総額約1千万円以上のコストダウン効果を出せました。
平野が所属するCyberAgent group Infrastructure Unit(CIU)は、プライベートクラウドの構築・運用を軸に、様々なマネージドサービス開発や、映像スタジオでの映像配信に関わる開発などを通してサイバーエージェントの事業を支えています。
CIUには多様な専門性を持つエンジニアが在籍しており、一緒に働いていただける仲間を絶賛募集しております!ご興味のある方は、ぜひ以下採用ページをご覧ください。
▼CIU募集職種一覧
https://hrmos.co/pages/cyberagent-group/jobs?category=1614086825291923456
「CyberAgent Developer Conference 2022」のアーカイブ動画・登壇資料は公式サイトにて公開しています。ぜひご覧ください。
https://cadc.cyberagent.co.jp/2022/
■採用情報
新卒採用:https://www.cyberagent.co.jp/careers/special/students/tech/?ver=2023-1.0.0
キャリア採用:https://www.cyberagent.co.jp/careers/professional/