ウェブ ID フェデレーションを使用したユーザーの識別 - AWS Identity and Access Management

ウェブ ID フェデレーションを使用したユーザーの識別

IAM でアクセスポリシーを作成するときに、設定されたアプリと、外部 ID プロバイダー (IdP) を使用して認証されたユーザーの ID に基づいてアクセス権限を指定できると、便利です。たとえば、ウェブ ID フェデレーションを使用するモバイルアプリは、次のような形式で Amazon S3 に情報を保存することができます。

myBucket/app1/user1 myBucket/app1/user2 myBucket/app1/user3 ... myBucket/app2/user1 myBucket/app2/user2 myBucket/app2/user3 ...

また、さらに、これらのパスをプロバイダー別に区別することもできます。その場合、形式は次のようになります(場所をとらないように 2 つのプロバイダーだけを示します)。

myBucket/Amazon/app1/user1 myBucket/Amazon/app1/user2 myBucket/Amazon/app1/user3 ... myBucket/Amazon/app2/user1 myBucket/Amazon/app2/user2 myBucket/Amazon/app2/user3 myBucket/Facebook/app1/user1 myBucket/Facebook/app1/user2 myBucket/Facebook/app1/user3 ... myBucket/Facebook/app2/user1 myBucket/Facebook/app2/user2 myBucket/Facebook/app2/user3 ...

この形式では、app1app2 は、ゲームなどの異なるアプリを表し、アプリのユーザーごとに個別のフォルダが作成されます。app1app2 の値は、ユーザーが割り当てたわかりやすい名前 (たとえば、mynumbersgame) でも、アプリを設定したときにプロバイダーが割り当てたアプリ ID でもかまいません。パスにプロバイダー名を含める場合は、それも CognitoAmazonFacebookGoogle のような、わかりやすい名前にできます。

アプリケーション名は静的な値であるため、通常、AWS Management Console を使って app1app2 用のフォルダーを作成できます。プロバイダー名も静的な値であるため、これはプロバイダー名をパスに含める場合も同様です。これに対して、ユーザー固有のフォルダー (user1user2user3 など) は、AssumeRoleWithWebIdentity にリクエストして返された SubjectFromWebIdentityToken 値にあるユーザー ID を使用して、実行時にアプリ側で作成する必要があります。

個々のユーザーにリソースへの排他的アクセスを許可するポリシーを作成するには、アプリ名およびプロバイダー名も含めて(使用している場合)、完全に一致するフォルダー名を使用します。続いて、プロバイダーから返されるユーザー ID を参照する、次のようなプロバイダー固有のコンテキストキーの値を含めます。

  • cognito-identity.amazonaws.com:sub

  • www.amazon.com:user_id

  • graph.facebook.com:id

  • accounts.google.com:sub

OIDC プロバイダーの場合は、以下の例のように、OIDC プロバイダーの完全修飾 URL とサブコンテキストキーを使用します。

  • server.example.com:sub

次の例は、バケットのプレフィックスが文字列に一致する場合にのみ、Amazon S3 のバケットへのアクセスを許可するアクセス許可ポリシーを示します。

myBucket/Amazon/mynumbersgame/user1

この例では、ユーザーが Login with Amazon を使用してサインインし、mynumbersgame というをアプリを使用していると仮定しています。ユーザーの一意の ID は、user_id と呼ばれる属性として表示されます。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["s3:ListBucket"], "Resource": ["arn:aws:s3:::myBucket"], "Condition": {"StringLike": {"s3:prefix": ["Amazon/mynumbersgame/${www.amazon.com:user_id}/*"]}} }, { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject", "s3:DeleteObject" ], "Resource": [ "arn:aws:s3:::myBucket/amazon/mynumbersgame/${www.amazon.com:user_id}", "arn:aws:s3:::myBucket/amazon/mynumbersgame/${www.amazon.com:user_id}/*" ] } ] }

Amazon Cognito、Facebook、Google、または別の OpenID 接続互換 IdP を使用してサインインするユーザーにも同様のポリシーを作成します。これらのポリシーでは、パスの一部に別のプロバイダー名を使用し、また別のアプリ ID を使用します。

ポリシーの条件チェックで利用可能なウェブ ID フェデレーションのキーの詳細については、「AWS ウェブ ID フェデレーションで利用可能なキー」を参照してください。