メインフレームLinux+Chefで二要素認証システムを自動構築

IT・IT製品TOP > Key Conductors > 清水 大紀(日本アイ・ビー・エム株式会社) > メインフレームLinux+Chefで二要素認証システムを自動構築
この記事をtweetする このエントリーをはてなブックマークに追加

IT現場の道先案内人 Key Conductors

メインフレームLinux+Chefで二要素認証システムを自動構築

サーバー 2017/09/12

 前回はChefの概要を解説しました。シェルスクリプトだけではインフラ構築の自動化が難しいケースでも、Chefであれば効率よく自動化できることがご理解いただけたことと思います。

 今回は、実際にChefを用いてインフラを自動的に構成してみましょう。前回までと同様に「LinuxONE Community Cloud」の「Red Hat Enterprise Linux 7.2」の仮想サーバを使って実施します(仮想サーバの作成方法は第2回を参照ください)。

 今回は、Chefで自動構築するシステムには、今、クラウドアプリケーションのセキュリティなどで注目を集める「二要素認証」を取り上げます。サンプルも公開していますので、ぜひ、自動構築の手軽さを体験してみてください。

Webアプリ、クラウドアプリの「二要素認証」は必須だけれど実装は複雑?

 二要素認証はセキュリティ対策の1つです。異なる2つ方法でユーザーの身元を確認することによって、ユーザーアクセスの安全性を高めます。既に二要素認証の仕組みをご存じの方は、この段落をスキップしてください。

 従来であれば、「ユーザーID」「パスワード」による認証、もしくは公開鍵/秘密鍵ペアによる認証の片方だけを用いてユーザーの身元を確認していたかと思います。これに、さらに2段階目の認証を行うことで、正しいユーザーだけにアクセスを許可する可能性を大幅に高めることができます。

 昨今のセキュリティ脅威の高まりを受けて、「成りすまし」や「アカウントの乗っ取り」などの不正アクセスを防止する目的で、この二要素認証を導入したクラウドサービスが増えてきています。手軽に不正利用を防止できる認証ソリューションとして、多くの金融機関、中央省庁/自治体、医療機関でも利用されています。

 加えて、2017年5月30日に施行された改正個人情報保護法では、小規模な取扱事業者でも個人情報保護法が適用されることになり、二要素認証による認証強化は広く注目を集めています。

図1 二要素認証の仕組み

※会員登録いただくと図をご覧いただけます。
会員登録はこちら(無料)

図1 二要素認証の仕組み
表1 二要素認証の利用シーン

※会員登録いただくと図をご覧いただけます。
会員登録はこちら(無料)

表1 二要素認証の利用シーン

2段階目の認証

 1段階目の認証は従来通りの方法を利用するとして、新たに追加する2段階目の認証方法では、ユーザーの利便性が高い「ワンタイムパスワード」方式がよく使われています。この方式では、有効期限が数十秒〜数分程度の短いパスワードを生成し、有効期限内にユーザーが正しいワンタイムパスワードを入力できかたどうかを確認します。有効期限内に正しいワンタイムパスワードが入力されたときに限り、そのユーザーにアクセスを許可する仕組みになっています。

 ワンタイムパスワードによる認証にはさまざまな形態がありますが、多くの方がスマートフォン/タブレットを持つようになったことから、スマートフォン/タブレット上で簡単に実装することができる時刻ベースのワンタイムパスワードがよく使われています。

 時刻ベースのワンタイムパスワードを提供するアプリケーションはいくつもありますが、最もよく使われているGoogle Authenticator(Google認証システム)を紹介します。Googleのメールサービスである「Gmail」を利用している方であれば、既にご存じかもしれませんね。

 Google Authenticatorは、ワンタイムパスワードを提供するアプリケーションの一つです。あらかじめユーザーが所有しているスマートフォン/タブレットにアプリケーションを導入しておき、アクセスしたいシステムから発行された共通鍵をセットしておくと、後は自動的にワンタイムパスワードによるユーザー認証を行ってくれます。

図2 ワンタイムアプリケーションの利用

※会員登録いただくと図をご覧いただけます。
会員登録はこちら(無料)

図2 ワンタイムアプリケーションの利用

二要素認証の仕組みをChefで構築するメリット

 二要素認証は、重要なビジネスバリューがあります。二要素認証を取り入れることにより、成りすましやアカウントの乗っ取りなどのセキュリティの脅威から、ビジネスを守ることができるからです。

 そして、二要素認証を使うには、システムにアクセスするユーザーの身元を確認するという、非常に重要かつデリケートな処理に手を加える必要があります。加えて、二要素認証ができるようにする構築作業は複数のステップに分かれており、非常に複雑です。万が一、この作業を間違えると、システムに誰もログインできなくなってしまったり、設定漏れによるセキュリティ事故を引き起こしたりする恐れがあります。

 そこで、Chefを使って、あらかじめ作業を自動化するプログラムを開発し、稼働実績のある手順で、稼働実績のある設定ファイルを用いれば、ヒューマンエラーが入る余地がなくなり、安全かつ確実にセキュリティを確保するというビジネスバリューが得られるわけです。

Chef Cookbookは複雑な企業システムでも再利用しやすい

 今回のために、筆者のGitHubリポジトリに「SSHアクセス時に二要素認証を行うようにする構築作業を行うChef Cookbook」を用意しました。詳しくは、Chef CookbookのREADMEやソースコードを参照ください。後述する「表2 構築ステップ」を1つずつ行うように開発してあります。

Chef cookbook to set up Multi-factor authentication for SSH on LinuxONE with google authenticator(https://github.com/daiki-shimizu/mfa

 表2の構築ステップの右側に記述した「Chef Recipe(Chefレシピ)」とは、実際に実行するプログラム本体のことです。Chef Recipe 1個が、従来のシェルスクリプト1個に相当します。Chefでは、このChef Recipe単位で、どのプログラムを実行するかを指定できます。

 システム要件に応じて高度にカスタマイズされたエンタープライズ向けのシステムでは、必ずしも他システムで稼働実績のある設定手順や設定ファイルを全て適用できるわけではありません。そのような場合を想定して、構築ステップごとにChef Recipeという形でプログラムを分割して実装しているわけです。

 構築ステップを複数のChef Recipeに分割すると、実行したいChef Recipeを指定する手間が煩雑になります。そこで、他のChef Recipeを呼び出す機能を使って、複数のChef Recipeを一括実行するChef Recipe(install Recipeやuninstall Recipe)を用意してあります。

表2 配布しているChef Recipeと構築ステップ一覧

※会員登録いただくと図をご覧いただけます。
会員登録はこちら(無料)

表2 配布しているChef Recipeと構築ステップ一覧

二要素認証の設定

 今回Chef Recipeで公開している処理を整理したところで、ここからは二要素認証を行う環境の構築方法を確認していきましょう。一から二要素認証の設定を行う場合は、表3の6つの設定作業を行う必要があります。

 この中で最も難しいのが「4. 二要素認証の設定」作業です。この、最も手間の掛かる作業で、表2で紹介したChef Cookbookのちからを借りることにしましょう。

 これ以外の作業は、特に難しいところはなく、万が一、間違えたとしても、単純にやり直せばよいので、手作業で実施することにします。

表3 二要素認証の設定作業の流れ

※会員登録いただくと図をご覧いただけます。
会員登録はこちら(無料)

表3 二要素認証の設定作業の流れ
この手順のうち、もっとも手間が掛かるのが(4)二要素認証の設定だ

手順1:Chef Clientの導入

 Chef Clientの導入は、Chefを利用するサーバ上で1回だけ行う操作です。

 Chef Clientのrpmパッケージは、Chefのサイトで公開されていますので、通常のRPMパッケージ同様に導入します。導入したら、-vオプションを付けてchef-clientコマンドを実行して、正しくバージョン情報が表示されることを確認しておきます。

●Chef Clientの導入

[linux1@rhel72 ~]$ sudo rpm -ivh https://packages.chef.io/files/stable/chef/13.1.31/el/7/chef-13.1.31-1.el7.s390x.rpm
Retrieving https://packages.chef.io/files/stable/chef/13.1.31/el/7/chef-13.1.31-1.el7.s390x.rpm
warning: /var/tmp/rpm-tmp.iGnBSw: Header V4 DSA/SHA1 Signature, key ID 83ef826a: NOKEY
Preparing...                          ################################# [100%]
Updating / installing...
   1:chef-13.1.31-1.el7               ################################# [100%]
Thank you for installing Chef!
[linux1@rhel72 ~]$ chef-client -v
Chef: 13.1.31
[linux1@rhel72 ~]$

手順2:Chef Cookbookのダウンロード

 Chef Cookbookのダウンロードも、Cookbookを利用するサーバ上で1回だけ行う操作です。

 二要素認証の環境を設定するChef Cookbookを、筆者のGitHubリポジトリ上に登録しておきましたので、これをダウンロードします。

 Chefでは、Chef Cookbookを、~/chef-repo/cookbooksディレクトリの下に置くことになっています。このディレクトリを作成し、移動してからgit cloneコマンドを実行してください。正しくダウンロードできていれば、カレントディレクトリの下に、mfaディレクトリができているはずです。mfaディレクトリが確認できたら、元のディレクトリに戻っておきましょう。

●ディレクトリを作成してcookbookのクローンを置く

[linux1@rhel72 ~]$ mkdir -p chef-repo/cookbooks
[linux1@rhel72 ~]$ cd chef-repo/cookbooks
[linux1@rhel72 cookbooks]$ git clone https://github.com/daiki-shimizu/mfa.git
[linux1@rhel72 cookbooks]$ ls
mfa
[linux1@rhel72 cookbooks]$ cd ../..
[linux1@rhel72 ~]$

手順3:ユーザーIDの新規作成

 sudoできるユーザーID「linux1」で万が一、トラブルが発生して、そのシステムにログインできなくなってしまっては困ります。このため、二要素認証を行うユーザーIDは新規に作成しておきましょう。ここでは、ユーザーID「linux2」を作成するものとします。

●linux2ユーザーを作成する

[linux1@rhel72 ~]$ sudo useradd linux2
[linux2@rhel72 ~]$

 今回の二要素認証では、SSH公開鍵認証を使っているユーザーIDを想定しています。ご存じの方が多いかと思いますが、念のため、SSH鍵ペアを作成する手順を記述しておきます。

●SSHキーの作成

[linux1@rhel72 ~]$ sudo su - linux2
[linux2@rhel72 ~]$ ssh-keygen -t rsa

<… 表示されるプロンプトには空Enterを入力 …>

[linux2@rhel72 ~]$ cd .ssh
[linux2@rhel72 .ssh]$ cat id_rsa.pub >> authorized_keys
[linux2@rhel72 .ssh]$ chmod 600 authorized_keys
[linux2@rhel72 .ssh]$ cat id_rsa

<… 表示されるSSH秘密鍵をクリップボードにコピー …>

[linux2@rhel72 .ssh]$ exit
[linux1@rhel72 ~]$

 PC上で新規ファイルを作成し、クリップボードの中身をペーストしてASCIIファイルとして保存してください。この後、お使いのSSHクライアントでこのファイルを秘密鍵ファイルとして設定してください。もし、Puttyで鍵認証する場合は、puttygen.exeを使って、この秘密鍵をPuTTY用の秘密鍵ファイルに変換する必要があります。

 linux2ユーザーで仮想サーバにログインできることを確認できたら、ユーザーIDを作成するステップは完了です。

手順4:二要素認証の設定(Chefの利用)

 さてここからは、今回のテーマである二要素認証の設定をChefを使って行っていきます。

 今回、用意したChef Cookbookは、user_namesというパラメータで、二要素認証を設定するユーザーIDを受け取ることができます。そして、Chefには、パラメータを記述したJSONファイルの内容をChef Cookbookに渡してくれる便利な仕組みがあります。今回はこれを利用しましょう。以下のように、「二要素認証を設定するユーザーIDを指定するuser_namesにlinux2を指定する」という内容を記述したJSONファイルを作成しておきます。

 下の例ではviで編集した後、catコマンドで内容を出力しています。

●「mfa.json」の編集

[linux1@rhel72 ~]$ cd chef-repo
[linux1@rhel72 chef-repo]$ vi mfa.json
[linux1@rhel72 chef-repo]$ cat mfa.json
{
  "mfa": {
    "user_names": "linux2"
  }
}
[linux1@rhel72 chef-repo]$

 そして、このJSONファイルに加え、さきほど導入したChef Cookbook名とChef Recipe名を引数として、Chef Clientを実行します。install Recipeを使って、A〜Gまでの構築ステップを全て実行する場合は、以下のようにします。

●chef Recipeで表2のA〜Gの全てのステップを一度に実行する

[linux1@rhel72 chef-repo]$ sudo chef-client -z -j mfa.json -o "mfa::install"

 もし、一部のChef Recipeだけを実行したい場合は、カンマで区切って指定します。以下は構築ステップ4〜6までを実行する場合です。

●chef Recipeで一部の処理を指定して実行する

[linux1@rhel72 chef-repo]$ sudo chef-client -z -j mfa.json -o "mfa::update_sshd_config,mfa::create_PAM_google_authenticator,mfa::update_PAM_sshd"

 これで、Linux側で二要素認証の設定が行われました。Linuxの構築担当者の作業は以上で完了です。

手順5:ユーザーによるQRコードの表示

 ここからの作業は、ユーザーごとに実施します。linux2のユーザーになったつもりで、この後の作業を行ってください。

 まず、linux2ユーザーIDで仮想サーバにログインしてください。前のステップでlinux2ユーザーIDに二要素認証を設定しましたので、二要素認証に使うQRコードとシークレットコードが表示されるはずです。QRコードが画面いっぱいに表示されますので、あらかじめSSHクライアントのフォントを小さくしたり、ウィンドウのサイズを大きくしておくといいでしょう。

図3 画面出力のイメージ

※会員登録いただくと図をご覧いただけます。
会員登録はこちら(無料)

図3 画面出力のイメージ

 linux2ユーザーにログインしたタイミングで、フォントのサイズやウィンドウのサイズを制御できず、すぐにQRコードを使った認証などの手続きに進めないという方がいらっしゃるかもしれません。この場合は、ひとまずlinux2ユーザーでログインし、フォントのサイズやウィンドウのサイズを調整した後に、以下のコマンドを入力してください。新しい共通鍵が作成され、新しいQRコードやシークレット鍵が表示されます。

●改めて認証のためのデータを生成する

[linux2@rhel72 ~]$ /usr/local/bin/google-authenticator -t -d -W -u -f

手順6:アプリケーションの導入・設定

 linux2ユーザーでログインしたSSHクライアントの画面は閉じずに、開いたままにしてください。この間に二要素認証を行うアプリケーションを、お手元のスマートフォン/タブレットに導入してください。Google Authenticator自身のアプリケーションでもいいですし、Google Authenticatorをサポートしているアプリケーション(本稿執筆時点では「Authy」などがあります)でも構いません。アプリケーションの操作方法は、それぞれのアプリケーションの解説を参照してください。

 二要素認証用のアプリケーションを導入したら、そのアプリケーションを立ち上げて、QRコード、もしくはシークレットコードを取り込ませます。QRコードとシークレットコードの内容は同じですので、どちらを取り込んでも構いません。カメラが付いているスマートフォン/タブレットをお使いの場合は、QRコードを撮影するといいでしょう。カメラが付いていない、もしくは、うまくQRコードが撮影できない場合は、シークレットコードを手入力してください。

 なお、お手元のスマートフォン/タブレットにアプリケーションを導入したくない、ひとまず今は導入せずに先に進みたい、という方もいらっしゃると思います。その場合は、代わりに「emergency scratch code」を手元にメモしておいてください。emergency scratch codeとは、万が一、共通鍵をセットしたスマートフォン/タブレットが使えなくなったときの緊急回避策として、アプリケーションがなくてもログインすることができるワンタイムパスワードのことです。

 以上が完了したら、linux2ユーザーを全てログオフしておきます。

二要素認証でログインする

 これで全ての準備が整いました。早速、linux2ユーザーIDでログインしてみましょう。linux2ユーザーIDは当初、SSH公開鍵認証だけでログインできましたが、今回からはワンタイムパスワードが追加で求められるようになります。二要素認証が動作している証拠です。

●linux2ユーザーでSSHログインした時の画面出力の例

Using username "linux2".
Authenticating with public key "imported-openssh-key"
Further authentication required
Using keyboard-interactive authentication.
Verification code:

 「(6)アプリケーションの導入・設定」で、スマートフォン/タブレット上のアプリケーションに共通鍵を取り込んだ方は、そのアプリケーションを立ち上げて、設定されたlinux2ユーザーIDのワンタイムパスワードを表示させてください。30秒おきに表示される6桁の数字がワンタイムパスワードです。残り時間に余裕があるタイミングを見計らって、表示されている6桁の数字を入力してください。

 スマートフォン/タブレットを使わない方は、さきほど手元にメモしておいたemergency scratch codeを入力してください。5個のemergency scratch codeのうち、どれを入力しても構いませんが、一度入力したものは次回から使えなくなります。

 これで、linux2ユーザーとしてLinuxにログインできたはずです。  

二要素認証を「戻す」〜復旧の仕組みもCookbookにしておく

 二要素認証を設定した後に不意なトラブルが発生したため、急いで元に戻したい、という場合に備え、復旧用のChef Recipeを用意しています。復旧用のChef Recipeを実行することで、構築ステップで行った作業を戻すことができます。

●A〜Gまでの構築ステップ、全ての復旧作業を行う場合

[linux1@rhel72 chef-repo]$ sudo chef-client -z -j mfa.json -o "mfa::uninstall"


●D〜Gまでの構築ステップの復旧作業を行う場合

[linux1@rhel72 chef-repo]$ sudo chef-client -z -j mfa.json -o "mfa::restore_PAM_sshd,mfa::delete_PAM_google_authenticator,mfa::restore_sshd_config"

 復旧した後にエラーを修正したら、再び構築を行うことができます。正確な構築が求められるシステムでは、このような「復旧の仕組み」をChef Cookbookで実装しておくといいでしょう。

まとめ

 今回は、二要素認証を題材に、Chefの利用方法を学びました。二要素認証の設定のような、重要かつデリケートでミスが許されない作業については、人手で行うのではなく、Chefのような仕組みを用いて自動化しておくとよいということが分かったかと思います。Chefを利用するには、Chef Clientを導入したり、Chef Cookbookのダウンロードしたりする必要がありますが、特に難しい操作はありません。今回紹介したChef Cookbookを使うことによって、以下のようなメリットを得ることができます。

・構築自動化でヒューマンエラーを回避
難易度の高い二要素認証の設定作業が自動化され、構築手順が大幅に簡素化されたため、ヒューマンエラーを防ぐ上で大いに役立ちます

・復旧方法を自動化してトラブル対応を迅速に
二要素認証を設定した後に不意なトラブルが発生した場合でも、直ちに復旧することができます

・部品を組み合わせたカスタマイズを効率化
ステップ・バイ・ステップで二要素認証の設定作業が実装されているため、さまざまなシステム要件に応じて、高度にカスタマイズされたエンタープライズ向けのシステムでも適用することができます

 前回の概要編でも触れましたが、Chefを利用する際は、あらかじめ自動化する範囲をきちんと議論しておくことが重要です。Chefは「魔法のつえ」ではありませんから、人手で作業しても何ら問題のない作業を自動化しても、ビジネス上のメリットはありません。

 あらかじめシステムのオーナーやステークホルダーと会話をして、「自動化するとうれしい作業」「ぜひ自動化したいという作業」を洗い出してから、自動化に着手しましょう。

 自動化プログラムを開発する際は、シェルスクリプトで開発した方がよいのか、Chef Cookbookとして開発した方がよいのかも事前に見極めておくことが重要です。もし、Chef Cookbookとして開発した方が効率がよい場合は、Chefのチュートリアルや今回紹介したChef Cookbookを参考にしながら、Chef Cookbookの書き方を学んでいくとよいでしょう。下記リンクも参考になります。

参考リンク:
learn Chef Rally(https://learn.chef.io/tracks/writing-cookbooks#/

おわりに

 1回から10回にわたって、メインフレームLinuxに関するテーマを取り上げてきました。当連載は今回が最終回となります。

 最後まで読んでいただき、誠にありがとうございました。

 連載を通じて、最新のオーンソースソフトウェアを活用できる最高品質のプラットフォームとして、進化し続けているメインフレームLinuxのテクノロジーを体感していただけたのではないかと思います。第4回で紹介したように、現在、さまざまな領域で注目を集めるブロックチェーン技術もメインフレームLinuxの堅牢さや性能の高さが生きる領域の1つです。また、第5回から紹介してきたとおり、OSSのエコシステムや先進的な技術を取り込みやすい点もLinuxならではの特徴です。

 無償で試せる環境も紹介していますので、ぜひ、メインフレームLinuxの活用をご検討ください。

会員限定で「読者からのコメント」が読み書きできます! 「読者からのコメント」は会員限定の機能。会員登録を行い、ログインすると読者からのコメントが読み書きできるようになります。

会員登録(無料)・ログイン

Myリストへ

この記事をtweetする このエントリーをはてなブックマークに追加


この寄稿記事に掲載している情報は、掲載日時点での情報となります。内容は変更となる場合がございますのでご了承下さい。また、「Key Conductors」の寄稿記事及び当該記事に寄せられたコメントについては、執筆者及びコメント投稿者の責任のもと掲載されているものであり、当社が、内容の最新性、真実性、合法性、安全性、適切性、有用性等を保証するものではありません。


30009827


IT・IT製品TOP > Key Conductors > 清水 大紀(日本アイ・ビー・エム株式会社) > メインフレームLinux+Chefで二要素認証システムを自動構築

このページの先頭へ

キーマンズネットとは
オープンソースソフトウェアを活用したミッションクリティカルなシステムの提案活動に従事するセールスエンジニア。パブリッククラウド/オンプレミスを問わず、あらゆるシステムでインフラ構築/運用の自動化を推進するため、「Chef」技術コミュニティーのリーダーや自動化プログラムの開発リーダーなど、幅広い活動を展開している。

ページトップへ