AWSでは、様々な認証サービスが用意されています。それぞれのサービスについて、想定しているユースケースや使い方が異なります。代表的なものでも

  • AWS Identity and Access Management (IAM)
  • AWS Directory Service
  • AWS Single Sign-On (以下、SSO)
  • Amazon Cognito

が挙げられます。本記事では、Amazon CognitoとAWS SSOについて、サービスの機能や、具体的なユースケースについて紹介していきます。

認証と認可の違いとは?

Amazon CognitoとAWS SSOについて機能を把握する前に、”認証と認可”について、違いを理解しておく必要があります。認証と認可は、英語でも認証(Authenticaton)、認可(Authorization)と言葉が分かれているように、似ているようで異なる概念です。AWSにおいてはサービスを利用する際に、認証と認可についてどのような違いがあるのかをしっかりと理解したうえで、利用していくことが必要です。認証とは、その人が誰であるかを判別することです。認可とは、その人が何を許可されているかを判別することです。具体的な例として、資格試験を挙げてみます。まず、試験を受ける際に、申し込みを行い、受験をする権利を得ます。これが、”認可”になります。試験会場に行く際には、入り口などで本人確認を行います。これが、”認証”になります。本人確認を受けた後、”認可”済である、資格試験の受験を行います。このように、認証と認可は全く異なるアクションになります。

AWS SSO(Single-Sign-On)とは?

AWS SSOについて、ユースケースや機能について紹介していきます。

そもそもSSO(Single-Sign-On)とは?

1組のID・パスワードによる認証を1度行うだけで複数のサービスにログインできるようにする仕組みです。例えば、様々な社内システムにおいて、それぞれ固有のログインID・パスワードの組み合わせが必要であった場合を考えてみると、それぞれのID・パスワードを覚えることは非常に大変です。ID・パスワードの組を覚えられないがために、紙にメモしておく、同じようなパスワードを使いまわす、といったことを行うと、逆にセキュリティ上の問題をはらんでしまいます。SSOを導入すると、システムを利用する際に、ユーザー側が1組のID・パスワードを覚えておけばいいため、ユーザーの利便性が向上するだけでなく、セキュリティもより強固なる、というメリットがあります。

具体的な機能について

AWS SSOが提供する機能について解説していきます。AWS SSOは、複数のAWSアカウントへのアクセスを行う際に、Single-Sign-Onを提供します。AWSにおいては、開発環境と本番環境においてアカウントを分けることが推奨されています。しかしながら、AWS上で複数のシステムを運用していると、それぞれのシステムの開発・本番環境に対してアカウントが払い出されることになり、覚えておくべきログインID・パスワードが膨大になってしまいます。そのような状況はAWS SSOを利用することで回避が可能です。また、SSOをより便利にするための様々な機能も備わっています。具体的に見ていきましょう。

AWS Organizationsとの連携が可能

AWS Organizationsは、AWS上の複数アカウントを管理するためのサービスです。AWS Organizationは、マスターアカウントと子アカウントの階層でAWSアカウントを管理する機能を持っていますが、マスターアカウントでAWS SSOを有効にすることで、AWSコンソールへのSSOアクセスを行うことが出来ます。

Active Directoryとの連携が可能

Active Directory(AD)と連携取ることが出来ます。AWS Directory ServiceだけでなくAzure ADのような、サードパーティのADとも連携が可能です。これにより、企業で管理しているADのユーザーや階層をそのままAWS上のコンソールの認証に転用することができるようになります。

Amazon SageMakerやAWS IoT SiteWise等のサービスについては、AWS SSOを利用することにより、AWSのコンソールにログインすることなく、アプリケーションのエンドユーザーがログインできるようになります。

ユースケースは?

ユースケースとしては、先述のように複数のアカウントにSSOする場合のほかに、以下のようなケースが考えられます。

AWS上のファイルシステムにアクセスする

AWS Managed Microsoft ADと認証情報を連携することで、AWS上のAmazon FSx for Windows File Server作成したファイルサーバにSSOを利用して接続を行うことが可能です。これにより、企業のファイルシステムをAWS上に移行しても、認証情報を増やすことなく利用することが可能です。

O365などの外部のアプリケーションを利用する。

AWS Managed Microsoft ADとAWS SSOを連携させることにより、Office 365などのクラウド上のアプリケーションへのSSOが可能になります。

Amazon Cognitoとは?

Amazon Cognitoとは、AWSなどに構築した、Webアプリケーションやモバイルアプリケーションに認証・認可機能を提供するサービスです。AWS SSOは「会社内 (組織内) のユーザー認証・認可で用いる」一方、Cognitoは「不特定多数の一般ユーザーの認証・認可」を行うことができるサービスです。具体的には、利用するユーザーが自分でIDの登録が可能であるほか、FacebookやGoogle、Appleなどのアカウントと連携できる機能を持っています。また、Amazon Cognitoでは、作成できるユーザーの上限数がデフォルトで「20,000,000」 となっており、不特定多数の一般ユーザー向け仕様となっています。

具体的な機能について

Amazon Cognitoには、主な2つの機能があります。

  • ユーザープール
  • IDプール
  • Cognito Sync
    それぞれにについて、機能を記載していきます。

ユーザープール

ユーザープールは、ユーザー認証機能を提供します。具体的には、Cognito事態にユーザーIDを登録する機能と、外部のIDプロバイダー(GoogleやFacebookなど)と連携する機能が存在します。ユーザー認証が行われると、認証された証として「IDトークン」が発行され、このトークンによって認証されたユーザーがアプリケーションを利用することができるようになります。

IDプール

IDプールは、外部のIDプロバイダーによって認証されたIDに対して、AWSへのアクセス権限を払い出す、認可の機能を持っています。具体的には、認証されたユーザーに、AWS上のアプリケーションに対するアクセス権を持つ「一時クレデンシャル」を発行することができます。また、Webアプリケーションなどを想定し、認証されていないゲストユーザーにも、一部のアクセス権を付与する、といった機能を持っています。

Cognito Sync

Cognito Syncを用いると、認証したデータを共有することができるようになります。Cognitoを使ってログインしたユーザーのデータやアプリケーションデータを複数のデバイス間で共有することができる機能を提供します

ユースケースは?

それでは、上記のユーザープールなどの機能を利用した、具体的なAmazon Cognitoのユースケースを見ていきましょう。

サーバーレスアプリケーションの認証

API GatewayやALBといった、サーバーレスアーキテクチャで利用されるようなサービスは、簡単にCognitoと連携を行うことができます。Cognitoユーザープールを使った認証機能を実装することで、コードを書くことなく、セキュアにアプリケーションに認証機能を実装することが可能です。

認証をしないでアプリケーションにアクセスさせる

Webサイトの利用者からAWSリソースへアクセスさせる必要があるが、わざわざ認証は行わなくてもよい、といった場合があります。例えば、掲示板サイトやWebアプリケーションの『お問い合わせフォーム』のようなものです。このような場合には、Amazon CognitoのIDプールの機能を利用して、「認証されていないユーザーへアクセス権限を与えるためのIAMロール」に割り当てられたAWS一時クレデンシャルが払い出し、アクセス権を付与する、といったユースケースが考えられます。

まとめ

AWSの認証認可サービスには、様々なサービスがあります。今回はAWS SSOとAmazon Cognitoを紹介しましたが、本来であればIAMやActive Directoryなどのサービスも利用可能です。AWS SSOはAWSアカウントのユーザーID・パスワード管理を簡略化することに利用できます。Amazon CognitoはWebアプリケーションなどの不特定多数が利用するアプリケーションの認証に利用するといいでしょう。様々な機能を適切に使いこなすことで、セキュアなAWSの利用や、アプリケーションの開発が簡単にできるようになるため、利用してみてください。

SunnyCloudでは、AWSに関する様々なソリューションをご提供しております。無料相談受付中です!

https://www.sunnycloud.jp/contact-us/