fu3ak1's tech days

何事もシンプルに。主にAWS関連の記事を書いています

Azure AD と AWS SSOの連携

はじめに

AWSアカウントがたくさん増えて、アカウントごとにIAMユーザーがいて、それぞれにMFAを設定して、、もう大変! となった経験はありますでしょうか。

私は今もそういった経験をしておりますが、そんなマルチアカウントのログインの助けになるのがAWS SSOです。 マイボス佐々木さんが構成の整理と説明を以下の記事でわかりやすくしてくれています。

blog.takuros.net

↑の記事でもおススメの構成となっている、IdP + AWS SSOのパターンを今回は試してみたいと思います。

f:id:fu3ak1:20201219235124p:plain

IdPはAzure上でマネージドで作成できる、Azure Active Directoryを使用します。 AWSと同じくクラウド環境のため、画面上からポチポチするだけでADおよびユーザーが作成できるので検証に便利です。

それではやっていきましょう。

AWS SSOの設定

SSOはOrganizationsの組織情報を使用した機能となるため、Organizationsの親アカウントで設定する必要があります。

AWS SSO画面に遷移し、有効にします。

f:id:fu3ak1:20201219230930p:plain

Organizationsの組織が作成されていない場合は、以下のとおり表示されます。 AWS組織の作成を押すことで、組織が自動作成されます。

f:id:fu3ak1:20201218225714p:plain

組織の作成時、メールの検証が必要となるため、アカウントのメールアドレスに届いたメールを確認して青いボタンを押しておきます。

f:id:fu3ak1:20201218225915p:plain

外部のAzureADをIDソースとして利用します。 IDソースを選択を押下して設定画面へすすみます。

f:id:fu3ak1:20201219231049p:plain

IDソースの変更を押します。

f:id:fu3ak1:20201218230458p:plain

メタデータファイルをダウンロードしておきます。

f:id:fu3ak1:20201219231127p:plain

Azure ADの設定

新規テナント、ユーザーの作成

Azureのテナントとは不動産のテナントと同様で、ユーザーやグループ、オブジェクトなどをひとまとまりで管理できる部屋のようなものです。Azureアカウント作成時にデフォルトで1つのテナントがあるのですが、今回は新規でSSO用の専用テナントを作成します。

Azure Active Directoryの画面へ遷移し、テナントを作成をおします。

f:id:fu3ak1:20201218231137p:plain

デフォルトのAzure ADでOK。

f:id:fu3ak1:20201218231232p:plain

任意の組織名、ドメイン名を入力します。

f:id:fu3ak1:20201218231429p:plain

確認して作成します。

f:id:fu3ak1:20201218231551p:plain

テナントの作成が完了したら、作成したテナント上で、ログイン確認用のユーザーを作成しておきます。

(もともとのテナントがダークモードONだったので色が変わりました)

f:id:fu3ak1:20201218231725p:plain

testという名前で作成しておきます。名と姓を入力しておかないとAWS側でエラーになるため注意です。

f:id:fu3ak1:20201219004835p:plain

アプリケーションの作成

AWSへ連携するために、エンタープライズアプリケーションを作成します。

f:id:fu3ak1:20201218232018p:plain

新しいアプリケーションを作成を選ぶと、以下の通り各種サービスが選択できます。 AWSが一番最初に大きく出てくるので押したくなりますが、今回はAWS SSOなので独自のアプリケーションを作成をおします。

f:id:fu3ak1:20201218232559p:plain

名前は任意でOKです。今回はAWS SSOとして作成します。

f:id:fu3ak1:20201218232655p:plain

作成後以下のような画面になるので、シングルサインオンの設定をおします。

f:id:fu3ak1:20201218232839p:plain

SAMLを選択

f:id:fu3ak1:20201218232953p:plain

さきほどAWS SSOの画面からダウンロードしたメタデータを使うので、メタデータファイルのアップロードを選択します。

f:id:fu3ak1:20201218233059p:plain

f:id:fu3ak1:20201218233253p:plain

アップロードすると右側に以下の画面が表示されます。そのまま保存を押せばOKです。

f:id:fu3ak1:20201218233344p:plain

Testするのか表示されますが、AWS側の設定がまだ完了していないため、ここはいいえにします。

f:id:fu3ak1:20201219231351p:plain

このあとブラウザのリロードを行うと、以下のようにSAML名証明書にメタデータのダウンロードリンクが表示されるので、そこからダウンロードします。

f:id:fu3ak1:20201218233826p:plain

AWS SSOの設定(つづき)

AWS側に戻ります。

IDプロバイダーのメタデータのところから、Azure側でダウンロードしたメタデータファイルをアップロードします。

f:id:fu3ak1:20201218234141p:plain

ACCEPTと入力し、IDソースを変更します。

f:id:fu3ak1:20201219231542p:plain

完了!

f:id:fu3ak1:20201218234308p:plain

今回はADのユーザーが自動的にAWS側にも連携されるよう、自動プロビジョニングを有効化しておきます。

f:id:fu3ak1:20201218234522p:plain

SCIMエンドポイントとアクセストークンの情報はメモしておきます。

f:id:fu3ak1:20201218234736p:plain

Azure 側プロビジョニング設定

またAzureに戻ります(行ったり来たり・・)

さきほど作成したアプリケーションからプロビジョニングの設定をしていきます。

f:id:fu3ak1:20201218235209p:plain

プロビジョニングモードを自動に変更して、さきほどメモしたURLとトークン情報を入力し、テスト接続を行います。無事接続できると右上に成功の旨が表示されます。

その後、左上の保存を押します。

f:id:fu3ak1:20201219231714p:plain

一度保存すると下部のプロビジョニング状態を変更できるので、オンにして保存します。

f:id:fu3ak1:20201218235744p:plain

ユーザー属性のマッピング情報を変更します。

f:id:fu3ak1:20201219001251p:plain

「mobile」と「facsimileTelephoneNumber」を削除します。

f:id:fu3ak1:20201219231801p:plain

「mailNickname」を「objectId」に変更します。2つの削除と1つの変更が終わったら左上の保存を押します。

f:id:fu3ak1:20201219001623p:plain

エンタープライズアプリケーションのページに戻り、ユーザーを追加します。

f:id:fu3ak1:20201219000102p:plain

先ほどADで作成したtestユーザーを追加して割り当てます。

※本来の運用を考えると、グループ単位で割り当てたほうが良いでしょう。今回は検証用途のためユーザー単独で割り当てます。

f:id:fu3ak1:20201219005243p:plain

プロビジョニングの実行間隔は40分になっているため、手動で再開して追加したユーザーを反映させます。

f:id:fu3ak1:20201219000619p:plain

しばらくするとプロビジョニングが完了してユーザー1と表示されます。

f:id:fu3ak1:20201219005344p:plain

AWSのSSO画面にもユーザーが追加されています。

f:id:fu3ak1:20201219005612p:plain

アクセス権限セット、対象AWSアカウントの決定

ログインするAWSアカウントのユーザーに付与する権限(IAMポリシー)を決定します。

アクセス権限セット

まずはアクセス権限セットの作成からです。

f:id:fu3ak1:20201219232048p:plain

今回は検証用途のためAWS側で職務単位で用意されている職務機能ポリシーを使用します。

※本番運用時は、必要な権限を決めて最低限の権限となるように付与しましょう。

f:id:fu3ak1:20201219232117p:plain

閲覧権限のみ与えるViewOnlyAccessを使用します。

f:id:fu3ak1:20201219232254p:plain

タグは特に設定せず、内容確認して作成します。

f:id:fu3ak1:20201219232347p:plain

できました。

f:id:fu3ak1:20201219232421p:plain

対象AWSアカウントの選択と割り当て

次はログインするAWSアカウントを選んでいきます。

Organizations配下に2アカウントあるため2つ共選んでユーザーを割り当てます。

f:id:fu3ak1:20201219232754p:plain

プロビジョニングされたTestUserを選択します。

f:id:fu3ak1:20201219232927p:plain

先ほど作成したアクセス権限セットを作成して完了します。

f:id:fu3ak1:20201219233006p:plain

完了!

f:id:fu3ak1:20201219233150p:plain

ログイン確認

設定がすべて終わったので、SSOのTOPに表示されているデフォルトのポータルURLへアクセスしてログインしてみます。

f:id:fu3ak1:20201219233426p:plain

作成したAzure ADのユーザー名、パスワードを入力します。

f:id:fu3ak1:20201219233645p:plain

AWS Account(2)と表示されています!クリックすると一覧でアカウントが一覧で出るのでログインしたい方を選択します。

今回はマネジメントコンソールで入ります。CLI用のキーも表示できますね。

f:id:fu3ak1:20201219234108p:plain

ログインできました!まっさらな状態のアカウントなのでリソースは特にない状態ですが・・。

f:id:fu3ak1:20201219234334p:plain

検証は以上です。

CLIやMFAなどまだまだ試したいことはありますが、今回の記事はAzure ADでユーザーを作成してSSOと連携するところを主目的として書いていますので、ここまでとしておきます。

まとめ

ただ試してみたかっただけですw SSOが便利で重要なことは知っていたのですが、やはり自分で試してみないとわからないという主義なので、実際に触ってみました。 触ってみて改めてですが、以下のポイントが良いですね。

  • ID/パスワードの管理がAWS外で一元管理できる。元々業務で使用しているIDがあればそれも流用できる
  • アクセス権限セットを使用して、アカウント単位の権限ではなく、必要な権限セットを複数のアカウントに適用できる
  • CLIもイケる

AWS SSOの管理がOrganizationsの親アカウント限定なので、これがOU単位であったり、もう少し細かい単位で制御できると最高かと思います。今後に期待です。

これから作ろうと思っている方何かの参考になれば幸いです。