AWS Single Sign-OnでAWSマネジメントコンソールとIBM Cloudポータルをシングルサインオンする


目的

AWS Single Sign-On(以下、AWS SSO)はSAML IdPになることができます。一方、IBM Cloudのポータル、CLI等はIAMのIDプロバイダーとして、IBM IDだけでなくApp IDに対応し、App IDはSAMLのSPになることができます。というわけで、AWS SSOのIdPを使ってIBM CloudのポータルやCLIの認証をしてみます。

利点

デフォルトではIBM CloudのポータルにアクセスするためにIBM IDを取得し、アカウントから招待してもらう必要があります。このマルチクラウド時代に、AWSとIBM Cloudでそれぞれユーザー管理をしなければいけないうのは、ユーザー数が増えてきたら管理者にとってはかなりの負担になります。

また、会社のメールアドレスを使ってIBM IDを取得するという行為が特にエンタープライズな環境では抵抗を受けるケースもあります。

AWS SSOのIdPと連携することで、次のようなメリットがあります。

  • ユーザーはIBM IDの登録が不要
  • AWS IdPのユーザーでIBM CloudにログインするとIBM Cloudにユーザーが自動登録される
  • AWS SSOを使ったアプリケーションとIBM Cloud ConsoleやApp IDを使ったアプリケーションでSSOできる

手順

AWS SSOの初期設定

当然AWSのアカウントが必要です。アカウントに管理者でログインしたらAWS Single Sign-Onサービスを選択します。

初めての場合はAWS SSOを有効にするをクリックします。

初めての場合はAWS 組織の作成をクリックします。

3 クラウドアプリケーションへの SSO アクセスの管理を選択します。

新規アプリケーションの追加をクリックします。

カスタム SAML 2.0 アプリケーションの追加を選択します。

表示名説明に任意の値を入力します。

ここで、

  • AWS SSO SAML メタデータファイルをダウンロードします
  • AWS SSO サインイン URLを控えておきます
  • AWS SSO 証明書をダウンロードします

画面をそのままにしてApp IDの設定画面を開きます。

App IDの初期設定

App IDのインスタンスを用意しておきます。

わかりやすさのためにSAML 2.0連携以外のIDプロバイダーを無効化し、SAML 2.0連携の編集をクリックします。

プロバイダ名に任意の値を入力し、SAML メタデータ・ファイルのダウンロードをクリックします。これはいわゆるSPメタデータです。

画面右側の値を入力します。

項目
エンティティーID 先ほどダウンロードしたAWSのIdPメタデータをテキストエディタで開き、1行目のentityId値を入力
サインインURL 先ほど控えたAWS SSOのサインインURLを入力
1次証明書 先ほどダウンロードしたAWS SSO証明書の中身を入力

保存をクリックします。

AWS SSOのSPメタデータ取り込みと属性マッピング

再びAWSに戻り、先ほどダウンロードしたSPメタデータをアップロードし変更の保存をクリックします。

属性マッピングタブをクリックします。

AWS SSO IdPのアサーションとSP間で属性のマッピングをします。

参考)https://cloud.ibm.com/docs/account?topic=account-idp-integration

最低限下記のマッピングを追加します。

アプリケーションのユーザー属性 この文字列または AWS SSO のユーザー属性にマッピング 形式 意味
Subject ${user:email} emailAddress App IDのユーザープロファイルの識別に使用(必須)
familyName ${user:familyName} basic IBM Cloudのユーザープロファイルで名前の表示に使用(姓部分)
givenName ${user:givenName} basic IBM Cloudのユーザープロファイルで名前の表示に使用(名部分)
name ${user:preferredUsername} basic App IDのユーザープロファイルで名前の表示に使用

入力後、変更を保存をクリックします。

AWS SSOのユーザー追加

AWS SSOを利用できるユーザーを追加します。ユーザーメニューからユーザーを追加をクリックします。

必要な情報を入力し、次: グループをクリックします。

グループはSSOには不要なので、ユーザーを追加をクリックします。

ユーザーが追加されました。

メールアドレス宛にインビテーションメールが送信されますので、メールを開きリンクをクリックします。

パスワードを設定し新しいパスワードの設定をクリックします。

AWSマネジメントコンソールのユーザー権限設定

AWS SSOのユーザーでAWSマネジメントコンソールを利用できるようにします。これで、IBM CloudとAWSでポータルのSSOが実現できるようになります。

ダッシュボードで2 AWSアカウントへの SSO アクセスの管理をクリックします。

初めての場合はアクセス権限セットがないのでアクセス権限多分をクリックしアクセス権限セットを作成をクリックします。

必要に応じてどちらかを選択します。今回は既存の職務機能ポリシーを使用を選択して次: 詳細をクリックします。

今回はとりあえずPowerUserAccessを選択し次: タグをクリックします。

今回は何もせず次: 確認をクリックします。

確認し作成をクリックします。

アクセス権限セットが作成されました。

AWS組織タブをクリックし、アカウントを選択してユーザーの割り当てをクリックします。

ユーザーを選択して次: アクセス権限セットをクリックします。

アクセス権限セットを選択し完了をクリックします。

少し待つと完了します。

AWS SSO側の設定はこれで完了です。

App IDの接続テスト

SAML 2.0連携画面でテストをクリックします。

設定がうまくいっていればAWSのサインイン画面が表示されるので、先ほど登録したAWS SSOのユーザー名を入力して次のをクリックします。

先ほど設定したパスワードを入力しサインインを選択します。

設定がうまくいっていればGood job, It worksと表示されます。

ユーザープロファイルを確認します。初回ログイン時にプロファイルが自動登録されます。

これでApp ID側の作業は完了です。

IBM CloudポータルのIDプロバイダー設定

IAMのIDプロバイダーを設定します。過去記事「App IDのユーザーでIBM Cloudのポータルを利用する」を参照ください。ここでApp IDとの連携とSSOログイン用のIdP URLを生成します。

IBM CloudポータルへのSSOログイン

設定が終わったら、IdP URLをブラウザで開きます。ブラウザにAWS SSOの認証情報が残っていればIBM Cloud Consoleのダッシュボードが表示されます。残っていなければAWS SSOのサインイン画面が表示されます。

IBM Cloudのダッシュボードが表示されました。

IAMを確認するとAWS SSOのユーザーが登録されていることがわかります。

うまくSAML連携することができました。

AWSマネジメントコンソールへのSSOログイン

AWS SSOユーザーは通常のマネジメントコンソールへのログイン画面は使いません。かわりにユーザーポータルを使用します。

ユーザーポータルでAWS Accountを選択し、Management consoleをクリックします。

ちなみにIBM Cloud App IDが見えていますがここをクリックしてもエラーになります。なぜなら、IBM Cloudとの連携はSP Initiatedのため、IdPであるAWS SSOからここをクリックしても行先がないからです。

無事、マネジメントコンソールが表示されました。

これで、AWSとIBM Cloud両方にSSOできるようになりました。

考慮点

ユーザーの権限設定

AWS SSOでサインインしたユーザーはIBM Cloudに対して何の権限も持っていませんので、管理者が別途必要な権限を付与するか、アクセスグループの動的ルール機能を使って自動付与することもできます。

参考)App IDのユーザーでIBM Cloudのポータルを利用する際に動的にアクセスグループを設定する

しかしこの方法だと、IdPはAWS SSOなのに、App IDでユーザーにカスタム属性を付与することになり、少々面倒です。AWS SSOで属性を設定しそれをIBM Cloudに渡すことができないか、別途調査してみます。

CLIの利用

CLIを利用する場合はユーザー・パスワード方式ではなくSSO方式になります。

$ ibmcloud login -u teruq@******.jp --sso
API エンドポイント: https://cloud.ibm.com
リージョン: jp-tok

Get a one-time code from https://identity-1.ap-north.iam.cloud.ibm.com/identity/passcode to proceed.
デフォルトのブラウザーで URL を開きますか? [Y/n] > y
One-time code >

このとき表示されるURLは残念ながらIBM IDによるログイン画面になってしまい、AWS SSOユーザーの認証をすることができません。これは次の手順を踏むことで回避できました。

  • ブラウザでIBM CloudのIdP URLからAWS SSOを使って認証しておく
  • CLIのログインコマンド(--sso)を打ち、表示されたURLを同じブラウザのURL欄にコピー&ペーストして開く
  • ワンタイムパスワードが発行される

AWS SSOのログアウト

AWS SSOを使ってログインするとおそらくはCookieが残り、ブラウザを閉じて開きなおしてもログイン状態が維持されます。IBM Cloud ConsoleでログアウトしてもAWS SSOには効果ありません。

AWS SSOをログアウトするためには、次の方法が考えられます。まず、IBM Cloud Consoleが開く直前に下記の画面が数秒間表示されますので、その隙に右上のSign outをクリックします。

もう1つの方法は、AWS SSOのユーザーポータルを利用します。AWSの設定画面からURLを知ることができます。

このURLにアクセスし、右上のSign outをクリックすることでログアウトすることができます。

以上です。