【SAML】SalesforceをIdPとしたAWSとのSSO設定方法
はじめに
複数のエンタープライズアプリケーションを運用している企業はログイン情報管理の煩雑化から、Azure AD や Okta のような Identity Provider(以降、IdP)とのシングルサインオン(以降、SSO)をしたいといった要件はよく出てきます。
今回は Salesforce と AWS の SSO を設定する方法を記事にしたいと思います。
今回の設定は Salesforce のドキュメントに方法が記載されていますのでそちらを試してみます。
作業前にドキュメント内に記載された SAML を使用した SSO の実装フローの大枠を以下を参照し、押さえておいてください。
概要を押さえてしまえば他の IdP サービスを使用した時でも応用がききますので、上記を意識しながら現在 IdP の何を、SP の何を設定しているのかを理解することは SSO を理解する上で大切なので参考にしていただけると幸いです。
この記事を読む上での前提条件
Salesforce を IdP として有効化する
Salesforce は通常に使う分には CRM の SaaS 製品ですので IdP として使う場合は設定から有効化する必要があります。
設定画面のクイック検索ボックスから IDプロバイダ
を検索し、IDプロバイダを有効化
ボタンをクリックします。
ID プロバイダで使用する証明書を選択します。デフォルトで Salesforce の証明書が選択されていますのでそのまま 保存
ボタンをクリックします。
設定が完了すると XML が発行されますので、メタデータのダウンロード
ボタンをクリックしダウンロードしておきます。
詳細は以下のような XML です。どこから発行された SAML なのか、証明書の情報、SSO のサービス URL 情報などが記載されています。
<?xml version="1.0" encoding="UTF-8"?><md:EntityDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata" entityID="https://{your_domain}.develop.my.salesforce.com" validUntil="2033-05-20T07:05:54.224Z" xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<md:IDPSSODescriptor protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
<md:KeyDescriptor use="signing">
<ds:KeyInfo>
<ds:X509Data>
<ds:X509Certificate>XXXXXXX</ds:X509Certificate>
</ds:X509Data>
</ds:KeyInfo>
</md:KeyDescriptor>
<md:SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://{your_domain}.develop.my.salesforce.com/services/auth/idp/saml2/logout"/>
<md:SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="https://{your_domain}.my.salesforce.com/services/auth/idp/saml2/logout"/>
<md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified</md:NameIDFormat>
<md:SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://{your_domain}.develop.my.salesforce.com/idp/endpoint/HttpPost"/>
<md:SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="https://{your_domain}.develop.my.salesforce.com/idp/endpoint/HttpRedirect"/>
</md:IDPSSODescriptor>
</md:EntityDescriptor>
SP 側(AWS)の設定
次に SP 側の設定です。
先ほど IdP 側で発行した XML を登録することで、IdP 側の認証を行った際に SP 側では SAML 認証を行うように設定しています。
IdP から発行された SAML をプロバイダに登録
AWS の環境で IAM の設定画面を開き IDプロバイダ
を選択し プロバイダを追加
ボタンをクリックします。
以下の設定を行い プロバイダを追加
ボタンをクリックします。
- プロバイダのタイプ:
SAML
- プロバイダ名:
test
(識別しやすい任意の値で OK です) - メタデータドキュメント:先ほど IdP 側でダウンロードした XML をアップロード
ロールを割り当てる
SP 側での IdP 情報の登録が完了しました。次に SSO でログインしたユーザが AWS でどんな操作ができるかを設定していく必要があります。
先ほど作成したプロバイダ test
を選択します。
ロールの割り当て
ボタンをクリックします。
新しいロールを作成
を選択し、次へ
ボタンをクリックします。
以下の設定を行い、次のステップ: アクセス権限
ボタンをクリックします。
- 信頼されたエンティティの種類を選択:
SAML2.0フェデレーション
を選択 - SAML プロバイダー:先ほど作成した
test
を選択
適切なアクセスポリシーを選択し、次のステップ: タグ
ボタンをクリックします。
今回は AdministratorAccess
を選択してます。
タグは今回は特段必要ないのでそのまま 次のステップ: 確認
ボタンをクリックします。
ロール名に識別しやすい任意の名前を入力し、ロールの作成
ボタンをクリックします。
今回のロール名は test
とします。
接続アプリケーションの作成
接続アプリケーションでは IdP 側の設定を行います。
具体的には、SAML アサーションの送信先の ACS URL の設定や、カスタム属性などを設定します。
※カスタム属性とは IdP と SP 間でユーザの一致を確かめるために使用する値になります。一般的にはメールアドレスなどが使用されたりします。
設定画面のクリック検索ボックスより アプリケーションマネージャ
を検索し 新規接続アプリケーション
ボタンをクリックします。
接続アプリケーション名、API 参照名に識別しやすい値を入力し、SAML の有効化チェックボックにチェックします。今回の接続アプリケーション名 Amazon Web Services
としてます、API 参照名はそのままサジェストされた値を採用してます。
SAML の有効化チェックボックにチェックをすると、詳細の設定項目が表示されますので以下の設定を行います。
- エンティティ ID:
https://signin.aws.amazon.com/saml
- ACS URL:
https://signin.aws.amazon.com/saml
- 件名種別:
永続ID
- 名前 ID 形式:
urn:oasis:names:tc:SAML:2.0:nameid-format:persistent
- IdP 証明書:
デフォルトのIdP証明書
そのまま下にスクロールし 保存
ボタンをクリックします。
作成された接続アプリケーションを選択します。
設定画面内のカスタム属性の 新規
ボタンをクリックします。
以下の設定を行い、保存
ボタンをクリックします。
- 属性キー:
https://aws.amazon.com/SAML/Attributes/RoleSessionName
- 属性値:
$User.Email
こちらでは SSO を実行した際に AWS の ID プロバイダに付与したロールから一時クレデンシャル情報を発行しますが、その時のロールのセッションの名を IdP 側でログインしたユーザのメールアドレスを使用するといった設定を行ってます。
属性をもう一つ追加します。
以下の設定を行い、保存
ボタンをクリックします。
- 属性キー:
https://aws.amazon.com/SAML/Attributes/Role
- 属性値:
'arn:aws:iam::{account_id}:role/{role_name},arn:aws:iam::{account_id}:saml-provider/{provider_name}'
※ {account_id},{role_name},{provider_name}は適宜自身の環境に置き換えてください。値は以下の AWS 画面より取得できます。
2 項目作成されていれば OK です。
次にプロファイルのところから プロファイルを管理する
ボタンをクリックします。
システム管理者
を選択し、保存
ボタンをクリックします。
次に SAML ログイン情報のところの「Idp-init のログイン URL」に記載されている URL を控えておき ポリシーを編集
ボタンをクリックします。
開始 URL に先ほどの URL をペーストし、保存
ボタンをクリックします。
こちらで IdP 側の設定が完了です。設定した各項目の詳細はこちらから確認可能ですので合わせてご確認ください。
動作確認
接続アプリケーションの管理画面内の SAML ログイン情報のところの「Idp-init のログイン URL」に記載されている URL にアクセスします。
Salesforce のログイン画面が表示されますので通常ユーザの ID/Password 情報でログインすると AWS 環境にリダイレクトされ、IdP、SP ともにアクセスできる状態になっていることが確認できます。
わかりやすくするために実行前に全部ログアウトしておくか、シークレットウインドーで実行すると良いかと 👌
さいごに
さいごまで読んでいただきありがとうございます。
Salesforce を IdP、AWS を SP にした SAML 認証を実現する場合の設定方法のまとめは以下です。
- Salesforce 側で IdP の使用を許可
- SAML 情報を取得
- AWS 側で IdP の設定を行う
- IdP 側で取得した XML を登録し、権限設定を行う
- Salesforce 側での SP の接続設定を行う
- 接続アプリケーションにて開始 URL、属性 etc の設定を行う
他にも Azure AD や AWS の Cognito などでの色々な SAML 認証での SSO 方法を確認していますのでまた別で記事にできればと思います。その際は是非読んでいただけると嬉しいです。
間違いの指摘やリクエストなどありましたら加筆していきたので是非、ご意見をいただけたらと思います。
それではまた次の記事でお会いしましょう。
Discussion