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) の統合