SAML統合でSalesforceからAWSのサービスにアクセスする (1)
こんにちは。@stomita (id:shinichitomita) です。
メインのTech Blogをはてなブログに移行して、いちおう初回のエントリです。
今回はSalesforceのSAML IdP機能を使って、今年のAWS re:Inventで発表されたAWSのSAML統合機能と組み合わせると結構おもしろいことができるよ、ということについてお話します。
なお、この記事は、Force.com Advent Calendar 2013 に参加しているっぽいです。
この記事の想定対象読者
SalesforceでSAMLシングルサインオンの設定をして、一体何が美味しいのかわからない、という方。
パスワード2つ登録して別々にログインするので別にいいじゃん?という方のためのエントリ。
SalesforceとAWSでクラウドインテグレーション、みたいなことをしたい企業の方々にはおすすめかも。まあそうでもないかも。
この記事で提案したいこと
「SAML統合の設定をしておくと、Salesforceにログインしただけで、S3の安価で膨大なストレージが使えるようになるよ!」
この記事で達成できる予定のこと
- Salesforceにログインし、任意のレコードの詳細ページを表示
- 詳細ページに埋め込まれたVisualforce画面に、S3のフォルダ内に格納されているファイルがリストされる。
- 画面にファイルをドラッグ&ドロップすると、S3のフォルダ内にファイルが保管される
この記事で「やらない」こと
「Apexを使ってサーバサイドでS3にファイルを転送」
- S3にはブラウザから直接ファイルアップロードできるので、中間プログラムを介する必要は特にない。
- 不必要にサーバサイドを経由するのは、レスポンス的にも帯域的にもよろしくない。
- そもそもSalesforceが標準で提供する添付ファイル/コンテンツの容量だったり単価だったりが厳しいから、今回の提案がありえるわけです。
SAML連携の設定
実は、AWSとのSAML連携の設定方法は、だいたいここに書いてあるのでした(あれ、もしかしてこの記事いらない?)
http://wiki.developerforce.com/page/Configuring-SAML-SSO-to-AWS
ただし、この設定手順にしたがって設定すると、シングルサインオンのためのSAMLアサーションをAWS Consoleに渡してしまうので、SalesforceからAWS Consoleにログインすることになる。
通常、Salesforce上のアイデンティティが司るものは、管理者のアイデンティティ(開発・情シス)ではなく、エンドユーザ(営業・サポート・マーケティング・経営者)のアイデンティティなので、AWSのConsoleにログインできてもあまり嬉しくはない。
そこで、今回は、SAMLアサーションのコンシューマとなるWebアプリ(Visualforce)を別に作成し、そちらにSAMLアサーションを渡すように設定する。そして、そのWebアプリからSAMLアサーションを使ってS3にアクセスする。
具体的には、SAMLアサーションからSTS経由で一時トークンを取得し、その一時トークンを利用してS3にアクセスするのだけれども、詳しい方法についてはここに記載がある。
http://docs.aws.amazon.com/STS/latest/UsingSTS/CreatingSAML.html
ただし、ここらへんのやりとりは実はすべてAWS JavaScript SDKがやってくれるので、実際はこのSDKにSAMLアサーションをわたしてあげるだけでOK。JavaScriptのプログラムからS3のAPIが簡単に利用できる。
(以下、詳しい手順は次回へ!)
各回へのリンク
- SAML統合でSalesforceからAWSのサービスにアクセスする (1)
- SAML統合でSalesforceからAWSのサービスにアクセスする (2)
- SAML統合でSalesforceからAWSのサービスにアクセスする (3)