Cómo permitir el acceso a sus aplicaciones como invitado no autenticado con Amazon Cognito - Amazon Location Service

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Cómo permitir el acceso a sus aplicaciones como invitado no autenticado con Amazon Cognito

Puede utilizar la autenticación de Amazon Cognito como alternativa al uso directo AWS Identity and Access Management (IAM) tanto con los SDK de frontend como con las solicitudes HTTPS directas.

Es posible que desee utilizar esta forma de autenticación por los siguientes motivos:

  • Usuarios no autenticados: si tiene un sitio web con usuarios anónimos, puede utilizar los grupos de identidades de Amazon Cognito. Para obtener más información, consulte la sección en Cómo permitir el acceso a sus aplicaciones como invitado no autenticado con Amazon Cognito.

  • Su propia autenticación: si desea utilizar su propio proceso de autenticación o combinar varios métodos de autenticación, puede utilizar Amazon Cognito Federated Identities. Para obtener más información, consulte Introducción a las identidades federadas en la Guía para desarrolladores de Amazon Cognito.

Amazon Cognito ofrece autenticación, autorización y administración de usuarios para aplicaciones móviles y web. Puede usar los grupos de identidades no autenticadas de Amazon Cognito con Amazon Location como una forma de que las aplicaciones recuperen credenciales temporales y restringidas. AWS

Para obtener más información, consulte Introducción a los grupos de usuarios en la Guía para desarrolladores de Amazon Cognito.

nota

Para los desarrolladores de dispositivos móviles, Amazon Location proporciona SDK de autenticación móvil para iOS y Android. Consulte los siguientes repositorios de github para obtener más información:

Creación de un grupo de identidades en Amazon Cognito

Puede crear grupos de identidades de Amazon Cognito para permitir el acceso de invitados no autenticados a su aplicación a través de la consola de Amazon Cognito, las API de Amazon Cognito o AWS CLIlas API de Amazon Cognito.

importante

El grupo que cree debe estar en la misma AWS región Cuenta de AWS y en la misma región que los recursos de Amazon Location Service que esté utilizando.

Puede utilizar las políticas de IAM asociadas a los roles de identidad no autenticados con las siguientes acciones:

  • geo:GetMap*

  • geo:SearchPlaceIndex*

  • geo:GetPlace

  • geo:CalculateRoute*

  • geo:GetGeofence

  • geo:ListGeofences

  • geo:PutGeofence

  • geo:BatchDeleteGeofence

  • geo:BatchPutGeofence

  • geo:BatchEvaluateGeofences

  • geo:GetDevicePosition*

  • geo:ListDevicePositions

  • geo:BatchDeleteDevicePositionHistory

  • geo:BatchGetDevicePosition

  • geo:BatchUpdateDevicePosition

La inclusión de otras acciones de Amazon Location no tendrá ningún efecto y las identidades no autenticadas no podrán llamarlas.

Para crear un grupo de identidades con la consola de Amazon Cognito

  1. Vaya a la consola de Amazon Cognito.

  2. Seleccione Administrar grupos de identidades.

  3. Seleccione Crear un nuevo grupo de identidades y, a continuación, introduzca un nombre para su grupo de identidades.

  4. En Identidades sin autenticar, elija Habilitar el acceso a identidades sin autenticar.

  5. Elija Crear grupo.

  6. Elija los roles de IAM que quiera usar con su grupo de identidades.

  7. Amplíe Ver detalles.

  8. En Identidades no autenticadas, introduzca un nombre de rol.

  9. Amplíe la sección Ver documento de política y, a continuación, seleccione Editar para agregar la política.

  10. Agregue su política para dar acceso a sus recursos.

    Los siguientes son ejemplos de políticas para mapas, lugares, rastreadores y rutas. Para usar los ejemplos en su propia política, reemplace los marcadores de región e ID de cuenta:

    Maps policy example

    La siguiente política concede acceso de solo lectura a un recurso de mapa denominado. ExampleMap

    { "Version": "2012-10-17", "Statement": [ { "Sid": "MapsReadOnly", "Effect": "Allow", "Action": [ "geo:GetMapStyleDescriptor", "geo:GetMapGlyphs", "geo:GetMapSprites", "geo:GetMapTile" ], "Resource": "arn:aws:geo:region:accountID:map/ExampleMap" } ] }

    Si agrega una condición de IAM que coincida con aws:referer, podrá limitar el acceso del navegador a sus recursos a una lista de direcciones URL o prefijos de direcciones URL. El siguiente ejemplo permite el acceso a un recurso de mapa cuyo nombre RasterEsriImagery proviene únicamente del sitio web example.com:

    aviso

    Si bien aws:referer puede limitar el acceso, no es un mecanismo de seguridad. Es peligroso incluir un valor de encabezado de referencia conocido públicamente. Las partes no autorizadas podrían utilizar navegadores personalizados o modificados para proporcionar cualquier valor aws:referer que eligieran. Por lo tanto, no aws:referer debe utilizarse para impedir que personas no autorizadas realicen solicitudes directas AWS . Se ofrece únicamente para que los clientes puedan proteger su contenido digital, como el contenido almacenado en Amazon S3, para evitar las referencias en sitios de terceros no autorizados. Para obtener más información, consulte AWS:referer.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "geo:GetMap*", "Resource": "arn:aws:geo:us-west-2:111122223333:map/RasterEsriImagery", "Condition": { "StringLike": { "aws:referer": [ "https://example.com/*", "https://www.example.com/*" ] } } } ] }

    Si utiliza Tangram para mostrar un mapa, no utilizará los descriptores de estilo, glifos ni sprites que devuelve la API de Maps. En su lugar, se configura apuntando a un archivo.zip que contiene las reglas de estilo y los recursos necesarios. La siguiente política otorga acceso de solo lectura a un recurso de mapa con el nombre ExampleMapde la GetMapTile operación.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "MapsReadOnly", "Effect": "Allow", "Action": [ "geo:GetMapTile" ], "Resource": "arn:aws:geo:region:accountID:map/ExampleMap" } ] }
    Places policy example

    La siguiente política concede acceso de solo lectura a un recurso de indexación de lugares denominado ExamplePlaceIndexpara buscar lugares mediante texto o posiciones.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "PlacesReadOnly", "Effect": "Allow", "Action": [ "geo:SearchPlaceIndex*", "geo:GetPlace" ], "Resource": "arn:aws:geo:region:accountID:place-index/ExamplePlaceIndex" } ] }

    Si agrega una condición de IAM que coincida con aws:referer, podrá limitar el acceso del navegador a sus recursos a una lista de direcciones URL o prefijos de direcciones URL. El siguiente ejemplo deniega el acceso a un recurso de índice de lugares cuyo nombre ExamplePlaceIndexproviene de todos los sitios web de referencia, excepto. example.com

    aviso

    Si bien aws:referer puede limitar el acceso, no es un mecanismo de seguridad. Es peligroso incluir un valor de encabezado de referencia conocido públicamente. Las partes no autorizadas podrían utilizar navegadores personalizados o modificados para proporcionar cualquier valor aws:referer que eligieran. Por lo tanto, no aws:referer debe utilizarse para impedir que personas no autorizadas realicen AWS solicitudes directas. Se ofrece únicamente para que los clientes puedan proteger su contenido digital, como el contenido almacenado en Amazon S3, para evitar las referencias en sitios de terceros no autorizados. Para obtener más información, consulte AWS:referer.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "geo:*", "Resource": "arn:aws:geo:us-west-2:111122223333:place-index/ExamplePlaceIndex", "Condition": { "StringLike": { "aws:referer": [ "https://example.com/*", "https://www.example.com/*" ] } } } ] }
    Trackers policy example

    La siguiente política otorga acceso a un recurso de rastreo denominado ExampleTrackerpara actualizar las posiciones de los dispositivos.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "UpdateDevicePosition", "Effect": "Allow", "Action": [ "geo:BatchUpdateDevicePosition" ], "Resource": "arn:aws:geo:region:accountID:tracker/ExampleTracker" } ] }

    Si agrega una condición de IAM que coincida con aws:referer, podrá limitar el acceso del navegador a sus recursos a una lista de direcciones URL o prefijos de direcciones URL. El siguiente ejemplo deniega el acceso a un recurso de seguimiento cuyo nombre ExampleTrackerproviene de todos los sitios web de referencia, exceptoexample.com.

    aviso

    Si bien aws:referer puede limitar el acceso, no es un mecanismo de seguridad. Es peligroso incluir un valor de encabezado de referencia conocido públicamente. Las partes no autorizadas podrían utilizar navegadores personalizados o modificados para proporcionar cualquier valor aws:referer que eligieran. Por lo tanto, no aws:referer debe utilizarse para impedir que terceros no autorizados realicen AWS solicitudes directas. Se ofrece únicamente para que los clientes puedan proteger su contenido digital, como el contenido almacenado en Amazon S3, para evitar las referencias en sitios de terceros no autorizados. Para obtener más información, consulte AWS:referer.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "geo:GetDevice*", "Resource": "arn:aws:geo:us-west-2:111122223333:tracker/ExampleTracker", "Condition": { "StringLike": { "aws:referer": [ "https://example.com/*", "https://www.example.com/*" ] } } } ] }
    Routes policy example

    La siguiente política otorga acceso a un recurso de calculadora de rutas denominado ExampleCalculatorpara calcular una ruta.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "RoutesReadOnly", "Effect": "Allow", "Action": [ "geo:CalculateRoute" ], "Resource": "arn:aws:geo:region:accountID:route-calculator/ExampleCalculator" } ] }

    Si agrega una condición de IAM que coincida con aws:referer, podrá limitar el acceso del navegador a sus recursos a una lista de direcciones URL o prefijos de direcciones URL. El siguiente ejemplo deniega el acceso a una calculadora de rutas con el nombre ExampleCalculatorde todos los sitios web de referencia, exceptoexample.com.

    aviso

    Si bien aws:referer puede limitar el acceso, no es un mecanismo de seguridad. Es peligroso incluir un valor de encabezado de referencia conocido públicamente. Las partes no autorizadas podrían utilizar navegadores personalizados o modificados para proporcionar cualquier valor aws:referer que eligieran. Por lo tanto, no aws:referer debe utilizarse para impedir que personas no autorizadas realicen AWS solicitudes directas. Se ofrece únicamente para que los clientes puedan proteger su contenido digital, como el contenido almacenado en Amazon S3, para evitar las referencias en sitios de terceros no autorizados. Para obtener más información, consulte AWS:referer.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "geo:*", "Resource": "arn:aws:geo:us-west-2:111122223333:route-calculator/ExampleCalculator", "Condition": { "StringLike": { "aws:referer": [ "https://example.com/*", "https://www.example.com/*" ] } } } ] }
    nota

    Si bien los grupos de identidades no autenticadas están pensados para ser expuestos en sitios de Internet no seguros, tenga en cuenta que se cambiarán por credenciales estándar y de duración limitada. AWS

    Es importante definir adecuadamente los roles de IAM asociadas a los grupos de identidades no autenticadas.

  11. Elija Permitir para crear sus grupos de identidades.

El grupo de identidades resultante sigue la sintaxis <region>:<GUID>.

Por ejemplo:

us-east-1:1sample4-5678-90ef-aaaa-1234abcd56ef

Para ver más ejemplos de políticas específicas de Amazon Location, consulte Ejemplos de políticas basadas en identidad para Amazon Location Service.

Uso de los grupos de identidades de Amazon Cognito en JavaScript

En el siguiente ejemplo, se intercambia el grupo de identidades no autenticadas que ha creado por credenciales que, a continuación, se utilizan para obtener el descriptor de estilo del recurso de mapa. ExampleMap

const AWS = require("aws-sdk"); const credentials = new AWS.CognitoIdentityCredentials({ IdentityPoolId: "<identity pool ID>" // for example, us-east-1:1sample4-5678-90ef-aaaa-1234abcd56ef }); const client = new AWS.Location({ credentials, region: AWS.config.region || "<region>" }); console.log(await client.getMapStyleDescriptor("ExampleMap").promise());
nota

Las credenciales recuperadas de identidades no autenticadas son válidas durante una hora.

A continuación, se muestra un ejemplo de una función que renueva automáticamente las credenciales antes de que caduquen.

async function refreshCredentials() { await credentials.refreshPromise(); // schedule the next credential refresh when they're about to expire setTimeout(refreshCredentials, credentials.expireTime - new Date()); }

Para simplificar este trabajo, puede usar la JavaScript Ayudante de autenticación de Amazon Location. Esto sustituye tanto a la obtención de las credenciales como a la actualización de las mismas. En este ejemplo, se usa el SDK de la versión 3 AWS . JavaScript

import { LocationClient, GetMapStyleDescriptorCommand } from "@aws-sdk/client-location"; import { withIdentityPoolId } from "@aws/amazon-location-utilities-auth-helper"; const identityPoolId = "<identity pool ID>"; // for example, us-east-1:1sample4-5678-90ef-aaaa-1234abcd56ef // Create an authentication helper instance using credentials from Cognito const authHelper = await withIdentityPoolId(identityPoolId); const client = new LocationClient({ region: "<region>", // The region containing both the identity pool and tracker resource ...authHelper.getLocationClientConfig(), // Provides configuration required to make requests to Amazon Location }); const input = { MapName: "ExampleMap", }; const command = new GetMapStyleDescriptorCommand(input); console.log(await client.send(command));

Siguientes pasos