SSO for HerokuがPublic Bataになりました。Enterprise限定の機能です。
SalesforceやGoogle Appsのユーザ情報を使ってHerokuにログインできるようになるやつです。
https://blog.heroku.com/archives/2015/12/17/SSO-for-Heroku
早速これをつかってSalesforceからHerokuにログインできるようにしてみようと思います。
必要なもの
- Heroku Enterprise契約(Heroku Organization)
- Heroku OrganizationのAdminロール(多分)
- Salesforceのシステム管理者
注意点
- パスワードでログインできなくなります(toolbeltは
heroku login --sso
でログインします) - メールアドレスを変更できなくなります
- SSOを解除する方法がありません(OrganizationのSSO設定ごと解除することはできます)
- Manage Account→Applicationsが使えなくなります(OAuthのやつ)
- API Keyが使えなくなります
- SSH Keyを追加できなくなります(HTTP gitを使えと書いてあります)
- Herokuのアカウントを削除できなくなります
SSOを解除できない、メールアドレスを変更できないあたり、会社専用のアカウントに使うための機能のようです。
OAuth使えなくなるの大丈夫かな?と思いますが使ってないのでよくわかりません。
SSH Keyが使えなくなるのは困ります。HTTP gitが使えないとCIからデプロイできません。
Herokuサービスプロバイダ情報を確認
Herokuダッシュボードから、自分のOrganization→Settingsを開きます。
後からここの情報をコピペすることになります。
Salesforceの設定
マイドメインのリリース
SalesforceをIDプロバイダにするにはマイドメインをリリースする必要があります。
マイドメインの設定は一度しかできません。設定すると変更できなくなります。
任意のドメインを入力し、使用可能か調べる→同意チェック→ドメインの登録とします。
しばらくの間は「貴社のドメイン名登録は未認証です」と表示されていますが、10分ぐらい経ってリロードすると「テスト可能です」になります。
こちらをクリックしてログインしてください→ユーザにリリースと操作するとマイドメインが利用可能になります。
接続アプリケーションの作成
Herokuのサービスプロバイダ情報を設定する手順です。設定→ビルド→作成→アプリケーションを開き、接続アプリケーションを新規作成し、以下のように入力して保存します。
- 接続アプリケーション名: 画面に表示されます。なんでもいいです。Herokuとか
- API参照名: なんでもいいです。Herokuとか
- 取引責任者メール: 連絡先メールアドレスの意味です。なんでもいいです
- ロゴ画像URL: アプリケーションランチャーに表示されるロゴ画像です。幅が最大200px、高さが最大125pxとかなり小さい画像しか使えません。なんでもいいですが http://heroku.com/brand から探してリサイズしたものを使いました。
- SAMLの有効化にチェック。これをチェックしないとここから下の設定は表示されません
- 開始URL: Herokuのサービスプロバイダ情報から Heroku Login URL (Start URL) をコピペします
- エンティティID: Herokuのサービスプロバイダ情報から Heroku Entity ID をコピペします
- ACS URL: Herokuのサービスプロバイダ情報から ACS URL をコピペします
-
件名種別: HerokuのID(メールアドレス)に対応するSalesforceのUserオブジェクトの項目を選びます
- ユーザ名がメールアドレスになっていればユーザ名でいいです
- 違うならユーザオブジェクトにメールアドレスを設定するカスタム項目(数式でもよさ気)を作成し、カスタム属性→メールアドレスを設定する項目と選びます。標準のEmail項目が選べればいいのに…
- 他にSSOしているサービスがないなら統合ID(FederationIdentifier項目。512文字)を使ってもいいですが、レイアウトに表示することができないのでSalesforceの管理者がAPIなどで設定する必要があります
- 永続IDはよく知らないのですが、アルゴリズムで計算されるものらしいので使えないと思います。多分SAMLのPersistent Pseudonym Identifierのことです
- 名前ID形式: Herokuのサービスプロバイダ情報の Name-id Format と同じものを選択します。最後がemailAddressになってるやつです
接続アプリケーションの権限設定
接続アプリケーションを保存し、詳細レイアウトのManageボタンから接続アプリケーションの管理に移動します。
下の方にあるプロファイル関連リストのプロファイルを管理するボタンから、SSOを許可するプロファイルを追加します。権限セットで設定することもできます。
ここまで設定すると、アプリケーションスイッチャやアプリケーションランチャーからこのアプリを選べるようになります。システム管理者でもプロファイルを追加しないと利用できません。
Herokuの設定
SAMLメタデータのダウンロード
まだSalesforceです。さっきの接続アプリケーションの管理を開きます。
SAMLログイン情報セクションのメタデータのダウンロードボタンからメタデータをダウンロードします。SAMLIdP-aqwsedrftgyhujik.xml
というようなファイル名でダウンロードされるはずです。
SAMLメタデータのアップロード
Herokuダッシュボードから、自分のOrganization→Settings(最初の画面)を開き、Upload MetadataでさっきダウンロードしたSAMLIdP-aqwsedrftgyhujik.xml
をアップロードします。これでシングルサインオンできるようになります。
なお複数のIDプロバイダを設定することはできないようです。
SSOの解除
Herokuダッシュボードから、自分のOrganization→Settingsを開き、Disableボタンで解除することができます。
ユーザ単位で解除する方法はありません。
シングルサインオン
Salesforceから(IdP initiated)
Salesforceにログイン済みなら、Salesforceのアプリケーションスイッチャ(ランチャー)からログインするのが簡単でしょう。
Herokuから(SP initiated)
Herokuのログイン画面の下の方にこそっとLogin via SSOというリンクができているのでそこからログインすることもできます。 こっちの場合は最初にHeroku Organization名を入力することになります。
SSOの有効化
SSOでログインした時、Salesforceが持っているHerokuのID(メールアドレス)に該当するユーザがいる場合、最初にアカウントの確認を求められます。
Verify my Accountボタンから普通にHerokuにログインすると、「メールアドレスとパスワードではログインできなくなりますよ」といった注意事項が表示されます。
Upgrade my AccountをクリックするとSSOできるようになります。
なおSSOログインした時該当するHerokuユーザがいなければ、自動的に新規ユーザでサインアップされます。ジャストインタイムプロビジョニングと言うらしいです。
Heroku Toolbelt
SSOするとHeroku Toolbeltがログアウトさせられるので、heroku login --sso
でログインしなおします。
コマンドを入力するとHeroku Organization名を聞かれます。その後ブラウザが開き、Access Tokenが表示されるのでコピペします。後はこれまでどおり利用できるはずです。
どうもこのAccess TokenはAPI Keyのように利用できるようですが、(短時間しか試してませんが)毎回同じトークンになります。API Keyの再発行に相当する機能が見当たりません。どうやるんだろう。
注意事項
パスワードでログインできなくなる
SSOを有効化するとパスワードでログインできなくなります。Toolbeltはheroku login --sso
でログインします。
SSOするとパスワードが無効化されるので、OrganizationのSSOが無効化された場合、パスワードをリセットする必要があります。
Heroku Organizationを抜けてもSSO経由でしかログインできないままです。パスワードでログインできるようにはなりません。SSO経由でログインするとまたOrganizationのメンバーに戻ります。
メールアドレスを変更できなくなる
会社の仕事専用のHerokuアカウントで使う想定なのだと思います。会社を辞めてメールアドレスやSSOのIDプロバイダが使えなくなったらどうしようもありません。
仕事と関係ないPersonal appをそのアカウントで作っていた、というような場合は、会社の管理者に頼んでTransfer Ownershipしてもらうくらいしかないでしょう。
SSOを解除する方法がない
一度SSOすると解除する方法がありません。OrganizationのSSO設定ごと解除するしかありません。
Heroku Organizationを抜けてもSSO経由でしかログインできないままです。パスワードでログインできるようにはなりません。SSO経由でログインするとまたOrganizationのメンバーに戻ります。
ちなみにSSOするとパスワードが無効化されるので、OrganizationのSSOが無効化された場合、パスワードをリセットする必要があります。
Manage Account→Applicationsが使えなくなる
OAuthのやつです。使ってないのでどのくらい影響があるかよくわかりません。
API Keyが使えなくなる
CIからアクセスするのが大変なので困り者です。heroku login --sso
のAccess TokenをAPI Keyの代わりに利用できるようですが、SSH Keyも追加できなくなるのでHTTP gitに対応していないCIだとデプロイできません。
ところでこのAccess Token、(短時間しか試してませんが)毎回同じトークンになります。API Keyの再発行に相当する機能が見当たりません。どうやるんだろう。
SSOした時点でAPI Keyが無効化されるようです。OrganizationのSSOが無効化された場合、新しいAPI Keyが発行されます。
SSH Keyを追加できなくなる
これまで登録していたSSH Keyは引き続き利用できるようです。削除することもできないのは問題のような…
gitはHTTP gitを使うようにと書いてあります。
Herokuのアカウントを削除できなくなる
これは困ることはないのでは。
参考リンク
- https://blog.heroku.com/archives/2015/12/17/SSO-for-Heroku ブログでのアナウンス
- https://devcenter.heroku.com/articles/sso-for-heroku 公式リファレンス
- https://devcenter.heroku.com/articles/using-sso-services-with-heroku SSOの設定方法Heroku側
- https://devcenter.heroku.com/articles/using-salesforce-identity-sso-with-heroku SSOの設定方法Salesforce側
- https://devcenter.heroku.com/articles/using-single-sign-on-sso-services-with-heroku-for-end-users ユーザガイド