例のごとくApexからSTSを触ってみました。

STSとは

STSはAWS Security Token ServiceというAWSのサービスで[IAMユーザを持たないアプリに対してアクセス権限を与える]サービスになります。

具体的には以下の用途で利用されます

  • 既存のLDAP, ADを利用した連携
  • facebook, google等のOAuth(Open ID)アプリのWeb ID連携
  • SAMLアサーションを利用した連携
  • 別のAWS環境(AWSアカウント自体が異なる)へのクロスアカウントアクセス

WebID連携やSAML連携はAccessKeyIdやSecretAccessKeyを完全に隠蔽できるので、セキュアになるだけでなく上記クレデンシャルの管理をしなくて済むので保守性も良くなります。

開発環境のAWSアカウントと本番環境のAWSアカウントを分けている場合は、クロスアカウントアクセスが有効で、本番環境のクレデンシャル無しに本番環境のリソースにアクセス出来ます。

詳細なユースケースはこちらから↓
http://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/WorkingWithRoles.html

ちなみにIAMのRoleっていう機能はイコールSTSなので、STSはIAMユーザを持たないアプリに対してRoleを付与するためのサービスになります。

Apexから叩く

で、以下がApexのサンプルクラス

詳しいAPI仕様はこちらから。

STSは基本的にSignature Version4で、AssumeRoleWithSAMLだけは認証情報が必要ありません。つまり、単純なHTTP-POST or HTTP-GETでOKです。Console画面への自動ログインURLも1回HTTP-GETでSigninToken取ってきて、それをGETパラメータに含めてURL生成するだけで超簡単。

ただし、AssumeRoleWithSAMLをするときにはRoleの設定に注意してください。詳しくは過去の記事参照。