Azure AD で AWS マネジメントコンソールと SSO 連携してみた

Azure AD で AWS マネジメントコンソールと SSO 連携してみた

今回は最強の IdP である Azure AD を使って AWS のマネジメントコンソールにアクセスするユーザーの SSO を構成した手順を紹介します。ほぼほぼ Microsoft 公式の Docs をなぞれば構成できましたが、一部ハマったところがあったので紹介します。

Azure AD は無料バージョンでも10個までのアプリケーションを SSO できます。条件付きアクセスなどの他機能を使わないのであれば Premium ライセンスは不要です。また、AWS でアカウントを作成済みの前提です。

Azure AD と AWS の SSO 連携手順

Azure AD と AWS で SSO 連携するには次の3ステップで行います。

  1. Azure AD で SSO アプリケーション(AWS)を構成
  2. AWS 側で SSO 用ロール設定
  3. Azure AD で AWS からのロールプロビジョニングを構成

Azure AD で SSO アプリケーション(AWS)を構成

Azure ポータルにて、[Azure Active Directory]>[エンタープライズ アプリケーション]>[すべてのアプリケーション]を選択します。検索バーに「AWS」と入力し、[Amazon Web Services (AWS)]を選択します。

[名前]はそのままで[追加]をクリックします。

作成したアプリケーションで[シングル サインオン]をクリックします。

[SAML]パネルを選択します。

SAML 構成に必要な情報を確認します。[基本的な SAML 構成][ユーザー属性とクレーム]はデフォルトのままで構いません。

ただし、複数の AWS アカウントを登録する際は[識別子(エンティティ ID)]の末尾に ‘#’ と数字を付記することで一意に識別出来るようにします。
https://signin.aws.amazon.com/saml#2

[SAML 署名証明書][フェデレーション メタデータ XML]横のリンクからメタデータが埋め込まれた XML ファイルをダウンロードします。

AWS 側で SSO 用ロール設定

ここから AWS のマネジメントコンソールでの作業です。[サービス]から[IAM]を選択します。

メニューから[ID プロバイダー]を選択し、[プロバイダの作成]をクリックします。

[プロバイダーの設定]では次のように設定します。入力したら[次のステップ][作成]をクリックします。

  • プロバイダーのタイプ:SAML
  • プロバイダ名:AzureAD(IdP を識別するフレンドリ名)
  • メタデータドキュメント:[フェデレーション メタデータ XML]でダウンロードしたファイル

メニューから[ロール]を選択し、[ロールの作成]をクリックします。

[ロールの作成]では、次のように選択します。入力したら[次のステップ]をクリックします。

  • 信頼されたエンティティの種類:SAML 2.0 フェデレーション
  • SAML プロバイダー:AzureAD(先ほど作成したプロバイダ)
    • プログラムによるアクセスと AWS マネジメントコンソールによるアクセスを許可する:有効

ロールにアクセスするポリシーを選択します。ここで選択した権限を Azure AD ユーザーに割り当てる形となります。

[ロール名]に作成するロールの識別名を入力し、[ロールの作成]をクリックします。

メニューから[ポリシー]を選択し、[ポリシーの作成]をクリックします。

[JSON]タブを選択し、次のような JSON を追加します。追加したら[ポリシーの確認]をクリックします。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
            "iam:ListRoles"
            ],
            "Resource": "*"
        }
    ]
}

[名前]にポリシーの名前を入力して[ポリシーの作成]をクリックします。

メニューから[ユーザー]を選択し、[ユーザーを追加]をクリックします。

アクセスの種類で[プログラムによるアクセス]を選択することで、Azure AD は AWS アカウントからロールをフェッチできます。

  • ユーザー名:SSO 用のユーザー名を入力
  • アクセスの種類:プログラムによるアクセス

 先ほど作成したポリシーを選択し、割り当てます。

入力した情報を確認し、[ユーザーの追加]をクリックします。

この後表示されるユーザー情報の[アクセスキー ID][シークレットアクセスキー]を控えておきます。

※アクセスさせたい Azure AD のユーザーを AWS 側に作成する必要はありません。

Azure AD で AWS からのロールプロビジョニングを構成

再び Azure AD に戻り、AWS で設定したロールのプロビジョニングを行います。AWS のアプリでメニューから[プロビジョニング]を選択します。

次のように設定します。ここで AWS のユーザー作成時に表示された[アクセスキー ID][シークレットアクセスキー]を使用します。入力できたら[保存]をクリックします。

  • プロビジョニング モード:自動
  • clientsecret:<アクセスキー ID>
  • シークレット トークン:<シークレットアクセスキー>

 一度保存したら同じページ下部にある[プロビジョニング状態][オン]にして[保存]をクリックします。

しばらく時間をおいて、次のようにロールがプロビジョンされることを確認します。

メニューから[ユーザーとグループ]を選択し、アプリにアクセスさせたいユーザーを追加します。割り当てるロールは AWS で設定した[(ユーザー名), (プロバイダ名)]となっています。

Docs では前半の手順でユーザーを追加していましたが、その場合割り当てられたロールが[DefaultAccess]のままとなってしまい、次の接続確認でアクセスできませんでした。

SSO 接続確認

アクセス権を割り当てたユーザーでサインインし、アプリケーションパネルから AWS を選択します。

無事、AWS のマネジメントコンソールにアクセスできました!

AWS 側にユーザーのプロビジョニングは不要です。AWS → Azure AD へのロールプロビジョニングの手順でした。

参考リンク

チュートリアル:Azure Active Directory シングル サインオン (SSO) とアマゾン ウェブ サービス (AWS) の統合