Identifique a los usuarios con la federación OIDC - AWS Identity and Access Management

Identifique a los usuarios con la federación OIDC

Al crear políticas de acceso en IAM, suele ser útil poder especificar los permisos en función de las aplicaciones configuradas y el ID de los usuarios que se han autenticado con un proveedor de identidad (IdP) externo. Por ejemplo, la aplicación móvil que utiliza la federación OIDC podría mantener información en Amazon S3 con una estructura de este tipo:

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

Es posible que también quiera distinguir estas rutas de acceso según el proveedor. En tal caso, la estructura podría ser la siguiente (solo se muestran dos proveedores para ahorrar espacio):

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 ...

En el caso de estas estructuras, app1 y app2 representan distintas aplicaciones, tales como juegos diferentes, y cada usuario de la aplicación tiene una carpeta distinta. Los valores de app1 y app2 pueden ser nombres fáciles de recordar que usted asigna (por ejemplo, mynumbersgame) o pueden ser los ID de las aplicaciones que los proveedores asignan al configurar su aplicación. Si decide incluir nombres de proveedor en la ruta de acceso, estos también pueden ser nombres fáciles de recordar, tales como Cognito, Amazon, Facebook y Google.

Por lo general, puede crear las carpetas de app1 y app2 a través de la AWS Management Console, ya que los nombres de las aplicaciones son valores estáticos. Eso es así también si incluye el nombre del proveedor en la ruta de acceso, ya que el nombre del proveedor es también un valor estático. En cambio, las carpetas específicas de usuarios (user1, user2, user3, etc.) deben crearse en el tiempo de ejecución desde la aplicación con el ID de usuario que está disponible en el valor SubjectFromWebIdentityToken devuelto por la solicitud realizada a AssumeRoleWithWebIdentity.

Para escribir políticas que permitan el acceso exclusivo a los recursos por parte de usuarios individuales, puede hacer coincidir el nombre de la carpeta completa, incluido el nombre del proveedor y el nombre de la aplicación, si está utilizando esta opción. A continuación, puede incluir las siguientes claves de contexto específicas del proveedor que hagan referencia al ID de usuario que el proveedor devuelve:

  • cognito-identity.amazonaws.com:sub

  • www.amazon.com:user_id

  • graph.facebook.com:id

  • accounts.google.com:sub

En el caso de los proveedores de OIDC, utilice la dirección URL completa del proveedor de OIDC con la clave de subcontexto, tal y como se indica en el siguiente ejemplo:

  • server.example.com:sub

En el siguiente ejemplo se muestra una política de permisos que concede acceso a un bucket de Amazon S3 solo si el prefijo del bucket coincide con la cadena:

myBucket/Amazon/mynumbersgame/user1

En este ejemplo se presupone que el usuario ha iniciado sesión con Login with Amazon y que el usuario utiliza una aplicación denominada mynumbersgame. El ID único del usuario se presenta como un atributo denominado 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}/*" ] } ] }

Podría crear políticas similares para los usuarios que inician sesión con Amazon Cognito, Facebook, Google o cualquier otro proveedor de identidades (IdP) compatible con OpenID Connect. Estas políticas utilizarían un nombre de proveedor diferente como parte de la ruta de acceso, así como diferentes ID de aplicaciones.

Para obtener más información sobre las claves de federación de OIDC disponibles para verificaciones de condición en las políticas, consulte Claves disponibles para las federaciones de identidades AWS de OIDC.