ヤマムギ

growing hard days.

*

Active Directory認証でAWSマネジメントコンソールにSSO

      2021/07/05

こちらの2つのサイトを参考にすすめました。

作成元の環境はこちらAWSクイックスタートのActive Directory Domain Services on AWSです。

ADFSのインストール

ADサーバーで、Sever Managerを起動して、[Add roles and features]を選択しました。

[Next]を押下しました。

デフォルトのまま、[Next]を押下しました。

対象は今のサーバーを選択。

ADFSを選択しました。

[Next]を押下しました。

[Install]を押下しました。

IISで自己証明書の発行

SSL証明書が必要なようなので、IISをインストールして自己証明書を発行しておきました。

IIS管理ツールで、ドメインを選択して[Server Certificates]を選択しました。

右側のペインで、[Create Self-Signed Certification]を選択しました。

表示名は任意です。

ADFSの設定

[Configure the federation service on this server.] を選択しました。

ドメインの管理者を選択しました。

IISで作っておいた自己証明書を選択しました。

ドメインの管理者を選択しました。

ADFSが使用するデータベースは新規作成しました。

事前チェックが完了したので、[Configure]ボタンを押下してインストールを行いました。

ADFSのXMLメタデータのダウンロード

https://ホスト名/FederationMetadata/2007-06/FederationMetadata.xml
にアクセスしました。
IEだったので、右上の歯車からCompatibility Settingsでドメインを追加して、XMLが互換表示されるようにしまして、ダウンロードしました。

このXMLファイルを使ってIAMに登録します。

IAMでIDプロバイダの登録

IAMの[IDプロバイダ]-[プロバイダを追加]を押下しました。

プロバイダ名は任意です。
ADFSからダウンロードしたXMLファイルをアップロードしました。

ロールの割り当てをしました。

新規ロールを作成しました。

SAMLプロバイダを選択して、[プログラムによるアクセスとAWSマネジメントコンソールによるアクセスを許可する]を選択すると、自動で以下が設定されます。
* 属性: SAML:aud
* 値: https://signin.aws.amazon.com/saml

今回はS3ReadOnly権限で試すことにしました。

IAMロール名は「ADFS-s3read」にしました。
このs3readの部分がADセキュリティグループの「AWS-s3read」とマッピングされるようにします。
こうすることでSSOの設定を1つ作れば、あとはADのセキュリティグループ名とIAMロール名でのマッピングが可能となります。

それでは、そうなるようにADFSの設定をしていきます。

ADFSの設定

ADFS管理ツールを起動して、[Relying Party Trust]-[Add Relying Party Trust]を選択しました。

Federation metadata addressに以下のURLを入力しました。
https://signin.aws.amazon.com/static/saml-metadata.xml

Display nameはサインイン画面に表示される名前です。任意です。

Permit everyoneを選択しました。

あとはデフォルトで完了です。

ADFSルールの設定

[Add Rule]からルールを4つ登録しました。

1つ目は Transform an Incoming Claimを選択しました。

Claim rule name: NameId
Incoming claim type: Windows account name
Outgoing claim type: Name ID
Outgoing name ID format: Persistent Identifier

2つ目は Send LDAP Attributes as Claimsを選択しました。

Claim rule name: RoleSessionName
LDAP Attribute: E-Mail-Addresses(選択)
Outgoing Claim Type: (入力)
https://aws.amazon.com/SAML/Attributes/RoleSessionName

この設定で、サインインしたユーザーのEメールアドレスが、RoleSessionNameに渡されます。

3つ目は Send Claims Using a Custom Ruleを選択しました。

Claim rule name: Get AD Groups
Custom rule:

4つ目も Send Claims Using a Custom Ruleを選択しました。

Claim rule name: Roles
Custom rule:

IDプロバイダのARNと、IAMロールを示すARNをADFS-まで書いています。
ADセキュリティグループのAWS-より後ろをIAMロールのADFS-の後ろに渡すようにしています。
こうすることで、ADセキュリティグループとIAMロールをマッピングでき、AD側IAM側両方でSSOのためのグループ、ロールを人が見て判断しやすくしています。

これでルールが全部完了しました。

動作確認

https://ホスト名/adfs/ls/IdpInitiatedSignOn.aspx
ADFSのサインイン画面にアクセスしました。

AWS-s3readというADセキュリティグループがプライマリメンバーのs3というユーザーでサインインしました。

画面がリダイレクトされて無事シングルサインオンできました。

EC2へのアクセスは制御されて、

S3へのアクセスはOKでした。
予定通りです。

途中で発生したエラー

Federation metadata addressにhttps://signin.aws.amazon.com/static/saml-metadata.xmlを入力して[Next]押下時に、MSIS7528: The metadata does not contain the role descriptions needed for the entity to be configured as a claims provider trust メッセージ

原因:
[Relying Party Trust]-[Add Relying Party Trust]を選択しなければならないところ、[Claims Provider Trusts]-[Add Claims Provider Trusts]を選択していた。

ADFSにブラウザからアクセスしたときに、MSIS7012エラーでサインインできない。

こちらWindows Server 2019 AD FS 構築でハマるポイント対策に対策がありました。
以下コマンドをPowerShellで実行して解決しました。

Your request included an invalid SAML response. to logout, click here.という画面にリダイレクトされる。

原因:
ADセキュリティグループにAWS-をつけるのを最初忘れていました。
それでIAMロールのARNがちゃんとレスポンスに含まれていなかったと考えられます。

画面にリダイレクトされてロールを選択すると、RoleSessionName is required in AuthnResponse (service: AWSSecurityTokenService; status code: 400; error code: InvalidIdentityToken)

原因:
https://aws.amazon.com/SAML/Attributes/RoleSessionNameにセッション名が渡されていない。
これは、テストユーザーのEメールアドレスを設定し忘れていたので発生しました。


最後までお読みいただきましてありがとうございました!

「AWS認定資格試験テキスト&問題集 AWS認定ソリューションアーキテクト - プロフェッショナル 改訂第2版」という本を書きました。

「AWS認定資格試験テキスト AWS認定クラウドプラクティショナー 改訂第3版」という本を書きました。

「ポケットスタディ AWS認定 デベロッパーアソシエイト [DVA-C02対応] 」という本を書きました。

「要点整理から攻略するAWS認定ソリューションアーキテクト-アソシエイト」という本を書きました。

「AWSではじめるLinux入門ガイド」という本を書きました。

 - AWS , , , , ,

ad

ad

  関連記事

AWS Summit 2016 Tokyoに参加してきました (Day3)

飛天3日目です。 JAWS-UGブースのすぐ前にあったこのお水がめちゃめちゃおい …

ブラウザからJavaScript SDKを使ってAmazon S3 への写真のアップロードチュートリアルをやってみました

ブラウザから Amazon S3 への写真のアップロードをやってみました。 HT …

AWSアカウントのルートユーザーのセキュリティ認証情報

アカウント作成時にはMFA設定するためにIAMダッシュボードからアクセスするので …

AWS EC2 Amazon Linux にEC-CUBE3をnginx+MySql環境へインストール(手順検証中)

EC2インスタンスを作成する 少し古い記事で恐縮ですが試したい事があるのでAWS …

Transit GatewayポリシーテーブルでCloud WANのコアネットワークに接続しました

「ポリシーテーブルってなんですか?」のご質問をいただいたので設定してみました。 …

Feedlyのフィードを自動でSlackへ投稿する(AWS Lambda , Amazon DynamoDB)

やりたいこと Feedlyで共有したいフィードに特定のタグを付けます。 特定のタ …

AWS EC2 でインスタンスにIPアドレスを紐付ける

AWS EC2で作ったサーバは何もしなければ起動するたびにIPアドレスが変わって …

ヤマムギvol.23 Amazon RDS for MySQLとAmazon Aurora Serverlessの起動のデモをしました

ゴールデンウィーク毎朝デモ勉強会は終わったのですが、土曜日にやれるときがあれば、 …

EC2 Auto ScalingカスタムメトリクスのモニタリングにCloudWatch検索式が便利でした

EC2 Auto Scalingで起動したインスタンスのカスタムメトリクス この …

S3 Intelligent-Tieringのオブジェクトの階層移動をCloudWatchメトリクスで確認

CloudWatchメトリクスの保存期間は現時点で15ヶ月(455日)なのでそろ …