ID フェデレーションのための Heroku Enterprise Team の設定
最終更新日 2024年03月20日(水)
Table of Contents
SSO は Heroku Teams および Heroku Enterprise の顧客にのみ提供されています。
Heroku Teams と Heroku Enterprise Teams は、SAML 標準を実装することによって ID フェデレーションをサポートしています。この機能を使用すると、既存の ID 管理ソリューションを使用してチームへのアクセスを管理できます。このインテグレーションでは、Heroku はサービスプロバイダーであり、ID プロバイダー (IdP) にアサーションを要求して受信する消費エンティティです。
この設定には 2 つの部分があります。IdP に関する情報を使用してチームを設定します。また、認証に IdP を使用するサービスプロバイダーとして、Heroku からリクエストを受け付け、応答するようにIdP を設定する必要があります。
このインテグレーションは標準に基づいているため、さまざまな IdP が同じ設定の詳細を必要としたり、提供したりしますが、それらを設定および取得するための実際の手順は異なります。この記事では、Salesforce Identity を IdP として使用する設定について説明します。
立ち上げ
チームを作成すると、一部のユーザーのみが管理者として追加されます。管理者は、まず Heroku のユーザー名とパスワードを使用してログインしてから、ID フェデレーションを設定する必要があります。チームが ID フェデレーション用に設定された後、ID プロバイダー経由で正常に認証されたユーザーはメンバーとして自動的に追加されます。Enterprise チームの管理者は、アプリケーション権限を使用して、特定のアプリに対する追加の権限をユーザーに付与できます。Enterprise チーム以外のユーザーには静的アプリケーション権限が与えられます。
Heroku Enterprise または Heroku Teams を設定する
必要な設定情報
各チームは独立したサービスプロバイダーとして設定されます。チームをリライングパーティーとして設定するには、ID プロバイダーからの次の情報が必要になります。
ログインリダイレクト URL: ID プロバイダーが認証のリダイレクトを受信するために使用する URL です。ユーザーがチームにログインするか、チームによって所有されているリソースにアクセスしようとすると、この URL にリダイレクトされます。
X509 IdP 証明書: Heroku はこの証明書を使用して、IdP から送信されたアサーションの正当性を検証します。この証明書は、IdP が Heroku に送信するアサーションに署名するために使用する鍵のペアの公開キーを表します。
Salesforce Org からの必要な設定の取得
ID フェデレーションは SAML 2.0 標準に基づいており、さまざまな ID プロバイダーを使用して設定できます。Salesforce Identity は、エンドツーエンドの設定を示す例としてのみ使用されています。
Salesforce Enterprise Edition 以上を使用している既存の顧客には、その Salesforce 組織の一部として Salesforce Identity がすでに存在しています。まず、Salesforce Org にログインし、上部のメニューバーで [設定
] をクリックします。
Salesforce Org が ID プロバイダーとして設定されていることを確認します。前提条件として、組織では [管理] > [ドメイン管理] > [マイドメイン]
でカスタムドメインが設定されている必要があります。また、[管理] > [セキュリティのコントロール] > [証明書とキーの管理]
で証明書を作成しておく必要があります。
ここで、[セキュリティのコントロール
] の下の [ID プロバイダー
] を選択します。ID プロバイダーが有効になっていない場合は、[ID プロバイダーを有効化
] ボタンをクリックし、作成した証明書を使用して ID プロバイダーを設定します。
[メタデータのダウンロード
] ボタンをクリックし、IdP メタデータを XML ファイルとしてダウンロードします。このファイルには、前に概説した設定の詳細がすべて含まれています。サンプルファイルを次に示します。
<?xml version="1.0" encoding="UTF-8"?><md:EntityDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" entityID="https://sushi-dev-ed.my.salesforce.com" validUntil="2025-09-09T23:17:44.942Z">
<md:IDPSSODescriptor protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
<md:KeyDescriptor use="signing">
<ds:KeyInfo>
<ds:X509Data>
<ds:X509Certificate>MIIEZDCCA0ygAwIBAgIOAU+0UEpTAAAAAECZ07YwDQYJKoZIhvcNAQELBQAwejESMBAGA1UEAwwJc3VzaGlfaWRwMRgwFgYDVQQLDA8wMEQ2MTAwMDAwMDZ0UGQxFzAVBgNVBAoMDlNhbGVzZm9yY2UuY29tMRYwFAYDVQQHDA1TYW4gRnJhbmNpc2NvMQswCQYDVQQIDAJDQTEMMAoGA1UEBhMDVVNBMB4XDTE1MDkwOTIyNTMyNFoXDTE3MDkwOTEyMDAwMFowejESMBAGA1UEAwwJc3VzaGlfaWRwMRgwFgYDVQQLDA8wMEQ2MTAwMDAwMDZ0UGQxFzAVBgNVBAoMDlNhbGVzZm9yY2UuY29tMRYwFAYDVQQHDA1TYW4gRnJhbmNpc2NvMQswCQYDVQQIDAJDQTEMMAoGA1UEBhMDVVNBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoibkw0wAIvfuG9DZfDCpVrbizZSCrBzdHaCJ4II7/YXjH1M+tWp9L7vcXkegpPRWGlXOrYl+A6k96MSwdLU3d2HGJmrhz+Pur0rq4vpOD3cV4zh9fDtICacL0F9QLMOAsIT0ct1LgEh6usKvmNE1Z5DPfaZAaKAYdYepBDQMAT9ZIm1s4jqMzyQfAQBnVBOxIL6F9GU5Ki40yygRUc0YzbeKEqQR7WxfGACDCNXbm/0drN5Vi6YVtRrGQXIBSyAly72gOowoGBYNHhzsQEROxrKTKqdpjF4JcmMdU4qTI8++zNcJ6YZDdfx6p2+L6wWclv9tlkGsMcpC5yKuV+Pg7wIDAQABo4HnMIHkMB0GA1UdDgQWBBSO7PhFdpH72WQUpMXqmoqziOaClzAPBgNVHRMBAf8EBTADAQH/MIGxBgNVHSMEgakwgaaAFI7s+EV2kfvZZBSkxeqairOI5oKXoX6kfDB6MRIwEAYDVQQDDAlzdXNoaV9pZHAxGDAWBgNVBAsMDzAwRDYxMDAwMDAwNnRQZDEXMBUGA1UECgwOU2FsZXNmb3JjZS5jb20xFjAUBgNVBAcMDVNhbiBGcmFuY2lzY28xCzAJBgNVBAgMAkNBMQwwCgYDVQQGEwNVU0GCDgFPtFBKUwAAAABAmdO2MA0GCSqGSIb3DQEBCwUAA4IBAQCALrk9rW+YGd1h6dBBNMP3IwYnmOFHz1e2pVzehu7PZlkZbKmQOvHObj/OCsUxvGiooTMDLUGHZdCKHLoM6+O5MPFGYGPzJuU/+jyD7OSzYsA+k29B6AY2J9eWFifdjlmgLHql2xgL+BFVhINE3xTcn/DXAwm0hj02TWK3xv1ArqX0IH6/s7pGtREfLMQA1Amo7m2SqHo9i0sF5/cinfn+xGJTrzc7PnUwmVcLxx2r5m6+DJ5GnChvwLQoUa33K+OXckiVyEwVPokpb4RGMbugWuBU7AEINrqSl7PzYhvkVZKVztNTrc3MiceIGJCcYpJpB7fviYW+KZoz8T5WlXc3</ds:X509Certificate>
</ds:X509Data>
</ds:KeyInfo>
</md:KeyDescriptor>
<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://sushi-dev-ed.my.salesforce.com/idp/endpoint/HttpPost"/>
<md:SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="https://sushi-dev-ed.my.salesforce.com/idp/endpoint/HttpRedirect"/>
</md:IDPSSODescriptor>
</md:EntityDescriptor>
urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect
バインディングを含む SingleSignOnService
要素は、ログインリダイレクト URL を表しています。
HTTP-POST URL ではなく、HTTP-Redirect URL を使用することを忘れないでください。
[証明書のダウンロード
] ボタンをクリックして、証明書を個別にダウンロードすることもできます。この方法では、書式が正しく保持されるほか、ダウンロードされたファイルの内容を Heroku のチームの設定ページに簡単にカットアンドペーストできるため推奨されます。
セットアップ
必要なすべての設定情報を収集したら、Heroku Dashboard でチームの Settings
(設定) タブに移動します。
Identity Federation
(ID フェデレーション) セクションで、設定を行うボタンをクリックします。ログインリダイレクト URL (https://balansubr-dev-ed.my.salesforce.com/idp/endpoint/HttpRedirect
など) をカットアンドペーストします。上記でダウンロードしたメタデータファイル内の IdP 証明書は、書式設定してから設定に追加する必要があります。代わりに、ダウンロードした証明書ファイルを使用します。それをテキストエディタで開き、その内容を IdP certificate
(IdP 証明書) テキストエリアにカットアンドペーストします。
保存した構成を Heroku が検証すると、設定が完了します。これで、ユーザーが IdP 経由でチームにログインする時に使用する必要のある特定の URL が表示されるようになります。
ID プロバイダーを設定する
必要な設定情報
通常、新しいサービスプロバイダーを登録するには ID プロバイダーに次の情報が必要です。ID フェデレーションが構成されたチームに表示される Heroku ログイン URL から必要な URL を構築できます。
開始URL: ログインに使用する URL。
https://sso.heroku.com/saml/<your team name>/init
のような形式を取ります。この URL は通常、ユーザーが内部ポータルのリンクをクリックして Heroku にアクセスする、IdP 主導のログインシナリオに使用されます。エンティティ ID: Heroku が認証のためにユーザーをリダイレクトするときに IdP に送信する一意の識別子。すべてのチームが独自のエンティティ ID を受け取り、
https://sso.heroku.com/saml/<your team name>
の形式を取ります。ACS (アサーションコンシューマーサービス) URL: IdP はこの URL を使用してアサーションをポストします。これは
https://sso.heroku.com/saml/<your team name>/finalize
の形式を取ります。発行者: アサーションを発行するエンティティ。Salesforce Org では、発行者はデフォルトで Salesforce Org のドメイン URL になります。これは変更しないでおくことができます。
名前 ID 形式: サービスプロバイダー (Heroku) と IdP がユーザーレコードを一意に表すために使用する形式。Heroku は、IdP に記録されているユーザーのメールアドレスである
urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress
を使用します。Heroku は、このメールアドレスを使用して、IdP に正常に認証されるユーザーの一意の内部ユーザーレコードを作成します。件名タイプ: このフィールドは、ユーザーの ID がアサーションでどのように記述されるかを示します。Heroku は、このフィールドが IdP に記録されているユーザーのユーザー名であることを要求します。
リクエスト署名証明書 (オプション): これは、IdP がサービスプロバイダーからの認証リクエストを検証するために使用する証明書です。Heroku は認証リクエストに署名しません。
Salesforce Org をチームの IdP として設定する
このセクションでは、チームを接続アプリケーションとして設定することで、リライングサービスプロバイダーとして構成します。Salesforce 組織にログインし、一番上のメニューバーにある 設定
をクリックして管理者の設定ページに移動します。
ID フェデレーションは SAML 2.0 標準に基づいており、さまざまな ID プロバイダーを使用して設定できます。Salesforce Identity は、エンドツーエンドの設定を示す例としてのみ使用されています。
チームをサービスプロバイダーとして登録する
[セキュリティのコントロール
] の下の [ID プロバイダー
] を選択します。
[サービスプロバイダー
] セクションで、サービスプロバイダーを表す新しい接続アプリケーションを作成できるリンクをクリックします。また、サイドバーの [ビルド
] で [作成] > [アプリ]
の順に選択し、[接続アプリケーション
] セクションで [新規
] を選択してこのページに移動することもできます。
[新規接続アプリケーション
] ページで、サービスプロバイダー (この場合は Heroku チーム) に関する情報を入力します。すべての SAML 関連の構成は [Web アプリケーション設定
] セクションにあります。[SAML の有効化
] チェックボックスがオンになっていることを確認します。
IdP を設定すると、リクエストの署名を検証し、SAML 応答を暗号化できます。これらのチェックボックスはオフのままにします。[保存
] をクリックすると、Heroku がサービスプロバイダーとして設定されます。チームへのすべてのログイン要求は Salesforce Org にリダイレクトされるようになりました。Heroku に複数のチームがある場合は、各チームに独自の SAML 構成があるため、それぞれを個別の接続アプリケーションとして設定する必要があります。
ユーザープロファイルでチームへのアクセスを有効にする
接続アプリケーションをユーザーに割り当てられたプロファイルに追加する必要があります。チームを表す接続アプリケーションへのアクセスを許可するように割り当てられたプロファイルが設定されているユーザーのみが、IdP で正常に認証されます。
- [
ユーザーの管理
] で、[プロファイル
] をクリックします。 - チームにアクセスできるようにする開発者やその他のユーザーに割り当てるプロファイルの横にある [
編集
] をクリックします。 - [
接続アプリケーションへのアクセス
] セクションで、チームに対応する接続アプリケーションがオンになっていることを確認します。異なるプロファイルで同じ接続アプリケーションを有効にできます。
接続アプリケーションとして追加したチームは、アプリケーションランチャーにも表示されます。ログインしているユーザーがそれをクリックすると、ユーザー名とパスワードを再び指定しなくてもチームの Heroku ダッシュボードにログインします。
ID フェデレーションされたチームでユーザーを管理する
ID フェデレーションされたチームの動作は、ユーザーがどのようにプロビジョニングおよび管理されるかによって異なります。
既存ユーザー
Heroku の既存のチームで ID フェデレーションを有効にできます。チームの Heroku ログイン URL を現在のメンバーと共有し、その URL 経由でログインするように指示できます。
既存のチームユーザー (管理者を含む) が IdP 経由で初めてログインすると、そのユーザーはフェデレーションユーザーに完全に切り替えられます。Heroku のユーザー名とパスワードを使用してチームにログオンすることはできなくなります。この切り替えは、IdP によって提供されたメールアドレスが、Heroku に直接ログインするために使用するメールアドレスに一致するユーザーに対して自動的に実行されます。これらのユーザーは、引き続きそのメールアドレスと Heroku パスワードを使用して Heroku にログインし、自分の個人用アプリにアクセスできますが、IdP 経由でログインしない限り、チームにはアクセスできなくなります。
新規ユーザー
Heroku と IdP の両方で ID フェデレーションの設定が完了したら、この URL をチームの対象ユーザーに配布するか、シングルサインオンポータルなどの共有された領域に置くことができます。IdP 経由で正常にログインしたユーザーは、チームに自動的に追加されます。
チームにアクセスできるユーザーを制限する場合は、ID プロバイダー固有の機能を使用してそれを適用できます。たとえば、Salesforce Identity を使用する場合、チーム用に設定された接続アプリケーションを介して、異なるユーザーに異なるプロファイルを割り当て、Heroku のチームにアクセスできるユーザーを決定できます。
混在モード
デフォルトでは、ID フェデレーション用に設定されたチームには、IdP 経由でログオンするメンバーと、Heroku のユーザー名とパスワードを使用して直接ログオンするメンバーを含めることができます。このオプションにより、IdP にユーザーレコードが存在しない可能性がある一時的な業者などのユーザーをサポートできます。
IdP 経由のアクセスのみを許可するには、チームからすべての非フェデレーションユーザーを削除します。チームの Access
(アクセス) タブには、どのユーザーがフェデレーションされているかが表示されます。IdP 経由でログインしているユーザーと、Heroku のユーザー名とパスワードを使用しているユーザーが表示されます。後者の一連のユーザーの場合は、その MFA ステータスも表示されます。
フェデレーションされていないユーザーをすべて削除すると、IdP が利用できなくなった場合に誰もチームにアクセスできなくなります。このシナリオを防ぐには、特殊な管理者ユーザーを追加し、そのユーザーを非フェデレーションのままにします。必要に応じて、IdP 関連の問題を解決するまでこのユーザーとして直接ログインし、チームの ID フェデレーションを無効にできます。