ウェブ 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
...
この形式では、app1
と app2
は、ゲームなどの異なるアプリを表し、アプリのユーザーごとに個別のフォルダが作成されます。app1
と app2
の値は、ユーザーが割り当てたわかりやすい名前 (たとえば、mynumbersgame
) でも、アプリを設定したときにプロバイダーが割り当てたアプリ ID でもかまいません。パスにプロバイダー名を含める場合は、それも Cognito
、Amazon
、Facebook
、Google
のような、わかりやすい名前にできます。
アプリケーション名は静的な値であるため、通常、AWS Management Console を使って app1
と app2
用のフォルダーを作成できます。プロバイダー名も静的な値であるため、これはプロバイダー名をパスに含める場合も同様です。これに対して、ユーザー固有のフォルダー (user1
、user2
、user3
など) は、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 フェデレーションで利用可能なキー」を参照してください。