AWS Identity and Access Management(4)STS

AWS Security Token Serviceとは

STSとは、AWSリソースへアクセスできる一時的なセキュリティ情報を持つユーザを作成できるサービスで、一般的なアクセス認証情報と異なり、リクエストに応じて、事前に定めた数分〜数時間の短い使用期限の認証情報が発行される。STSを利用することで作成したアプリケーションに長期の認証情報を埋め込む必要がない。STSはグローバルサービスで、全リージョンで単一のエンドポイントを持つ。

認証フェデレーション

外部システムでユーザーIDを管理し、それらのシステムからサインインするユーザーに一時的な認証情報を付与することができる。外部システムは、Microsoft Active DirectoryをはじめとしたSAML対応のサービスや、 Amazon、Facebook、Google、OpenID ConnectなどのウェブIDに対応している。

EC2におけるSTSの利用

EC2のロールもSTSを利用しており、ロールで許可したサービスを利用するために、一時的な認証情報がインスタンスに対して付与される。

セキュリティ認証情報のリクエスト

認証フェデレーションによって、アクセスキーおよびセッショントークンで構成された一時的セキュリティ認証情報を得ることができる。認証情報のリクエストには以下のAPIが利用できる。認証期間はデフォルトで1時間

API名 対象 呼び出し元 有効期間(デフォルト) 有効期間(最大)
AssumeRole クロスアカウント, カスタムIdB IAMユーザ 1時間 ロールの指定値
AssumeRoleWithWebIdentity Web IdP 任意のユーザ 1時間 ロールの指定値
AssumeRoleWithSAML SAML IdP 任意のユーザ 1時間 ロールの指定値
GetFederationToken カスタムIdB root/IAMユーザ 12時間 36時間
GetSessionToken 信頼されていない環境のユーザ root/IAMユーザ 12時間 36時間

AWS Cognito(3)OpenID Connectとの連携

OpenID Connect Provider Identifierの登録

AWS CognitoはOpenID Connectによる認証に対応している。OpenID ConnectのIdentifierを登録することで、FacebookやGmailなどの既存のパブリックログインプロバイダに加えて利用できる。

登録方法

OpenID Connectのプロバイダの登録はCognito設定画面上ではなく、IAMで行う。IAMから「Identity Provider」をクリックすると登録画面が現れるので、新規で作成する場合は「Create Provider」をクリックする。

OpenID Connect プロバイダの登録

認証プロバイダは「SAML」と「OpenID Connect」から選択可能であるので、「OpenID Connect」を選択。

プロバイダタイプの選択

OpenID Connectによる認証を追加する場合は、「Provider URL」と「audience」の情報が必要となる。

OpenID Connectの設定

Yahoo! Japan(YConnect)との連携

ここで試しに、Yahoo! Japanが提供している認証サービス「YConnect」をCognitoに登録してみる。日本でOpenID Connectによる認証に対応している有名処はYahoo! Japanの他に、mixiやIIJなども存在するようである。

プロバイダーの設定エラー

プロバイダーの設定エラー

しかし、登録の際に問題が生じる。

YConnectのOpenID Provider Configuration DocumentのURLは、
https://auth.login.yahoo.co.jp/yconnect/v1/.well-known/openid-configuration

一方で、このOpenID Provider Configuration Document内のissuerのURLは、
https://auth.login.yahoo.co.jp

となっている。

OpenID Connect Discovery 1.0 incorporating errata set 1には、issuerのURLに.well-known/openid-configurationを付加したURLがOpenID Provider Configuration DocumentのURLとなると記述があるが、YConnectでは両者のURL間にズレが生じている。その結果として、IAMに登録する際に以下のエラーメッセージが表示されてしまう。

Please check .well-known/openid-configuration of provider: https://auth.login.yahoo.co.jp/yconnect/v1/ is valid.

ということで、YConnectのCognitoへの登録は断念。

IIJなどはきちんとCognitoに登録できるので、YConnectがOpenID Connectの仕様に準拠していないのが原因か。Cognitoの設定は、なかなか一筋縄にはいかない。