AWS Single Sign-On を使った Stripe ダッシュボードへの SAML によるシングルサインオン設定をやっていきましょう。
なお、公式ドキュメントにあるように、現在 Stripe の「ダッシュボードでのシングルサインオンは招待者限定のベータ」です。
利用するには Strip 社に申請して利用できるようにしてもらう必要があります。
参考: シングルサインオン
Stripe でのドメインの検証
Stripe ダッシュボードへの SAML ログインを設定する前に、ログインできるユーザのメールアドレスのドメインを認証しておく必要があります。
(認証されたドメインのメールアドレスをもつユーザ以外は SAML ログインできない)
作業手順としては、指定された認証用のコードをドメインのDNSサーバに TXT レコードで登録するだけです。
AWS SSO へのアプリケーション登録
Applications から New Application として Add a Custom SAML 2.0 application
を選択します。
Configuration (設定)
「Configuration (設定)」タブでは以下の箇所を設定します。
AWS SSO metadata (AWS SSO メタデータ)
「AWS SSO metadata (AWS SSO メタデータ)」から以下の値をコピーしておきます。
- AWS SSO issuer URL (AWS SSO 発行者 URL)
- AWS SSO sign-in URL (AWS SSO サインイン URL)
- AWS SSO certificate (AWS SSO 証明書) - 証明書はダウンロードする
Application metadata (アプリケーションメタデータ)
「Application metadata (アプリケーションメタデータ)」には以下を入力します。
Name | Value |
---|---|
Application ACS URL (アプリケーション ACS URL) | https://dashboard.stripe.com/login/saml/consume |
Application SAML audience (アプリケーション SAML 対象者) | https://dashboard.stripe.com/saml/metadata |
他の箇所は特に変更する必要はないです。
Display name
と Description
だけ、お好みで変更してください。
Attribute Mappings (属性マッピング)
「Attribute Mappings (属性マッピング)」タブでは、以下のように設定します。
User attribute in the application | Maps to this string value or user attribute in AWS SSO | Format |
---|---|---|
Subject | ${user:email} |
emailAddress |
Stripe-Role-{stripe id} (※) |
admin or developer or ,,, |
unspecified |
※ {stripe id} は acct_ で始まる Stripe ID です。Stripe ダッシュボードの Account Details で確認できます。 |
IdP (AWS SSO) から Stripe に対して Stripe-Role-{stripe id}
と言う属性を送る必要があります。
SAML ログインするユーザが Stripe ダッシュボードにどのような役割でアクセスできるかを設定するためのものです。
以下の値のいずれかを設定します。
DASHBOARD ROLE | ATTRIBUTE STATEMENT ROLE ID |
---|---|
Administrator (管理者) | admin |
Developer (開発者) | developer |
Analyst (アナリスト) | analyst |
Support Specialist (サポートスペシャリスト) | support_specialist |
View Only(閲覧のみ) | view_only |
一方、AWS SSO でマッピングできる属性は、以下の通りです。
Supported attributes in AWS SSO | 対応する項目 |
---|---|
${user:AD_GUID} | User ID |
${user:email} | Primary email |
${user:familyName} | Last name |
${user:givenName} | First name |
${user:middleName} | Middle Name (※) |
${user:name} | Display name |
${user:preferredUsername} | Display name |
${user:subject} | Username |
※ Middle Name は、AWS SSOコンソールからは入力できません |
これだけしかマッピングできないので、Stripe の Role として設定できる値がないんです...
苦肉の策として First Name (${user:givenName}
) に Stripe の Role を設定して、それを Attribute Mapping で渡すようにしました。
最終的にこうしました。
User attribute in the application | Maps to this string value or user attribute in AWS SSO | Format |
---|---|---|
Subject | ${user:email} |
emailAddress |
Stripe-Role-{stripe id} | ${user:givenName} |
unspecified |
ここまでで、AWS SSO へのアプリケーション登録完了です。
続いて、Stripe に IdP メタデータの登録を行います。
Stripe に IdP 設定を登録する
Stripe ダッシュボードの Settings > User authentication で、AWS SSO に登録したアプリケーションの値を、それぞれ以下の箇所にコピーします。
Name | Value |
---|---|
Issuer ID | AWS SSO issuer URL (AWS SSO 発行者 URL) |
Identity provider URL | AWS SSO sign-in URL (AWS SSO サインイン URL) |
Identity provider certificate | AWS SSO certificate (AWS SSO 証明書) |
Enforcement mode | Optional (任意) を選択 |
Stripe への要望
現在、ベータ期間中ということなので、以下のいずれかの機能をつけてもらえると属性マッピングが貧弱な IdP からの接続が簡単になるので対応してもらえると嬉しいなと思われます。
ご検討お願いいたします。
IdP から送られた文字列を、Stripe の role (admin, developer, ...)に変換
SAML IdP から role として任意の文字列を送ると、Stripe 側でそれを Stripe の role にあわせて変換してくれると嬉しいです。
IdP から Role として UUID とかの任意の文字列を送る → Stripe 側でユーザが登録した変換テーブルを参照して、Stripe の role (admin, developer, ...) に変換されるとありがたい。
AWS SSO から ${user:groups}
でグループIDをマッピングできるっぽいので、これができればなんとかなります。
- How to Integrate AWS SSO with AWS Managed Elasticsearch Kibana Instance
- AWS SSO を利用して Amazon Elasticsearch Service へログインしてみた
- Supported user and group attributes
Stripe で管理している role を尊重する設定の追加
上記ができない場合は次善策として Stripe で管理している role を尊重する文字列の追加してもらえると嬉しいです。
IdP から role として default
などが送られてきたら、Stripe に登録されているユーザの role を尊重する。
新規ユーザ登録の場合はデフォルト権限を与える。デフォルト権限は管理者が変更できるようになっているとありがたいけれど、一番下の権限( view_only
)決め打ちでも構わないです。
SAML 対象をユーザ単位(もしくはドメイン単位)で設定できるようになると嬉しい
プロジェクト全体で SAML を強制するか、通常のログインも許可するかの設定ができるようになっているけれど、これをユーザ単位(もしくはメールアドレスのドメイン単位)で設定できるようになると嬉しいです。
弊社の Stripe ダッシュボードを使うユーザのメールアドレスは弊社管理のドメインだけではなくて、別のドメインのメールアドレスを使用している人達( 協力会社とかフリーランスの人)もいます。