皆様がAWSのアカウントのコントロールをより簡単にできるように、この半年の間にAWS Identity and Access Management (IAM)の機能を拡張してきました。
本日の発表は、IAMにおいて、Identity Federation(ID統合)を実現するものです。この機能により、企業内の既存ID(例えば、ユーザー)から、IAMの詳細なアクセスコントロールによる制限を活用しながら、AWS APIやリソースにアクセスできるようになります。しかも、各既存IDに対してIAMユーザーを作る必要がありません。
つまり、AWSを活用するアプリケーションにおいて、AWSへのリクエストを認証するのに使うことができる一時発行セキュリティ証明書を発行することができます。この一時発行セキュリティ証明書は、時限式(1-36時間)の、アクセスキーとセッショントークンから成ります。アプリケーションの企業ユーザーは、AWS APIへのコールをトークンを用いて発行する限り、この(一時発行の)アクセスキーをこれまでと同様に用いることができるのです。一時発行セキュリティ証明書に紐付いたパーミッションは、それを発行したIAMユーザーと最大で同レベルのパーミッションを持つことができます。もちろん、一時発行セキュリティ証明書を発行する際により厳格にパーミッションを制限することもできます。ちなみに、一時発行セキュリティ証明書を発行する数に対して制限はありません。
利用のフロー
大企業の各従業員が、自身のデータファイルをS3バケットの中に保存できるようなレポーティングアプリケーションを考えてみましょう。S3にコールを発行する前に、そのアプリケーションは、下図のように、新しいGetFederationToken 関数を用いて、各従業員に紐付いた一時発行セキュリティ証明書を発行することが可能になります。

この流れの各ステップを追いかけてみましょう。
-
従業員がAWSベースのレポーティングアプリケーションを用いて、情報をAmazon S3に保存しようとします身元確認ブローカー
左のフローは、身元確認ブローカーがすでにあることを仮定しています。このブローカーは、従業員のIDをAWSのセキュリティ証明書にマッピングする責務を持っています。このブローカーは、異なるプロセスや、ネットワークサービスなど様々な形で実現できるでしょう。こちらで、ご自身の身元確認ブローカーをどのように作るのか理解して頂くために、身元確認ブローカーのサンプルを用意しておきました。このサンプルコードは、Microsoft Active Directoryを利用してプロキシー(ブローカー)を実装しています。このプロキシーは、Active Directoryの特定ユーザーに紐付いたパーミッションを使い、Amazon S3バケットとオブジェクトにアクセスするためにテンポラリのセキュリティ証明書を発行します。このサンプルコードは、統合プロキシーとコンソールアプリのサンプルを含んでいます。
- アプリケーションは、身元確認ブローカー(仮名、右参照)をコールします。ブローカーは、従業員のIDをインプットとして受け取ります
- 身元確認ブローカーは、企業のLDAPディレクトリを使い、従業員の身元確認を行います
- 身元確認ブローカーは、IAMのセキュリティ証明書を用いて、新しいGetFederationToken関数を呼び出します。このコールは、IAMポリシーと期間(1時間~36時間)を含んでいる必要があり、発行する一時発行セキュリティ証明書に与えるべきパーミッションを指定したポリシーも付け加えます
- Security Token Serviceは、この関数をコールしたIAMユーザーのポリシーが、新しいトークンを作成するのに十分なパーミッションを満たしているか確認したのちに、アクセスキー、シークレットキー、トークン、有効期限(トークンの生存期間を返します。
- 身元確認ブローカーは、一時発行セキュリティ証明書をレポーティングアプリケーションに返します
- レポーティングアプリケーションは、一時発行セキュリティ証明書(トークンを含んだ)を用いて、Amazon S3にリクエストを作成します
- Amazon S3は、この一時発行セキュリティ証明書が、指定したS3バケットとオブジェクトに対するアクセス権を持っているか、IAMを用いて確認します
- IAMは、S3に問題が無いことを告げます
Security Token Serviceは、生存期間を持ったトークンを返すので、クライアントアプリケーション側で、トークンの有効期限をチェックし、現在のトークンが期限切れになる前に、新しいトークンを取得する必要があります。期限切れのトークンを伴ったリクエストは全て失敗します。
トークンに与えられるパーミッションは、GetFederationToken関数のコーラー(特定のIAMユーザー)に与えられたパーミッションのサブセットになります。これは、IAMユーザーに対するアクセス権を適切に管理することで、アプリケーションが利用できるリソースを限定することができることを意味します。
Identity Federationは、現時点で、 EC2、S3、SNS、SQSに対して利用が可能です。今後もサポート対象のサービスを増やしていく予定ですので、乞うご期待!


コメント