AzureADのユーザーでAWSのマネコンにSSOで接続してみた

AzureADのアカウントでAWSのマネコンにSSOで接続してみました。 当初思っていたより実装だけであれば比較的簡単にSSO連携できたかなと思います。もちろん本番導入するのであれば詰めなければいけない設計やセキュリティ面での考慮や運用面での考慮など考えることは多くあると思いますが、概念というか動きを掴むにはちょうどいい検証でした!
2020.01.31

はじめに

こんにちは。大阪オフィスの林です。

特に大きな思い入れは無いのですが無性にAzureADのユーザーでAWSのマネコンにログインしてみたいなと思ったので実装してみました!

大きな流れ

  1. Azure側の作業(セットアップ)
    • Azure SSOのセットアップ
    • フェデレーション設定用メタデータ取得
  2. AWS側の作業(セットアップ)
    • AWS SSOのセットアップ
    • Azure登録用のSAMLメタデータ取得
  3. Azure側の作業(セットアップ続き、ユーザー登録)
    • SAMLメタデータの登録
    • ユーザー作成/割り当て
  4. AWS側の作業(ユーザー登録)
    • ユーザー/権限割り当て
  5. 接続確認

Azure側の作業(セットアップ)

Azureのコンソールにログインし、左上の「ハンバーガーメニュー」を選択します。

「Azure Active Directory」を選択します。

「エンタープライズアプリケーション」を選択します。

「新しいアプリケーション」を選択します。

「ギャラリー以外のアプリケーション」を選択します。

Azure AD Premiumが必要とのことなので評価版でアクティベートします。

30日間は無料だそうです。「アクティブ化」を選択します。

右上にアクティブ化されたメッセージが表示されたことを確認します。 ※私は一度サインアウトしてサインインしないとアクティブ化が反映されなかったので、次の手順で名前を入力できない場合はサインアウト/サインインをお試しください。

名前を「AWS SSO」とし「追加」を選択します。

「2.シングルサインオンの設定」を選択します。

「SAML」を選択します。

「フェデレーションメタデータXML」のダウンロードを選択します。

次にAWS側の作業に移ります。ただし後述するAWS側の作業完了後、再びAzure側で作業があるのでページは閉じないでください。

AWS側の作業(セットアップ)

AWS Single Sign-On Consoleにサインインします。

本日(2020年1月31日)時点で東京リージョンはAWSSSOをサポートしていないので、任意のリージョンを選択します。(検証ではオレゴンを選択します。)

「AWS SSOを有効にする」を選択します。なおルートアカウントでないと有効化できません。

正常に有効化されたことを確認します。

「設定」からIDソースの「変更」を選択します。

「外部IDプロバイダー」を選択します。

サービスプロバイダーのメタデータから「メタデータファイルのダウンロード」を選択します。ダウンロードしたファイルを後ほどAzure側にアップロードします。

「IDプロバイダーのメタデータ」で「Azure側の作業1」でダウンロードしたXMLファイルをアップロードし「確認」を選択します。

「確認」と入力し「IDソースを変更」を選択します。

「完了」と表示されたことを確認します。

次にAzure側の作業に移ります。ただし後述するAzure側の作業完了後、再びAWS側で作業があるのでページは閉じないでください。

Azure側の作業(セットアップ続き、ユーザー登録)

エンタープライズアプリケーションの「AWS SSO」の設定画面から「メタデータファイルをアップロードする」を選択します。

「AWS側の作業1」でダウンロードしたメタデータファイルをアップロードします。

正常にアップロードできたことを確認します。

「保存」を選択します。

このタイミングでユーザーアクセステストが出来るのですが、まだユーザーを作成していないので「いいえ、後でtestします」を選択します。

Azure ADにユーザーを作成します。

エンタープライズアプリケーションの「AWS SSO」の設定画面に戻り、「ユーザーの追加」を選択します。

「ユーザーとグループ」を選択します。

作成したユーザーを検索しクリック後、「選択」を選択します。

ユーザーが選択されている状態で「割り当て」を選択します。

ユーザーが割り当てられたことを確認します。

AWS側の作業(ユーザー登録)

Azureで登録されたユーザーを自動でAWSに登録する機能もあるのですがここでの手順では手動作成とします。本記事の最後に自動登録の方法は載せています。
AWS側でユーザーを登録します。「ユーザー」から「ユーザー追加」を選択します。

AzureADで登録したユーザー名を入力し、「グループ」を選択します。

今回は特に設定しないため、「ユーザーの追加」を選択し次に進みます。

ユーザーが正常に追加されたことを確認します。

「AWSアカウント」から「アクセス権限セット」タブを選択し、「アクセス権限セットを作成」を選択します。

今回はカスタムアクセス権限セットを作成していきます。名前は「MySSOPolicy」とします。

「AWS管理ポリシーをアタッチ」を選択し、「AdministrationAccess」を選択します。(環境に応じてポリシーの内容は適宜変更ください。)

「アクセス権限セット」が作成されたことを確認します。

「AWS組織」タブを選択し、アカウント名のリンクをクリックします。※アカウント名が表示されているのでマスクしていますがリンクになっています。

「ユーザーの割り当て」を選択します。

先ほど作成したユーザーにチェックを入れ、「アクセス権限セット」を選択します。

先ほど作成したアクセス権限セットにチェックを入れ、「完了」を選択します。

少し待ちます。

完了したことを確認し、「AWSアカウントに進む」を選択します。

アクセス権限セット付きのユーザーが作成されたことを確認します。

接続確認

AWS SSOのダッシュボードからユーザーポータルのURLを探し、クリックします。

Microsoftのサインイン画面が表示されるので、AzureADのユーザー名を入力します。

次にパスワードを入力します。※設定にもよりますが初回の場合、パスワード変更を促される場合があるので適宜対応します。

サインイン状態の維持は任意で選択します。

AWSの画面に遷移します。

「AWS Account」をクリックするとアカウント名が表示(マスクしている部分)され、さらに展開できるので展開すると、割り当てたアクセス権限セットがあるので、その右の「Management Console」を選択します。

AWSのマネージメントコンソールが表示されます。

フェデレーションログインという形でアカウントが表示されています。

ユーザーの自動同期

前述した手順だとわざわざAzureADにもAWSにもユーザー作る手順なのでメンドウですよね。「自動プロビジョニング」という機能があるのでそこだけ説明して終わりにしたいと思います。

AWS SSOの画面から「設定」を選択し「自動プロビジョニングを有効化」を選択します。

「SCIMエンドポイント」と「アクセストークン」が表示されるのでメモします。後述のAzure側の作業で必要になります。

Azure側の移り、エンタープライズアプリケーションの「AWS SSO」の設定画面から「プロビジョニング」を選択し、プロビジョニングモードを「自動」に変更します。

先ほどメモした「SCIMエンドポイント」を「テナントのURL」に、「アクセストークン」を「シークレットトークン」にコピーし、「テスト接続」を選択します。

テスト接続し正常終了することを確認します。

「mobile」と「FAX」は不要なので削除します。

「mailNickname」の「ソース属性」を「objectId」に変更し「OK」を選択します。

左上「保存」を選択し、「はい」を選択します。

動作確認のため、AzureADにユーザーを追加します。

エンタープライズアプリケーションの「AWS SSO」の設定画面に戻り、「ユーザーの追加」を選択します。

「プロビジョニングの状態」が「オン」であることを確認し現在の状態のステータスが完了に変わるまでしばらく待ちます。※検証であれば「現在の状態を消去して、同期を再開します」を選択しても良いかと思います。

AWSのコンソールに移りAWS SSOにユーザーが登録されたことを確認します。前述の手順と同様にアカウントに対してユーザーの割り当てと、アクセス権限セットの適用をおこないます。

まとめ

細かいパラメータとかはあまり考慮せず進めたせいか、当初思っていたより実装だけであれば比較的簡単にSSO連携できたかなと思います。もちろん本番導入するのであれば詰めなければいけない設計やセキュリティ面での考慮や運用面での考慮など考えることは多くあると思いますが、概念というか動きを掴むにはちょうどいい検証でした!

以上、大阪オフィスの林がお送りしました!