SAML統合でSalesforceからAWSのサービスにアクセスする (1)

こんにちは。@stomita (id:shinichitomita) です。
メインのTech Blogをはてなブログに移行して、いちおう初回のエントリです。

今回はSalesforceSAML IdP機能を使って、今年のAWS re:Inventで発表されたAWSのSAML統合機能と組み合わせると結構おもしろいことができるよ、ということについてお話します。

なお、この記事は、Force.com Advent Calendar 2013 に参加しているっぽいです。

この記事の想定対象読者

SalesforceSAMLシングルサインオンの設定をして、一体何が美味しいのかわからない、という方。
パスワード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がやってくれるので、実際はこのSDKSAMLアサーションをわたしてあげるだけでOK。JavaScriptのプログラムからS3のAPIが簡単に利用できる。

(以下、詳しい手順は次回へ!)