インターネットのセキュリティ関係の単語について、調べたことをメモしておきます。
自分のためのメモなので、単語の関連性や順番に規則はありません。
認証と認可
SSOやMFAの仕組みを調べていると必ず出てくる「認証」と「認可」の違いについてまとめます。
「認証」とはサービスにログインするユーザが「誰であるかを確認・特定する」ことです。認証方法としては、パスワード認証・生体認証・SMS認証などが挙げられ、多要素認証(MFA:Multi-Factor Authentication)は、これらの認証方法を2つ以上組み合わせることを言います。
一方、「認可」とは認証済みユーザに対して、特定条件下においてリソースに対する操作権限を与えることです。ユーザAはリソースの作成・削除・閲覧が可能であるが、ユーザBはリソースの閲覧しかできないなど、ユーザ・グループに応じて操作権限を変更することが可能です。
基本的に「認証」と「認可」は相互運用することがセキュリティ上求められ、ほとんどの場合相互運用されます。それぞれの機能を実現する技術としては、下記に挙げるOAuth、OpenID Connect、SAMLが代表的です。
OAuth2.0
OAuth2.0は認可を行うためのプロトコルであり、アプリケーションが利用可能なプロトコルです。
例えば、Facebookに写真を投稿すると自動でTwitterで投稿されたことをツイートする機能に利用されています。この例では、ユーザがFacebookに対してTwitterでツイートすることを許可しており、FacebookからTwitterへのアクセスにOAuthが利用されています。
ほかにも、Googleアカウントが持っている情報(住所・連絡先等)を、異なるWebサービスに提供することを許可するときにも利用されています。
OpenID ConnectとSAML
OpenID Connect(OICD)とSAMLは認証を行うための代表的なプロトコルです。
例えば、TwitterへのログインのためにGoogleアカウントを利用できる仕組みに利用されています。TwitterにログインするユーザがAさんである、ということを認証するために、AさんのGoogleアカウントを利用されていることになります。
OICDはOAuthに認証の機能を追加する形で2014年にリリースされました。Webアプリやモバイルアプリなどに利用されることが多いサービスです。また、認証プロトコルとしてはJson Web Token(JWT)が利用されます。
SAMLは2001年に開発されたプロトコルで、ウェブベースのアプリケーションに利用されることが多いです。認証プロトコルはXMLを利用して認証情報を表します。
ゼロトラスト
ゼロトラストとは、会社のファイアウォール内部にあったとしても、常に認証・認可を求める考え方のことです。「決して信頼せず、常に確認する」ことを前提とします。
ユーザー毎に可能なアクションを定義することで、外部から悪意のあるユーザにアクセスされても、被害を最小限に抑えることが可能になります。
SSOを実現可能なソフトウェア
SSOを自前で実装することが可能なソフトウェアとして、KeyCloakとOpenAMが有名です。KeyCloakはOSSとして公開されていますが、OpenAMの最新版はOSSで公開されていないので、導入コストという意味ではKeyCloakの方が低いと考えられます。
KeyCloakは、SAML/OICD/OAuthなどの主要なプロトコルに対応しており、IdP (ID Provider)として構築することが可能です。