この記事を参考にSalesforceからAWSにSAMLAssertionを投げて、AWSのコンソール画面にシングルサインオンするっていうのは出来たが、対象のRoleの一時的なAccessKeyIdやSecretAccessKeyを取得するためのAssumeRoleWithSAML のREST APIが通そうとしたところ、こんな感じのエラーが出てしまった。

これはSSO用のロール作成で、[Grant Web Single Sign-On(WebSSO) access to SAML providers]のロールタイプを選んだ時に自動的に条件の”SAML:aud”にAWS ConsoleのSAML Endpointが設定されてしまうのが原因です。

CreateRole

SalesforceでSAMLアサーションを使ってAssumeRoleWithSAMLをコールする場合は

  1. ACS URLにVisualforce Page等のURLをセットして
  2. 開始URLにアクセス→設定したVisualforce Pageに画面遷移(HTTP-POST)
  3. 呼び出されたVisualforce PageからAssumeRoleWithSAMLをコール

という流れで、Visualforce PageからSAMLアサーションを送るので、”SAML:aud”はVisualforce PageのURLにしないといけません。

ということで、対象RoleのTrust Relationshipはこんな感じになります。

あるいは”SAML:iss”は”https://[MyDomain].my.salesforce.com”でどちらのケースも変わらないので、これを設定するだけでもOKです。