Active Directory認証でAWSマネジメントコンソールにSSO
2021/07/05
こちらの2つのサイトを参考にすすめました。
- Active Directory資産を活用したAWS Management ConsoleへのSSO
- AWS Federated Authentication with Active Directory Federation Services (AD FS)
作成元の環境はこちら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:
1 2 3 |
c:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname", Issuer == "AD AUTHORITY"] => add(store = "Active Directory", types = ("http://temp/variable"), query = ";tokenGroups;{0}", param = c.Value); |
4つ目も Send Claims Using a Custom Ruleを選択しました。
Claim rule name: Roles
Custom rule:
1 2 |
c:[Type == "http://temp/variable", Value =~ "(?i)^AWS-"] => issue(Type = "https://aws.amazon.com/SAML/Attributes/Role", Value = RegExReplace(c.Value, "AWS-", "arn:aws:iam::123456789012:saml-provider/addemo,arn:aws:iam::123456789012:role/ADFS-")); |
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で実行して解決しました。
1 2 |
Set-AdfsProperties -EnableIdPInitiatedSignonPage $true |
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メールアドレスを設定し忘れていたので発生しました。
最後までお読みいただきましてありがとうございました!
【PR】 「AWS認定資格試験テキスト&問題集 AWS認定ソリューションアーキテクト - プロフェッショナル 改訂第2版」という本を書きました。
【PR】 「AWS認定資格試験テキスト AWS認定クラウドプラクティショナー 改訂第2版」という本を書きました。
【PR】 「ポケットスタディ AWS認定 デベロッパーアソシエイト」という本を書きました。
【PR】 「要点整理から攻略するAWS認定ソリューションアーキテクト-アソシエイト」という本を書きました。
【PR】 「AWSではじめるLinux入門ガイド」という本を書きました。

開発ベンダー5年、ユーザ企業システム部門通算9年、ITインストラクター5年目でプロトタイプビルダーもやりだしたSoftware Engineerです。
質問はコメントかSNSなどからお気軽にどうぞ。
出来る限りなるべく答えます。
このブログの内容/発言の一切は個人の見解であり、所属する組織とは関係ありません。
このブログは経験したことなどの共有を目的としており、手順や結果などを保証するものではありません。
ご参考にされる際は、読者様自身のご判断にてご対応をお願いいたします。
また、勉強会やイベントのレポートは自分が気になったことをメモしたり、聞いて思ったことを書いていますので、登壇者の意見や発表内容ではありません。
ad
ad
関連記事
-
-
Selenium, Headless ChromeとAWS Lambdaで夜な夜なスクレイピング
このようなアーキテクチャで、Alexaスキルの開発を進めていまして、元となる情報 …
-
-
EC2 Windows インスタンス PowerShellでメタデータを見る
Linuxインスタンスならcurlコマンドで確認すればいいのですが、Window …
-
-
AWS EC2 インスタンスステータスのチェックで失敗 原因はPHP-FPMのOOM-KILLER
先週に引き続きEC2のインスタンスステータスチェックで失敗 再起動するも失敗する …
-
-
Lambdaでちょっとしたコードを試すときに便利なエディタのフルスクリーン機能
Lambda歴6年で、はじめて使いました。 この存在に気がついてなかったです。 …
-
-
AD Connectorを作成してシームレスにドメイン参加する
VPN接続先のADで管理されているドメインにEC2 Windowsインスタンスか …
-
-
API GatewayをトリガーにしたときのLambdaリソースベースポリシー
先日、SwaggerからAPI Gatewayを作ったときに、API Gatew …
-
-
Amazon CloudWatch Anomaly Detectionをダッシュボードに設定
Amazon CloudWatch クロスリージョンクロスアカウントダッシュボー …
-
-
EC2インスタンスを必要最小限のパラメータでCLIとSDKから起動する
EC2インスタンスをCLIとSDKから起動するデモで、パラメータを必要最小限にし …
-
-
Amazon Route 53 Resolverを設定確認
Route 53 Resolverを設定しました。 東京リージョンのVPCをオン …
-
-
Kinesis Data Analyticsの検索結果をKinesis Data FirehoseからS3バケットに保存する
Kinesis Data AnalyticsをKinesis Data Stre …