最強のセキュリティでAWSマネジメントコンソールにアクセスする方法で紹介されている「ヌーラボ社のBacklogと連携しており、アクセス記録が残る仕組みになっています」について、問い合わせがあったようなので、詳細について書いてみたいと思う。
社内で作ったAWSアカウントを管理するツール(以下、管理ツール)からログインするときには、シングルサインオン(以下、SSO)をしている。ここでは、SAML認証という認証方式を使っている。
SAML認証
ここでは、説明に必要な最小限の仕組みを簡単に解説する。
ユーザIDを管理している、アイデンティティープロバイダー(以下、IdP)として、Active Directoryを使っている。これと、PingFederateというID連携を容易にしてくれるシステムを使って、自社制作の管理ツール(Webアプリケーション)の認証を実現している。
SAML認証は、Webシステムの認証情報を一元管理できるのが特徴の一つで、AWSをはじめ、Google Appsや、Office365、Dropbox、Slackなどのサービスが対応している。エンタープライズ向けのWebサービスは、結構な割合で対応している。
また、SSOを実現できるという特徴もある。
ブラウザでWebアプリケーション(サービスプロバイダ、SP)にアクセスした際に、SAML認証をしようとすしてSPからIdPに対して認証のリクエストが行われる。その際、まだ認証されていない場合は、たとえばHTMLのフォームを使ったパスワード認証を実施する。IdPで認証できたら、その結果をSPに連携する。
SPから認証の要求があったときに、すでに認証されている状態である場合には、再び認証要求はなされずに、認証済みであることが、SPに連携される。それによって、ユーザとしてはセッションが有効である間は、複数のSPへのアクセスに対して、IDやパスワードを入力する必要はなくなる。
Backlogとの連携
管理ツールからAWSにログインするときにも、SAML認証を行う必要がある。AWS側は、IAMの機能としてSAML Providerというのがあり、そちらを設定すれば使うことができる(これについても詳細は別途書こうと思うが、今回の話にはあまり関係ないので省略)。
SAML認証はブラウザベースでの認証が想定されている方式(*1)で、認証をする際にはIdPに対して、HTTPSのリクエストを発行している。
(*1 だと思う。何しろ、プロトコルがWebのフォームを前提としている節がある。)
このリンクをクリックすると、以下のようなダイアログが表示される。
「Exist Backlog Issue Key」とラベルがあるところに、Backlogの課題キーを入力すると、Backlog APIを使って、そのキーに該当する課題の情報を取得し、課題の件名をDescrptionに埋めるようになっている。これが有効でないと、ログインするボタンが押せないようになっている。
また、サーバ障害による緊急対応など、Backlogに課題がない場合は、Descriptionに任意の理由を記入することで、ログインする際に自動的に課題を作成するようにもなっている。
「Send」ボタンを押すと、ajaxを使い、管理ツール側に対して、必要な情報とともにリクエストが発生する。管理ツールでは、入力されてきた情報をログに書き込み、いつ、どのログインユーザが、どの課題を元に、どのAWSアカウントに、どのロールでログインしたのかが記録される。
Backlogの課題キーの部分は、Backlogの当該課題へのリンクになっているので、チェックも容易である。
それと同時に、ブラウザで別ウィンドウを開いて、AWSへのログインリクエストを送信する。ログインリクエストは、SAML認証を経て、AWS Management Consoleにログインに至る。
ポイントは、管理ツールを中心にして、IdPやBacklog、AWSとの連携を行っているという点だろう。AWSへのログインをするためのURLは、ブラウザから送られてくるパラメータに応じて、管理ツールから発行されるようになっているし、そのリクエストを出す前に、管理ツールを経由してBacklog APIを使い、課題の有無のチェックや、新規課題の追加を行っている。
なお、Backlog APIを実行するユーザは、管理ツールで管理されているユーザである。Backlogに管理ツール用のユーザを作り、そのユーザのAPIキーを発行している。このユーザは、すべてのBacklogプロジェクトに参加している。
まとめ
SAML認証は、HTTPSをベースに利用できるID連携のためのプロトコルであるため、Webアプリケーション間で連携を行うのは、比較的容易である。Web APIを使えるサービスは、このような連携ができるため、アイデア次第でより便利に利用できるだろう。Backlogだけでなく、他のサービスとも連携して、もっと便利にできればと思う。