

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.

# Protección de la base de datos de Amazon Neptune
<a name="security"></a>

 AWS La seguridad en la nube es la máxima prioridad. Como AWS cliente, usted se beneficia de una arquitectura de centro de datos y red diseñada para cumplir con los requisitos de las organizaciones más sensibles a la seguridad.

La seguridad es una responsabilidad compartida entre usted AWS y usted. El [modelo de responsabilidad compartida](https://aws.amazon.com/compliance/shared-responsibility-model/) la describe como seguridad *de* la nube y seguridad *en* la nube:
+ **Seguridad de la nube**: AWS es responsable de proteger la infraestructura que ejecuta AWS los servicios en la AWS nube. AWS también le proporciona servicios que puede utilizar de forma segura. Auditores independientes prueban y verifican periódicamente la eficacia de nuestra seguridad en el marco de los [programas de conformidad de AWS](https://aws.amazon.com/compliance/programs/). Para obtener más información acerca de los programas de conformidad que se aplican a Amazon Neptune, consulte [Servicios de AWS en el ámbito del programa de conformidad](https://aws.amazon.com/compliance/services-in-scope/).
+ **Seguridad en la nube**: su responsabilidad viene determinada por el AWS servicio que utilice. También es responsable de otros factores, incluida la confidencialidad de los datos, los requisitos de la empresa y la legislación y la normativa aplicables.

Esta documentación le ayuda a comprender cómo aplicar el modelo de responsabilidad compartida cuando se utiliza Neptune. En los siguientes temas, se le mostrará cómo configurar Neptune para satisfacer sus objetivos de seguridad y conformidad. También aprenderá a usar otros AWS servicios que le ayudan a monitorear y proteger sus recursos de Neptune.

**Topics**
+ [Actualizaciones del sistema operativo de Amazon Neptune](security-os-upgrades.md)
+ [Protección de datos en la base de datos de Amazon Neptune](data-protection.md)
+ [Autenticación de la base de datos de Amazon Neptune con AWS Identity and Access Management](iam-auth.md)
+ [Habilitación de la autenticación de bases de datos de IAM en Amazon Neptune](iam-auth-enable.md)
+ [Conexión a la base de datos de Amazon Neptune mediante autenticación AWS Identity and Access Management](iam-auth-connecting.md)
+ [Administración del acceso a las bases de datos de Amazon Neptune mediante políticas de IAM](security-iam-access-manage.md)
+ [Uso de roles vinculados a servicios para Amazon Neptune](security-iam-service-linked-roles.md)
+ [Uso de credenciales temporales para conectarse a Amazon Neptune](iam-auth-temporary-credentials.md)
+ [Registro y supervisión del uso y el rendimiento en Amazon Neptune](security-monitoring.md)
+ [Amazon Neptune y puntos de enlace de VPC de interfaz ()AWS PrivateLink](vpc-interface-endpoints.md)
+ [Consideraciones de conformidad para Amazon Neptune](neptune-compliance.md)
+ [Creación de implementaciones de Amazon Neptune resilientes y tolerantes a los desastres](disaster-recovery-resiliency.md)

# Actualizaciones del sistema operativo de Amazon Neptune
<a name="security-os-upgrades"></a>

 Amazon Neptune garantiza mejoras continuas en el rendimiento, la seguridad y la estabilidad de la base de datos mediante actualizaciones periódicas del sistema operativo. Estas actualizaciones se aplican tanto a Neptune Database como a Neptune Analytics, por medio de un proceso de actualización estructurado. Amazon Neptune publica actualizaciones del sistema operativo al menos una vez al mes. 

 Las actualizaciones del sistema operativo de Neptune Database que no requieren tiempo de inactividad se aplican automáticamente durante el periodo de mantenimiento. Algunas actualizaciones del sistema operativo (por ejemplo, la actualización de la versión del kernel) requieren reiniciar la instancia. Estas actualizaciones son opcionales y no tienen una fecha fija para aplicarlas. Sin embargo, si no las aplica, es posible que acaben siendo necesarias y se apliquen automáticamente durante el periodo de mantenimiento de la instancia. 

 **Neptune Analytics**: las actualizaciones del sistema operativo de Neptune Analytics se realizan de forma fluida y no requieren ninguna acción por parte del cliente. Estas actualizaciones se aplican automáticamente en segundo plano sin tiempo de inactividad. 

 Para mantener la seguridad y la conformidad, le recomendamos que aplique todas las actualizaciones que Amazon Neptune pone a disposición de forma rutinaria durante el periodo de mantenimiento. Mantenerse al día con todas las actualizaciones opcionales y obligatorias ayuda a incorporar parches de seguridad críticos y garantiza la conformidad con varias obligaciones normativas. Las versiones obsoletas del sistema operativo pueden dar lugar al incumplimiento de los requisitos normativos. 

## Minimización del tiempo de inactividad para las actualizaciones del sistema operativo que requieren un reinicio
<a name="security-os-upgrades-minimizing-downtime"></a>

 En el caso de las actualizaciones del sistema operativo que requieren un reinicio, recomendamos actualizar primero las instancias del lector en un clúster y, a continuación, la instancia del escritor, con el fin de maximizar la disponibilidad del clúster. No recomendamos actualizar las instancias de lector y escritor al mismo tiempo, ya que podría producirse un tiempo de inactividad más prolongado en caso de conmutación por error. 

## Aplicación de actualizaciones del sistema operativo a la instancia de base de datos de Neptune
<a name="security-applying-os-upgrades"></a>

 En ocasiones, las instancias de base de datos de Neptune requieren actualizaciones del sistema operativo. Amazon Neptune actualiza el sistema operativo a una versión más reciente para mejorar el rendimiento de la base de datos y la postura de seguridad general de los clientes. Normalmente, las actualizaciones tardan unos 10 minutos en completarse. Las actualizaciones del sistema operativo no cambian la versión del motor de la base de datos ni la clase de instancia de la base de datos. 

 Para recibir una notificación cuando haya una nueva actualización opcional disponible, puede suscribirse a `RDS-EVENT-0230` en la categoría de eventos de parches de seguridad. Para obtener información acerca de la suscripción a eventos de Amazon Neptune, consulte [Suscripción a la notificación de eventos de Neptune](https://docs.aws.amazon.com//neptune/latest/userguide/events-subscribing.html). 

**importante**  
 La instancia de base de datos de Amazon Neptune se desconectará durante la actualización del sistema operativo. Puede minimizar el tiempo de inactividad del clúster si dispone de un clúster de varias instancias. Si no tiene un clúster de varias instancias, puede optar por crear uno temporalmente mediante la adición de instancias secundarias para llevar a cabo este mantenimiento y, a continuación, eliminar las instancias de lectura adicionales una vez finalizado el mantenimiento (se aplicarán los cargos habituales por la instancia secundaria). 

 Puede usar la CLI Consola de administración de AWS o la AWS CLI para determinar si hay una actualización disponible. 

### Usando el Consola de administración de AWS
<a name="security-applying-os-upgrades-management-console"></a>

 Para determinar si una actualización está disponible mediante la Consola de administración de AWS: 

1. [Inicie sesión en la consola AWS de administración y abra la consola de Amazon Neptune en https://console.aws.amazon.com/neptune/ casa.](https://console.aws.amazon.com/neptune/home)

1.  En el panel de navegación, elija **Clústeres** y, a continuación, seleccione la instancia. 

1.  Elija **Mantenimiento**. 

1.  En la sección **Mantenimiento pendiente**, busque la actualización del sistema operativo. 

![\[Imagen que muestra la sección Consola de administración de AWS de mantenimiento y una actualización del sistema operativo disponible.\]](http://docs.aws.amazon.com/es_es/neptune/latest/userguide/images/consoleForOSUpgrades.png)


 Puede seleccionar la actualización del sistema operativo y hacer clic en **Aplicar ahora** o en **Aplicar durante la próxima ventana de mantenimiento** en la sección **Mantenimiento pendiente**. Si el valor de mantenimiento es **siguiente periodo**, aplace los elementos de mantenimiento seleccionando **aplazar actualización**. No puede aplazar una acción de mantenimiento si ya se ha iniciado. 

 Como alternativa, puede elegir la instancia de una lista de clústeres. Para ello, haga clic en **Clústeres** en el panel de navegación y seleccione **Aplicar ahora** o **Aplicar durante la próxima ventana de mantenimiento** en el menú **Acciones**. 

### Uso de la AWS CLI
<a name="security-applying-os-upgrades-cli"></a>

 Para determinar si hay una actualización disponible mediante el AWS CLI, ejecute el `describe-pending-maintenance-actions` comando: 

```
aws neptune describe-pending-maintenance-actions
```

```
{
    "ResourceIdentifier": "arn:aws:rds:us-east-1:123456789012:db:myneptune",
    "PendingMaintenanceActionDetails": [
        {
            "Action": "system-update",
            "Description": "New Operating System update is available"
        }
    ]
}
```

 Para aplicar las actualizaciones del sistema operativo, llame al comando `apply-pending-maintenance-action`: 

```
aws neptune apply-pending-maintenance-action \
    --apply-action system-update \
    --resource-identifier (ARN of your DB instance) \
    --opt-in-type immediate
```

# Protección de datos en la base de datos de Amazon Neptune
<a name="data-protection"></a>

El [modelo de ](https://aws.amazon.com/compliance/shared-responsibility-model/) se aplica a protección de datos en Amazon Neptune. Como se describe en este modelo, AWS es responsable de proteger la infraestructura global en la que se ejecutan todos los Nube de AWS. Eres responsable de mantener el control sobre el contenido alojado en esta infraestructura. También eres responsable de las tareas de administración y configuración de seguridad para los Servicios de AWS que utiliza. Para obtener más información sobre la privacidad de los datos, consulte las [Preguntas frecuentes sobre la privacidad de datos](https://aws.amazon.com/compliance/data-privacy-faq/). Para obtener información sobre la protección de datos en Europa, consulte la publicación de blog sobre el [Modelo de responsabilidad compartida de AWS y GDPR](https://aws.amazon.com/blogs/security/the-aws-shared-responsibility-model-and-gdpr/) en el * Blog de seguridad de AWS *.

Con fines de protección de datos, le recomendamos que proteja Cuenta de AWS las credenciales y configure los usuarios individuales con AWS IAM Identity Center o AWS Identity and Access Management (IAM). De esta manera, solo se otorgan a cada usuario los permisos necesarios para cumplir sus obligaciones laborales. También recomendamos proteger sus datos de la siguiente manera:
+ Utiliza la autenticación multifactor (MFA) en cada cuenta.
+ Se utiliza SSL/TLS para comunicarse con AWS los recursos. Exigimos TLS 1.2 y recomendamos TLS 1.3.
+ Configure la API y el registro de actividad de los usuarios con AWS CloudTrail. Para obtener información sobre el uso de CloudTrail senderos para capturar AWS actividades, consulte [Cómo trabajar con CloudTrail senderos](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-trails.html) en la *Guía del AWS CloudTrail usuario*.
+ Utilice soluciones de AWS cifrado, junto con todos los controles de seguridad predeterminados Servicios de AWS.
+ Utiliza servicios de seguridad administrados avanzados, como Amazon Macie, que lo ayuden a detectar y proteger la información confidencial almacenada en Amazon S3.
+ Si necesita módulos criptográficos validados por FIPS 140-3 para acceder a AWS través de una interfaz de línea de comandos o una API, utilice un punto final FIPS. Para obtener más información sobre los puntos de conexión de FIPS disponibles, consulte [Estándar de procesamiento de la información federal (FIPS) 140-3](https://aws.amazon.com/compliance/fips/).

Se recomienda encarecidamente no introducir nunca información confidencial o sensible, como por ejemplo, direcciones de correo electrónico de clientes, en etiquetas o campos de formato libre, tales como el campo **Nombre**. Esto incluye cuando trabaja con Neptune u otro dispositivo Servicios de AWS mediante la consola, la API o. AWS CLI AWS SDKs Cualquier dato que introduzca en etiquetas o campos de formato libre utilizados para los nombres se pueden emplear para los registros de facturación o diagnóstico. Si proporciona una URL a un servidor externo, recomendamos encarecidamente que no incluya información de credenciales en la URL a fin de validar la solicitud para ese servidor.

**importante**  
 TLS 1.3 solo es compatible con la versión 1.3.2.0 y superiores del motor de Neptune. 

Utiliza las llamadas a la API AWS publicadas para administrar Neptune a través de la red. Los clientes deben ser compatibles con la seguridad de la capa de transporte (TLS) 1.2 o una versión posterior que utilice conjuntos de cifrado sólidos, tal y como se describe en [Cifrado de conexiones a bases de datos de Neptune](security-ssl.md). La mayoría de los sistemas modernos como Java 7 y posteriores son compatibles con estos modos.

En las secciones siguientes, se explica más en profundidad cómo se protegen los datos de Neptune.

**Topics**
+ [Protección de la base de datos de Amazon Neptune con Amazon VPC](security-vpc.md)
+ [Cifrado de conexiones a la base de datos de Amazon Neptune con SSL/HTTPS](security-ssl.md)
+ [Cifrado de datos en reposo en la base de datos de Amazon Neptune](encrypt.md)

# Protección de la base de datos de Amazon Neptune con Amazon VPC
<a name="security-vpc"></a>

Un clúster de base de datos de Amazon Neptune *solo* se puede crear en una Amazon Virtual Private Cloud (Amazon VPC) y se puede obtener acceso a sus puntos de conexión desde dicha VPC, normalmente desde una instancia de Amazon Elastic Compute Cloud (Amazon EC2) que se ejecuta en dicha VPC. También se puede acceder a él mediante un punto de conexión público. Para obtener más información sobre los puntos de conexión públicos, consulte [Puntos de conexión públicos de Neptune](neptune-public-endpoints.md).

Puede proteger sus datos de Neptune limitando el acceso a la VPC en la que se encuentra el clúster de base de datos de Neptune, tal y como se describe en [Conexión a un clúster de Amazon Neptune](get-started-connecting.md).

# Cifrado de conexiones a la base de datos de Amazon Neptune con SSL/HTTPS
<a name="security-ssl"></a>

Amazon Neptune solo permite conexiones de Secure Sockets Layer (SSL) a través de HTTPS a cualquier instancia o punto final de clúster.

Neptune requiere al menos la versión 1.2 de TLS, con los siguientes conjuntos de cifrado seguro:
+ `TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256`
+ `TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384`
+ `TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256`
+ `TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384`

A partir de la versión 1.3.2.0 del motor Neptune, Neptune admite la versión 1.3 de TLS con los siguientes conjuntos de cifrado:
+ TLS\$1AES\$1128\$1GCM\$1 SHA256
+ TLS\$1AES\$1256\$1GCM\$1 SHA384

Incluso cuando las conexiones HTTP estaban permitidas en las versiones anteriores del motor, cualquier clúster de base de datos que utilice un nuevo grupo de parámetros de clúster de base de datos debe utilizar SSL de forma predeterminada. *Para proteger sus datos, los puntos de conexión de Neptune en la versión de motor `1.0.4.0` y posteriores solo admiten solicitudes HTTPS.* Para obtener más información, consulte [Uso del punto de conexión HTTP REST para conectarse a una instancia de base de datos de Neptune](access-graph-sparql-http-rest.md).

Neptune proporciona automáticamente certificados SSL para las instancias de base de datos de Neptune. No tiene que solicitar ningún certificado. Los certificados se facilitan cuando crea una nueva instancia.

Neptune asigna un único certificado SSL comodín a las instancias de su cuenta para cada región. AWS El certificado proporciona entradas para los puntos de enlace del clúster, los puntos de enlace de solo lectura del clúster y los puntos de enlace de instancia.

**Detalles del certificado**  
Las siguientes entradas se incluyen en el certificado suministrado:
+ Punto de conexión de clúster: `*.cluster-a1b2c3d4wxyz.region.neptune.amazonaws.com`
+ Punto de conexión de solo lectura: `*.cluster-ro-a1b2c3d4wxyz.region.neptune.amazonaws.com`
+ Puntos de conexión de instancia: `*.a1b2c3d4wxyz.region.neptune.amazonaws.com`

Solo se admiten las entradas enumeradas aquí. 

**Conexiones de proxy**  
Los certificados solo admiten los nombres de host que se enumeran en la sección anterior. 

Si utilizas un balanceador de carga o un servidor proxy (por ejemplo HAProxy), debes usar la terminación SSL y tener tu propio certificado SSL en el servidor proxy. 

El acceso directo SSL no funciona porque los certificados SSL proporcionados no coinciden con el nombre de host del servidor proxy.

**Certificados de CA raíz.**  
Los certificados de las instancias de Neptune normalmente se validan utilizando el almacén de confianza local del sistema operativo o el SDK (como el SDK de Java).

Si debe proporcionar un certificado raíz manualmente, puede descargar el [certificado de CA raíz de Amazon](https://www.amazontrust.com/repository/AmazonRootCA1.pem) en formato PEM desde el [repositorio de políticas de confianza de Amazon Services](https://www.amazontrust.com/repository/).

**Más información**  
Para obtener más información acerca de la conexión a puntos de conexión de Neptune con SSL, consulte [Configure la consola de Gremlin para conectarse a una instancia de base de datos de Neptune](access-graph-gremlin-console.md) y [Uso del punto de conexión HTTP REST para conectarse a una instancia de base de datos de Neptune](access-graph-sparql-http-rest.md).

# Cifrado de datos en reposo en la base de datos de Amazon Neptune
<a name="encrypt"></a>

Las instancias cifradas de Neptune ofrecen una capa adicional de protección de datos al ayudarle a proteger los datos del acceso no autorizado al almacenamiento subyacente. Puede utilizar el cifrado de Neptune para aumentar la protección de datos de las aplicaciones implementadas en la nube. También puede utilizarla para cumplir con los requisitos de conformidad en materia de cifrado. data-at-rest

[Para administrar las claves utilizadas para cifrar y descifrar los recursos de Neptune, utilice ().AWS Key Management ServiceAWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/) AWS KMS combina hardware y software seguros y de alta disponibilidad para proporcionar un sistema de administración de claves adaptado a la nube. Con AWS KMSél, puede crear claves de cifrado y definir las políticas que controlan cómo se pueden utilizar estas claves. AWS KMS es compatible AWS CloudTrail, por lo que puede auditar el uso de las claves para comprobar que las claves se utilizan de forma adecuada. Puede utilizar AWS KMS las llaves en combinación con Neptune y AWS servicios compatibles, como Amazon Simple Storage Service (Amazon S3), Amazon Elastic Block Store (Amazon EBS) y Amazon Redshift. *Para obtener una lista de los servicios compatibles AWS KMS, consulte [Cómo se usan AWS los servicios AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/services.html) en la AWS Key Management Service Guía para desarrolladores.*

Todos los registros, copias de seguridad e instantáneas de una instancia cifrada de Neptune están cifrados.

## Habilitación del cifrado para una instancia de base de datos de Neptune
<a name="encrypt-enable"></a>

Para habilitar el cifrado en una instancia de base de datos de Neptune nueva, elija **Sí** en la sección **Habilitar el cifrado** de la consola de Neptune. Para obtener información acerca de la creación de una instancia de base de datos de Neptune, consulte [Creación de un clúster de Amazon Neptune](get-started-create-cluster.md).

Al crear una instancia de base de datos de Neptune cifrada, también puede proporcionar el identificador de AWS KMS clave para su clave de cifrado. Si no especifica un identificador de AWS KMS clave, Neptune utiliza la clave de cifrado de Amazon RDS predeterminada (`aws/rds`) para la nueva instancia de base de datos Neptune. AWS KMS crea la clave de cifrado predeterminada de Neptune para su AWS cuenta. Su AWS cuenta tiene una clave de cifrado predeterminada diferente para cada AWS región.

Después de crear una instancia de base de datos de Neptune cifrada, no puede cambiar la clave de cifrado de dicha instancia. Por tanto, asegúrese de determinar los requisitos de clave de cifrado antes de crear la instancia de base de datos de Neptune cifrada.

Puede utilizar el Nombre de recurso de Amazon (ARN) de una clave de otra cuenta para cifrar una instancia de base de datos de Neptune. Si crea una instancia de base de datos Neptune con la misma AWS cuenta propietaria de la clave de AWS KMS cifrado que se utiliza para cifrar esa nueva instancia de base de datos Neptune, el ID de AWS KMS clave que pase puede ser el alias de la clave en lugar del AWS KMS ARN de la clave.

**importante**  
Si Neptune pierde el acceso a la clave de cifrado de una instancia de base de datos de Neptune (por ejemplo, cuando se revoca el acceso de Neptune a una clave), la instancia de base de datos cifrada se coloca en un estado de terminal y solo se puede restaurar desde una copia de seguridad. Recomendamos que siempre habilite las copias de seguridad para las instancias de bases de datos cifradas de Neptune con el fin de protegerse contra la pérdida de los datos cifrados de dichas bases de datos.

## Se necesitan permisos de claves para habilitar el cifrado
<a name="encrypt-key-permissions"></a>

El rol o usuario de IAM que crea una instancia de base de datos de Neptune cifrada debe tener al menos los siguientes permisos para la clave KMS:
+ `"kms:Encrypt"`
+ `"kms:Decrypt"`
+ `"kms:GenerateDataKey"`
+ `"kms:ReEncryptTo"`
+ `"kms:GenerateDataKeyWithoutPlaintext"`
+ `"kms:CreateGrant"`
+ `"kms:ReEncryptFrom"`
+ `"kms:DescribeKey"`

A continuación, se muestra un ejemplo de una política de claves que incluye los permisos necesarios:

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Id": "key-consolepolicy-3",
  "Statement": [
    {
      "Sid": "Allow use of the key for Neptune",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::123456789012:role/NeptuneFullAccess"
      },
      "Action": [
        "kms:Encrypt",
        "kms:Decrypt",
        "kms:GenerateDataKey",
        "kms:ReEncryptTo",
        "kms:GenerateDataKeyWithoutPlaintext",
        "kms:CreateGrant",
        "kms:ReEncryptFrom",
        "kms:DescribeKey"
      ],
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "kms:ViaService": "rds.us-east-1.amazonaws.com"
        }
      }
    },
    {
      "Sid": "Deny use of the key for non Neptune",
      "Effect": "Deny",
      "Principal": {
        "AWS": "arn:aws:iam::123456789012:role/NeptuneFullAccess"
      },
      "Action": [
        "kms:*"
      ],
      "Resource": "*",
      "Condition": {
        "StringNotEquals": {
          "kms:ViaService": "rds.us-east-1.amazonaws.com"
        }
      }
    }
  ]
}
```

------
+ La primera sentencia proporciona acceso a todo lo necesario AWS KMS APIs para esta función, que depende del director del servicio de RDS.
+ La segunda afirmación refuerza aún más la seguridad al exigir que este rol no pueda utilizar esta clave para ningún otro servicio. AWS 

También puede reducir aún más los permisos de `createGrant` añadiendo:

```
"Condition": {
  "Bool": {
    "kms:GrantIsForAWSResource": true
  }
}
```

## Limitaciones del cifrado de Neptune
<a name="encrypt-limitations"></a>

Existen las siguientes limitaciones para cifrar clústeres de Neptune:
+ No puede convertir un clúster de bases de datos sin cifrar en uno cifrado.

  Sin embargo, sí es posible restaurar una instantánea de clúster de base de datos de sin cifrar en un clúster de base de datos de cifrado. Para hacer esto, especifique una clave de cifrado KMS cuando restaure a partir de una instantánea de clúster de base de datos sin cifrar.
+ No puede convertir una instancia de bases de datos sin cifrar en una cifrada. Solo puede habilitar el cifrado para una instancia de base de datos al crearla.
+ Además, las instancias de bases de datos que están cifradas no se pueden modificar para deshabilitar el cifrado.
+ No se puede tener una réplica de lectura cifrada de una instancia de base de datos sin cifrar ni una réplica de lectura sin cifrar de una instancia de base de datos cifrada.
+ Las réplicas de lectura cifradas deben cifrarse con la misma clave que la instancia de base de datos de origen.

# Autenticación de la base de datos de Amazon Neptune con AWS Identity and Access Management
<a name="iam-auth"></a>

AWS Identity and Access Management (IAM) es una herramienta Servicio de AWS que ayuda al administrador a controlar de forma segura el acceso a los recursos. AWS Los administradores de IAM controlan quién puede estar *autenticado* (ha iniciado sesión) y *autorizado* (tiene permisos) para utilizar recursos de Neptune. La IAM es una Servicio de AWS herramienta que puede utilizar sin coste adicional.

Puede usar AWS Identity and Access Management (IAM) para autenticarse en su instancia de base de datos o clúster de base de datos de Neptune. Cuando la autenticación de bases de datos de IAM está habilitada, cada solicitud debe firmarse con AWS la versión 4 de Signature.

AWS La versión 4 de Signature agrega información de autenticación a AWS las solicitudes. Por motivos de seguridad, todas las solicitudes a los clústeres de bases de datos de Neptune con autenticación de IAM habilitada se deben firmar con una clave de acceso. La clave consta de un ID de clave de acceso y una clave de acceso secreta. La autenticación se administra de forma externa mediante políticas de IAM.

Neptune se autentica en la conexión y, en el caso de WebSockets las conexiones, verifica los permisos periódicamente para garantizar que el usuario siga teniendo acceso.

**nota**  
La revocación, eliminación o rotación de las credenciales asociadas al usuario de IAM no es recomendable porque no finaliza ninguna conexión que ya esté abierta.
Hay límites en el número de WebSocket conexiones simultáneas por instancia de base de datos y en cuanto al tiempo que una conexión puede permanecer abierta. Para obtener más información, consulte [WebSockets Límites](limits.md#limits-websockets).

## El uso de IAM depende de la función
<a name="security-iam-audience"></a>

La forma de usar AWS Identity and Access Management (IAM) varía según el trabajo que se realice en Neptune.

**Usuario de servicio**: si utiliza el servicio de Neptune para realizar su trabajo, su administrador le proporciona las credenciales y los permisos que necesita para utilizar el plano de datos de Neptune. A medida que necesite más acceso para realizar su trabajo, comprender cómo se administra el acceso a los datos puede ayudarle a solicitar los permisos adecuados a su administrador.

**Administrador de servicio**[: si está a cargo de los recursos de Neptune en su empresa, probablemente tenga acceso a las acciones de administración de Neptune, que corresponden a la API de administración de Neptune.](api.md) También puede ser su trabajo determinar qué acciones y recursos de acceso a datos de Neptune necesitan los usuarios del servicio para realizar su trabajo. En ese caso, un administrador de IAM puede aplicar políticas de IAM para cambiar los permisos de los usuarios de su servicio.

**Administrador de IAM**: si es administrador de IAM, tendrá que escribir políticas de IAM para la administración y el acceso de datos a Neptune. Para ver ejemplos de políticas basadas en la identidad de Neptune que puede utilizar, consulte [Uso de diferentes tipos de políticas de IAM para controlar el acceso a Neptune](security-iam-access-manage.md#iam-auth-policy).

## Autenticación con identidades
<a name="security-iam-authentication"></a>

La autenticación es la forma de iniciar sesión AWS con sus credenciales de identidad. Debe autenticarse como usuario de Usuario raíz de la cuenta de AWS IAM o asumir una función de IAM.

Puede iniciar sesión como una identidad federada con las credenciales de una fuente de identidad, como AWS IAM Identity Center (IAM Identity Center), la autenticación de inicio de sesión único o las credenciales. Google/Facebook Para obtener más información sobre el inicio de sesión, consulte [Cómo iniciar sesión en la Cuenta de AWS](https://docs.aws.amazon.com/signin/latest/userguide/how-to-sign-in.html) en la *Guía del usuario de AWS Sign-In *.

Para el acceso programático, AWS proporciona un SDK y una CLI para firmar criptográficamente las solicitudes. Para obtener más información, consulte [AWS Signature Version 4 para solicitudes de API](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv.html) en la *Guía del usuario de IAM*.

### Cuenta de AWS usuario root
<a name="security-iam-authentication-rootuser"></a>

 Al crear un Cuenta de AWS, se comienza con una identidad de inicio de sesión denominada *usuario Cuenta de AWS raíz* que tiene acceso completo a todos Servicios de AWS los recursos. Se recomiendaencarecidamente que no utilice el usuario raíz para las tareas diarias. Para ver la lista completa de las tareas que requieren credenciales de usuario raíz, consulte [Tareas que requieren credenciales de usuario raíz](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#root-user-tasks) en la *Guía del usuario de IAM*. 

### Usuarios y grupos de IAM
<a name="security-iam-authentication-iamuser"></a>

Un *[usuario de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users.html)* es una identidad con permisos específicos para una sola persona o aplicación. Recomendamos el uso de credenciales temporales en lugar de usuarios de IAM con credenciales de larga duración. Para obtener más información, consulte [Exigir a los usuarios humanos que utilicen la federación con un proveedor de identidad para acceder AWS mediante credenciales temporales](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#bp-users-federation-idp) en la Guía del *usuario de IAM*.

Un [https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html) especifica un conjunto de usuarios de IAM y facilita la administración de los permisos para grupos grandes de usuarios. Para obtener más información, consulte [Casos de uso para usuarios de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/gs-identities-iam-users.html) en la *Guía del usuario de IAM*.

### Roles de IAM
<a name="security-iam-authentication-iamrole"></a>

Un *[Rol de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)* es una identidad con permisos específicos que proporciona credenciales temporales. Puede asumir un rol [cambiando de un rol de usuario a uno de IAM (consola)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-console.html) o llamando a una AWS CLI operación de AWS API. Para obtener más información, consulte [Métodos para asumir un rol](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_manage-assume.html) en la *Guía del usuario de IAM*.

Los roles de IAM son útiles para el acceso de usuario federado, los permisos de usuario de IAM temporales, el acceso entre cuentas, el acceso entre servicios y las aplicaciones que se ejecutan en Amazon EC2. Para obtener más información, consulte [Acceso a recursos entre cuentas en IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-cross-account-resource-access.html) en la *Guía del usuario de IAM*.

# Habilitación de la autenticación de bases de datos de IAM en Amazon Neptune
<a name="iam-auth-enable"></a>

De forma predeterminada, la autenticación de bases de datos de IAM está deshabilitada al crear un clúster de bases de datos de Amazon Neptune. Puede habilitarla (o deshabilitarla de nuevo) mediante la Consola de administración de AWS.

Para crear un nuevo clúster de base de datos de Neptune con autenticación de IAM mediante la consola, debe seguir las instrucciones para crear un clúster de base de datos de Neptune en [Lanzamiento de un clúster de base de datos de Neptune mediante el Consola de administración de AWS](manage-console-launch-console.md).

En la segunda página del proceso de creación, en **Enable IAM DB Authentication (Habilitar autenticación de bases de datos de IAM)**, seleccione **Yes (Sí)**.

**Para habilitar o deshabilitar la autenticación de IAM para una instancia o clúster de base de datos existente**

1. [Inicie sesión en la consola AWS de administración y abra la consola de Amazon Neptune en https://console.aws.amazon.com/neptune/ casa.](https://console.aws.amazon.com/neptune/home)

1. En el panel de navegación, seleccione **Clusters (Clústeres)**.

1. Elija el clúster de base de datos Neptune que desea modificar y elija **Acciones del clúster**. A continuación, seleccione **Modify cluster (Modificar clúster)**.

1. En la sección **Opciones de base de datos**, en **Autenticación de bases de datos de IAM**, elija **Habilitar autorización de base de datos de IAM** o **No** (para deshabilitarla). Después elija **Continue (Continuar)**.

1. Para aplicar los cambios inmediatamente, elija **Apply immediately**.

1. Elija **Modificar clúster**.

# Conexión a la base de datos de Amazon Neptune mediante autenticación AWS Identity and Access Management
<a name="iam-auth-connecting"></a>

Los recursos de Amazon Neptune que tienen habilitada la autenticación de base de datos de IAM requieren que todas las solicitudes HTTP se firmen con AWS Signature Version 4. Para obtener información general sobre la firma de solicitudes con la versión 4 de AWS Signature, consulte [Firmar solicitudes de AWS API](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html).

AWS La versión 4 de Signature es el proceso para añadir información de autenticación a AWS las solicitudes. Por motivos de seguridad, la mayoría de las solicitudes AWS deben firmarse con una clave de acceso, que consiste en un identificador de clave de acceso y una clave de acceso secreta.

**nota**  
Si utiliza las credenciales temporales, caducan después de un intervalo especificado, *incluido el token de sesión*.  
Tiene que actualizar el token de sesión cuando solicite nuevas credenciales. Para obtener más información, consulte [Uso de credenciales de seguridad temporales para solicitar acceso a AWS los recursos](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_use-resources.html).

**importante**  
Para tener acceso a Neptune con la autenticación basada en IAM, debe crear solicitudes HTTP y firmarlas usted mismo.

**Cómo funciona Signature Version 4**

1. Se crea una solicitud canónica.

1. Utiliza la solicitud canónica y alguna otra información para crear una. string-to-sign

1. Usas tu clave de acceso AWS secreta para obtener una clave de firma y, a continuación, usas esa clave de firma y la string-to-sign para crear una firma.

1. Se añade la firma resultante a la solicitud HTTP en un encabezado o como parámetro de cadena de consulta.

Cuando Neptune recibe la solicitud, lleva a cabo los mismos pasos realizados para calcular la firma. A continuación, Neptune compara la firma calculada con la que se ha enviado con la solicitud. Si las firmas coinciden, la solicitud se procesa. Si las firmas no coinciden, la solicitud se deniega.

Para obtener información general sobre la firma de solicitudes con AWS la versión 4 de la [firma, consulte el proceso de firma de la versión 4](https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html) en *Referencia general de AWS*.

Las siguientes secciones contienen ejemplos que muestran cómo enviar solicitudes firmadas a los puntos de conexión de Gremlin y SPARQL de una instancia de base de datos de Neptune con la autenticación de IAM habilitada.

**Topics**
+ [Requisitos previos para conectar bases de datos de Amazon Neptune mediante la autenticación de IAM](iam-auth-connect-prerq.md)
+ [Conexión a bases de datos de Amazon Neptune mediante la autenticación de IAM desde la línea de comandos](iam-auth-connect-command-line.md)
+ [Conexión a bases de datos de Amazon Neptune mediante la autenticación de IAM con la consola de Gremlin](iam-auth-connecting-gremlin-console.md)
+ [Conexión a bases de datos de Amazon Neptune mediante IAM con Java de Gremlin](iam-auth-connecting-gremlin-java.md)
+ [Conexión a bases de datos de Amazon Neptune mediante la autenticación de IAM con Java y SPARQL](iam-auth-connecting-sparql-java.md)
+ [Conexión a bases de datos de Amazon Neptune mediante la autenticación de IAM con SPARQL y Node.js](iam-auth-connecting-sparql-node.md)
+ [Conexión a bases de datos de Amazon Neptune mediante la autenticación de IAM con Python](iam-auth-connecting-python.md)
+ [Conexión a bases de datos de Amazon Neptune mediante la autenticación de IAM con Python de Gremlin](gremlin-python-iam-auth.md)
+ [Conexión a las bases de datos de Amazon Neptune mediante la autenticación de IAM con Gremlin JavaScript](gremlin-javascript-iam-auth.md)
+ [Conexión a bases de datos de Amazon Neptune mediante la autenticación de IAM con Go de Gremlin](gremlin-go-iam-auth.md)
+ [Conexión a bases de datos de Amazon Neptune mediante la autenticación de IAM con .NET de Gremlin](gremlin-dotnet-iam-auth.md)

# Requisitos previos para conectar bases de datos de Amazon Neptune mediante la autenticación de IAM
<a name="iam-auth-connect-prerq"></a>

A continuación se muestran instrucciones para instalar Apache Maven y Java 8 en una instancia de Amazon EC2. Estos son necesarios para los ejemplos de autenticación de Signature Version 4 de Amazon Neptune.

**Para instalar Apache Maven y Java 8 en la instancia EC2**

1. Conéctese con la instancia de Amazon EC2 por medio de un cliente SSH.

1. Instale Apache Maven en la instancia EC2. Si utiliza Amazon Linux 2023 (preferido), utilice:

   ```
   sudo dnf update -y
   sudo dnf install maven -y
   ```

   Si utiliza Amazon Linux 2, descargue el archivo binario más reciente desde [https://maven.apache.org/download.cgi:](https://maven.apache.org/download.cgi:)

   ```
   sudo yum remove maven -y
   wget https://dlcdn.apache.org/maven/maven-3/ <version>/binaries/apache-maven-<version>-bin.tar.gz
   sudo tar -xzf apache-maven-<version>-bin.tar.gz -C /opt/
   sudo ln -sf /opt/apache-maven-<version> /opt/maven
   echo 'export MAVEN_HOME=/opt/maven' >> ~/.bashrc
   echo 'export PATH=$MAVEN_HOME/bin:$PATH' >> ~/.bashrc
   source ~/.bashrc
   ```

1. Las bibliotecas de Gremlin requieren Java 8. Escriba lo siguiente para instalar Java 8 en la instancia EC2.

   ```
   sudo yum install java-1.8.0-devel
   ```

1. Escriba lo siguiente para establecer Java 8 como tiempo de ejecución predeterminado en la instancia EC2.

   ```
   sudo /usr/sbin/alternatives --config java
   ```

   Cuando se le solicite, escriba el número para Java 8.

1. Escriba lo siguiente para establecer Java 8 como compilador predeterminado en la instancia EC2.

   ```
   sudo /usr/sbin/alternatives --config javac
   ```

   Cuando se le solicite, escriba el número para Java 8.

# Conexión a bases de datos de Amazon Neptune mediante la autenticación de IAM desde la línea de comandos
<a name="iam-auth-connect-command-line"></a>

Es muy práctico disponer de una herramienta de línea de comandos para enviar consultas al clúster de base de datos de Neptune, como se ilustra en muchos de los ejemplos de esta documentación. La herramienta [curl](https://curl.haxx.se/) es una excelente opción para comunicarse con los puntos de conexión de Neptune si la autenticación de IAM no está habilitada.

**Sin embargo, para mantener sus datos seguros, es mejor habilitar la autenticación de IAM.**

Cuando la autenticación de IAM está habilitada, cada una de las solicitudes debe [firmarse con Signature Version 4 (Sig4)](https://docs.aws.amazon.com/general/latest/gr/signing-aws-api-requests.html). La herramienta de línea de comandos [awscurl](https://github.com/okigan/awscurl) de terceros utiliza la misma sintaxis que `curl` y puede firmar consultas mediante la firma Sig4. En la sección [Uso de `awscurl`](#iam-auth-connect-awscurl) a continuación, se explica cómo utilizar `awscurl` de forma segura con credenciales temporales.

## Configuración de una herramienta de línea de comandos para usar HTTPS
<a name="iam-auth-connect-command-line-https"></a>

Neptune requiere que todas las conexiones usen HTTPS. Cualquier herramienta de línea de comandos, como `curl` o `awscurl`, necesita acceso a los certificados correspondientes para poder usar HTTPS. Mientras `curl` o `awscurl` puedan localizar los certificados apropiados, gestionan las conexiones HTTPS igual que las HTTP, sin necesidad de parámetros adicionales. Los ejemplos de esta documentación se basan en ese escenario.

Para saber cómo obtener dichos certificados y cómo formatearlos correctamente en un almacén de certificados de autoridad de certificación (CA) que `curl` pueda utilizar, consulte [SSL Certificate Verification](https://curl.haxx.se/docs/sslcerts.html) en la documentación de `curl`.

A continuación, puede especificar la ubicación de este almacén de certificados de CA mediante la variable de entorno `CURL_CA_BUNDLE`. En Windows, `curl` lo busca de forma automática en un archivo llamado `curl-ca-bundle.crt`. Primero busca en el mismo directorio que `curl.exe` y después en el resto de sitios de la ruta. Para obtener más información, consulte [Certificados SSL](https://curl.haxx.se/docs/sslcerts.html).

## Uso de `awscurl` con credenciales temporales para conectarse de forma segura a un clúster de base de datos con la autenticación de IAM habilitada
<a name="iam-auth-connect-awscurl"></a>

La herramienta [awscurl](https://github.com/okigan/awscurl) usa la misma sintaxis que `curl`, pero también necesita información adicional:
+ **`--access_key`**: una clave de acceso válida. Si no se proporciona con este parámetro, debe proporcionarse en la variable de entorno `AWS_ACCESS_KEY_ID` o en un archivo de configuración.
+ **`--secret_key`**: clave de acceso secreta que corresponde a la clave de acceso. Si no se proporciona con este parámetro, debe proporcionarse en la variable de entorno `AWS_SECRET_ACCESS_KEY` o en un archivo de configuración.
+ **`--security_token`**: un token de sesión válido. Si no se proporciona con este parámetro, debe proporcionarse en la variable de entorno `AWS_SECURITY_TOKEN` o en un archivo de configuración.

En el pasado, era una práctica habitual utilizar credenciales persistentes con `awscurl`, como las credenciales de usuario de IAM o incluso las credenciales raíz, pero no se recomienda. [En su lugar, genere credenciales temporales utilizando uno de los [servicios de token de AWS seguridad (STS) APIs](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html) o uno de sus contenedores.AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/sts/index.html)

Es mejor colocar los valores `AccessKeyId`, `SecretAccessKey` y `SessionToken` que devuelve la llamada de STS en las variables de entorno adecuadas de la sesión del intérprete de comandos, en lugar de en un archivo de configuración. A continuación, cuando el intérprete de comandos finaliza, las credenciales se descartan automáticamente, lo que no ocurre con un archivo de configuración. Del mismo modo, no solicite una duración mayor para las credenciales temporales de la que es probable que necesite.

El siguiente ejemplo muestra los pasos que puede seguir en un intérprete de comandos de Linux para obtener credenciales temporales que sean válidas durante media hora utilizando [sts assume-role](https://docs.aws.amazon.com/cli/latest/reference/sts/assume-role) y, a continuación, colocarlas en variables de entorno donde `awscurl` pueda encontrarlas:

```
aws sts assume-role \
    --duration-seconds 1800 \
    --role-arn "arn:aws:iam::(account-id):role/(rolename)" \
    --role-session-name AWSCLI-Session > $output
AccessKeyId=$(echo $output | jq '.Credentials''.AccessKeyId')
SecretAccessKey=$(echo $output | jq '.Credentials''.SecretAccessKey')
SessionToken=$(echo $output | jq '.Credentials''.SessionToken')

export AWS_ACCESS_KEY_ID=$AccessKeyId
export AWS_SECRET_ACCESS_KEY=$SecretAccessKey
export AWS_SESSION_TOKEN=$SessionToken
```

A continuación, puede utilizar `awscurl` para realizar una solicitud firmada a su clúster de base de datos de una forma similar a la siguiente:

```
awscurl (your cluster endpoint):8182/status \
    --region us-east-1 \
    --service neptune-db
```

# Conexión a bases de datos de Amazon Neptune mediante la autenticación de IAM con la consola de Gremlin
<a name="iam-auth-connecting-gremlin-console"></a>

Para conectarse a Amazon Neptune mediante la consola Gremlin con la autenticación Signature Version 4, debe conectar un firmante SiGv4 `requestInterceptor()` a la conexión establecida por el comando. `:remote` Esto requiere que configure el `Cluster` objeto manualmente y, a continuación, lo pase al comando. `:remote`

Tenga en cuenta que esto es muy diferente de la situación típica en la que el comando `:remote` utiliza un archivo de configuración para formar la conexión. El enfoque del archivo de configuración no funciona porque `requestInterceptor()` debe configurarse mediante programación y no puede cargar su configuración desde un archivo.

**nota**  
En los siguientes ejemplos se utiliza`requestInterceptor()`, que se introdujo en la versión TinkerPop 3.6.6. Si utiliza una TinkerPop versión anterior a la 3.6.6 (pero 3.5.5 o superior), utilícela en `handshakeInterceptor()` lugar de `requestInterceptor()` en los ejemplos de código que aparecen a continuación.

Son necesarios los siguientes requisitos previos:
+ Debe tener las credenciales de IAM necesarias para firmar las solicitudes. Consulte [Uso de la cadena de proveedores de credenciales predeterminada](https://docs.aws.amazon.com//sdk-for-java/latest/developer-guide/credentials-chain.html) en la Guía para AWS SDK para Java desarrolladores.
+ Debe tener instalada una versión de consola de Gremlin que sea compatible con la versión del motor de Neptune que utiliza su clúster de base de datos.

Si usa credenciales temporales, estas caducan después de un intervalo específico, al igual que el token de sesión, por lo que debe actualizar su token de sesión cuando solicite nuevas credenciales. Consulte [Uso de credenciales de seguridad temporales para solicitar acceso a AWS los recursos](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_use-resources.html) en la Guía del usuario de IAM.

Si necesita ayuda para conectarse mediante SSL/TLS, consulte [Configuración de SSL/TLS](access-graph-gremlin-java.md#access-graph-gremlin-java-ssl).

**Conecta la consola Gremlin con la firma Sig4**

1. Inicie la consola de Gremlin:

   ```
   $ bin/gremlin.sh
   ```

1. En el símbolo del sistema de `gremlin>`, instale la biblioteca `amazon-neptune-sigv4-signer` (esto solo debe hacerse una vez para la consola):

   ```
   :install com.amazonaws amazon-neptune-sigv4-signer 2.4.0
   ```

   [Si tiene problemas con este paso, puede ser útil consultar la [TinkerPop documentación sobre la configuración de Grape](https://tinkerpop.apache.org/docs/current/reference/#gremlin-applications).](http://docs.groovy-lang.org/latest/html/documentation/grape.html)
**nota**  
Si utiliza un proxy HTTP, es posible que encuentre errores en este paso si el comando `:install` no se completa. Para solucionar este problema, ejecute los siguientes comandos para informar a la consola acerca del proxy:  

   ```
   System.setProperty("https.proxyHost", "(the proxy IP address)")
   System.setProperty("https.proxyPort", "(the proxy port)")
   ```

1. Importe la clase necesaria para gestionar el inicio de sesión en `requestInterceptor()`:

   ```
   :import software.amazon.awssdk.auth.credentials.DefaultCredentialsProvider
   :import com.amazonaws.neptune.auth.NeptuneNettyHttpSigV4Signer
   ```

1. Si utiliza credenciales temporales, también tendrá que proporcionar su token de sesión de la siguiente manera:

   ```
   System.setProperty("aws.sessionToken","(your session token)")
   ```

1. Si no ha establecido las credenciales de su cuenta de otro modo, puede asignarlas de la siguiente manera:

   ```
   System.setProperty("aws.accessKeyId","(your access key)")
   System.setProperty("aws.secretKey","(your secret key)")
   ```

1. Construya manualmente el objeto `Cluster` para conectarlo a Neptune:

   ```
   cluster = Cluster.build("(host name)")  \
                    .enableSsl(true) \
                    .requestInterceptor { r ->  \
                      def sigV4Signer = new NeptuneNettyHttpSigV4Signer("(Amazon region)", \
                                        DefaultCredentialsProvider.create()); \
                      sigV4Signer.signRequest(r); \
                      return r; } \
                    .create()
   ```

   Para obtener ayuda para encontrar el nombre de host de una instancia de base de datos de Neptune, consulte [Conexión a los puntos de conexión de Amazon Neptune](feature-overview-endpoints.md).

1. Establezca la conexión `:remote` mediante el nombre de la variable del objeto `Cluster` en el paso anterior:

   ```
   :remote connect tinkerpop.server cluster
   ```

1. Introduzca el siguiente comando para cambiar al modo remoto. Esto envía todas las consultas de Gremlin a la conexión remota:

   ```
   :remote console
   ```

# Conexión a bases de datos de Amazon Neptune mediante IAM con Java de Gremlin
<a name="iam-auth-connecting-gremlin-java"></a>

Este es un ejemplo de cómo conectarse a Neptune mediante la API Java de Gremlin con firma Sig4 (se supone tener conocimientos generales sobre el uso de Maven). En este ejemplo, se utiliza la biblioteca [Amazon Neptune SigV4 Signer](https://github.com/aws/amazon-neptune-sigv4-signer) para facilitar la firma de solicitudes. Primero, defina las dependencias como parte del archivo `pom.xml`:

**nota**  
En los siguientes ejemplos se utiliza`requestInterceptor()`, la cual se introdujo en la versión 3.6.6. TinkerPop Si utiliza una TinkerPop versión anterior a la 3.6.6 (pero 3.5.5 o superior), utilícela en `handshakeInterceptor()` lugar de `requestInterceptor()` en los ejemplos de código que aparecen a continuación.

```
<dependency>
  <groupId>com.amazonaws</groupId>
  <artifactId>amazon-neptune-sigv4-signer</artifactId>
  <version>3.1.0</version>
</dependency>
```

 El Sigv4 Signer de Amazon Neptune es compatible con las versiones 1.x y 2.x del SDK de Java. AWS En los ejemplos siguientes se utiliza la versión 2.x, donde es una instancia. `DefaultCredentialsProvider` `software.amazon.awssdk.auth.credentials.AwsCredentialsProvider` Si vas a actualizar de la versión 1.x a la 2.x, consulta los [cambios en el proveedor de credenciales](https://docs.aws.amazon.com//sdk-for-java/latest/developer-guide/migration-client-credentials.html) en la documentación de AWS SDK for Java 2.x. 

```
import software.amazon.awssdk.auth.credentials.DefaultCredentialsProvider;
import com.amazonaws.neptune.auth.NeptuneNettyHttpSigV4Signer;
import com.amazonaws.neptune.auth.NeptuneSigV4SignerException;

 ...

System.setProperty("aws.accessKeyId","your-access-key");
System.setProperty("aws.secretKey","your-secret-key");

 ...

Cluster cluster = Cluster.build((your cluster))
                 .enableSsl(true)
                 .requestInterceptor( r ->
                  {
                    try {
                      NeptuneNettyHttpSigV4Signer sigV4Signer =
                        new NeptuneNettyHttpSigV4Signer("(your region)", DefaultCredentialsProvider.create());
                      sigV4Signer.signRequest(r);
                    } catch (NeptuneSigV4SignerException e) {
                      throw new RuntimeException("Exception occurred while signing the request", e);
                    }
                    return r;
                  }
                 ).create();
try {
  Client client = cluster.connect();
  client.submit("g.V().has('code','IAD')").all().get();
} catch (Exception e) {
  throw new RuntimeException("Exception occurred while connecting to cluster", e);
}
```

## Autenticación de IAM entre cuentas
<a name="iam-auth-connecting-gremlin-java-cross-account"></a>

 Amazon Neptune admite la autenticación de IAM entre cuentas mediante el uso de la asunción de roles, también conocida como [encadenamiento de roles](https://docs.aws.amazon.com//neptune/latest/userguide/bulk-load-tutorial-chain-roles.html#bulk-load-tutorial-chain-cross-account). Para proporcionar acceso a un clúster de Neptune desde una aplicación alojada en una cuenta diferente AWS : 
+  Cree un nuevo usuario o rol de IAM en la AWS cuenta de la aplicación, con una política de confianza que permita al usuario o rol asumir otro rol de IAM. Asigne este rol al servicio de computación que aloja la aplicación (instancia EC2, función de Lambda, tarea de ECS, etc.). 

------
#### [ JSON ]

****  

  ```
  {
    "Version":"2012-10-17",		 	 	 
    "Statement": [
      {
        "Sid": "assumeRolePolicy",
        "Effect": "Allow",
        "Action": "sts:AssumeRole",
        "Resource": "arn:aws:iam::111122223333:role/role-name"
      }
    ]
  }
  ```

------
+  Cree un nuevo rol de IAM en la cuenta de base de datos de Neptuno que permita el acceso a la AWS base de datos de Neptune y permita la asunción del rol desde el usuario/rol de IAM de la cuenta de aplicación. Utilice una política de confianza de: 

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Principal": {
                  "AWS": [
                      "(ARN of application account IAM user or role)"
                  ]
              },
              "Action": "sts:AssumeRole",
              "Condition": {}
          }
      ]
  }
  ```

------
+  Utilice el siguiente ejemplo de código como guía para utilizar estos dos roles y permitir que la aplicación acceda a Neptune. En este ejemplo, el rol de la cuenta de la aplicación se asumirá mediante el al crear el. [DefaultCredentialProviderChain](https://docs.aws.amazon.com//sdk-for-java/v1/developer-guide/credentials.html)`STSclient` Luego, `STSclient` se usa a través de `STSAssumeRoleSessionCredentialsProvider` para asumir la función alojada en la cuenta de la base AWS de datos de Neptune. 

  ```
  public static void main( String[] args )
    {
  
      /* 
       * Establish an STS client from the application account.
       */
      AWSSecurityTokenService client = AWSSecurityTokenServiceClientBuilder
          .standard()
          .build();
  
      /*
       * Define the role ARN that you will be assuming in the database account where the Neptune cluster resides.
       */
      String roleArnToAssume = "arn:aws:iam::012345678901:role/CrossAccountNeptuneRole";
      String crossAccountSessionName = "cross-account-session-" + UUID.randomUUID();
  
      /*
       * Change the Credentials Provider in the SigV4 Signer to use the STSAssumeRole Provider and provide it
       * with both the role to be assumed, the original STS client, and a session name (which can be
       * arbitrary.)
       */
      Cluster cluster = Cluster.build()
                   .addContactPoint("neptune-cluster.us-west-2.neptune.amazonaws.com")
                   .enableSsl(true)
                   .port(8182)
                   .requestInterceptor( r ->
                    {
                      try {
                        NeptuneNettyHttpSigV4Signer sigV4Signer =
                          // new NeptuneNettyHttpSigV4Signer("us-west-2", DefaultCredentialsProvider.create());
                          new NeptuneNettyHttpSigV4Signer(
                                  "us-west-2",  
                                   new STSAssumeRoleSessionCredentialsProvider
                                      .Builder(roleArnToAssume, crossAccountSessionName)
                                          .withStsClient(client)
                                          .build());
                        sigV4Signer.signRequest(r);
                      } catch (NeptuneSigV4SignerException e) {
                        throw new RuntimeException("Exception occurred while signing the request", e);
                      }
                      return r;
                    }
                   ).create();
  
      GraphTraversalSource g = traversal().withRemote(DriverRemoteConnection.using(cluster));
  
      /* whatever application code is necessary */
  
      cluster.close();
    }
  ```

# Conexión a bases de datos de Amazon Neptune mediante la autenticación de IAM con Java y SPARQL
<a name="iam-auth-connecting-sparql-java"></a>

En esta sección se muestra cómo conectarse a Neptune mediante RDF4 J o Apache Jena con la autenticación Signature Version 4.

**Requisitos previos**
+ Java 8 o superior.
+ Apache Maven 3.3 o superior.

  Para obtener información sobre la instalación de estos requisitos previos en una instancia EC2 que ejecuta Amazon Linux, consulte [Requisitos previos para conectar bases de datos de Amazon Neptune mediante la autenticación de IAM](iam-auth-connect-prerq.md).
+ Credenciales de IAM para firmar las solicitudes. Para obtener más información, consulte [Using the Default Credential Provider Chain](https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/credentials.html#credentials-default) en la *Guía para desarrolladores de AWS SDK para Java *.
**nota**  
Si utiliza las credenciales temporales, caducan después de un intervalo especificado, *incluido el token de sesión*.  
Tiene que actualizar el token de sesión cuando solicite nuevas credenciales. Para obtener más información, consulte [Uso de credenciales de seguridad temporales para solicitar acceso a AWS los recursos](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_use-resources.html) en la Guía del usuario de *IAM*.
+ Establezca la variable `SERVICE_REGION` en una de las siguientes e indique la región de su instancia de base de datos de Neptune:
  + Este de EE. UU. (Norte de Virginia): `us-east-1`
  + Este de EE. UU. (Ohio): `us-east-2`
  + Oeste de EE. UU. (Norte de California): `us-west-1`
  + Oeste de EE. UU. (Oregón): `us-west-2`
  + Canadá (centro): `ca-central-1`
  + Canadá oeste (Calgary): `ca-west-1`
  + América del Sur (São Paulo): `sa-east-1`
  + Europa (Estocolmo): `eu-north-1`
  + Europa (España): `eu-south-2`
  + Europa (Irlanda): `eu-west-1`
  + Europa (Londres): `eu-west-2`
  + Europa (París): `eu-west-3`
  + Europa (Fráncfort): `eu-central-1`
  + Medio Oriente (Baréin): `me-south-1`
  + Medio Oriente (EAU): `me-central-1`
  + Israel (Tel Aviv):   `il-central-1`
  + África (Ciudad del Cabo): `af-south-1`
  + Asia Pacífico (Hong Kong): `ap-east-1`
  + Asia-Pacífico (Tokio): `ap-northeast-1`
  + Asia-Pacífico (Seúl): `ap-northeast-2`
  + Asia-Pacífico (Osaka): `ap-northeast-3`
  + Asia-Pacífico (Singapur): `ap-southeast-1`
  + Asia-Pacífico (Sídney): `ap-southeast-2`
  + Asia-Pacífico (Yakarta): `ap-southeast-3`
  + Asia Pacífico (Melbourne): `ap-southeast-4`
  + Asia Pacífico (Malasia): `ap-southeast-5`
  + Asia-Pacífico (Bombay): `ap-south-1`
  + Asia Pacífico (Hyderabad): `ap-south-2`
  + China (Pekín): `cn-north-1`
  + China (Ningxia): `cn-northwest-1`
  + AWS GovCloud (EEUU-Oeste): `us-gov-west-1`
  + AWS GovCloud (EEUU-Este): `us-gov-east-1`

**Para conectarse a Neptune mediante RDF4 J o Apache Jena con firma Signature Version 4**

1. Clona el repositorio de muestras desde. GitHub

   ```
   git clone https://github.com/aws/amazon-neptune-sparql-java-sigv4.git
   ```

1. Cambie al directorio clonado.

   ```
   cd amazon-neptune-sparql-java-sigv4
   ```

1. Obtenga la versión más reciente del proyecto al revisar la ramificación con la etiqueta más reciente.

   ```
   git checkout $(git describe --tags `git rev-list --tags --max-count=1`)
   ```

1. Introduzca uno de los siguientes comandos para compilar y ejecutar el código de ejemplo.

   *your-neptune-endpoint*Sustitúyalo por el nombre de host o la dirección IP de la instancia de base de datos de Neptune. El puerto predeterminado es 8182.
**nota**  
Para obtener información acerca de cómo encontrar el nombre de host de la instancia de base de datos de Neptune, consulte la sección [Conexión a los puntos de conexión de Amazon Neptune](feature-overview-endpoints.md).

**Eclipse J. RDF4**  
Introduzca lo siguiente para ejecutar el ejemplo de RDF4 J.

   ```
   mvn compile exec:java \
       -Dexec.mainClass="com.amazonaws.neptune.client.rdf4j.NeptuneRdf4JSigV4Example" \
       -Dexec.args="https://your-neptune-endpoint:portsparql region-name"
   ```

**Apache Jena**  
Para ejecutar el ejemplo de Apache Jena, introduzca lo siguiente.

   ```
   mvn compile exec:java \
       -Dexec.mainClass="com.amazonaws.neptune.client.jena.NeptuneJenaSigV4Example" \
       -Dexec.args="https://your-neptune-endpoint:port"
   ```

1. Para ver el código fuente del ejemplo, consulte los ejemplos del directorio `src/main/java/com/amazonaws/neptune/client/`.

Para utilizar el controlador de firma SigV4 en su propia aplicación de Java, añada el paquete de Maven `amazon-neptune-sigv4-signer` a la sección `<dependencies>` del archivo `pom.xml`. Recomendamos que utilice los ejemplos como punto de partida.

# Conexión a bases de datos de Amazon Neptune mediante la autenticación de IAM con SPARQL y Node.js
<a name="iam-auth-connecting-sparql-node"></a>

## Consultas mediante la firma Signature V4 y el AWS SDK para Javascript V3
<a name="iam-auth-querying-sparql-js-sdk-v3"></a>

A continuación, se muestra un ejemplo de cómo conectarse a Neptune SPARQL mediante Node.js con la autenticación Signature Version 4 y el AWS SDK para Javascript V3:

```
const { HttpRequest }  = require('@smithy/protocol-http');
const { fromNodeProviderChain } = require('@aws-sdk/credential-providers');
const { SignatureV4 } = require('@smithy/signature-v4');
const { Sha256 } = require('@aws-crypto/sha256-universal');
const https = require('https');

var region = 'us-west-2'; // e.g. us-west-1
var neptune_endpoint = 'your-Neptune-cluster-endpoint';  // like: 'cluster-id.region.neptune.amazonaws.com'
var query = `query=PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX class: <http://aws.amazon.com/neptune/csv2rdf/class/>
PREFIX resource: <http://aws.amazon.com/neptune/csv2rdf/resource/>
PREFIX prop: <http://aws.amazon.com/neptune/csv2rdf/datatypeProperty/>
PREFIX objprop: <http://aws.amazon.com/neptune/csv2rdf/objectProperty/>

SELECT ?movies ?title WHERE {
  ?jel prop:name "James Earl Jones" .
  ?movies ?p2 ?jel .
  ?movies prop:title ?title
} LIMIT 10`;

runQuery(query);

function runQuery(q) {
  var request = new HttpRequest({
    hostname: neptune_endpoint,
    port: 8182,
    path: 'sparql',
    body: encodeURI(query),
    headers: {
      'Content-Type': 'application/x-www-form-urlencoded',
      'host': neptune_endpoint + ':8182',
    },
    method: 'POST',
  });

  const credentialProvider = fromNodeProviderChain();
  let credentials = credentialProvider();
  credentials.then(
    (cred)=>{
      var signer = new SignatureV4({credentials: cred, region: region, sha256: Sha256, service: 'neptune-db'});
      signer.sign(request).then(
        (req)=>{
          var responseBody = '';
          var sendreq = https.request(
            {
              host: req.hostname,
              port: req.port,
              path: req.path,
              method: req.method,
              headers: req.headers,
            },
          (res) => {
            res.on('data', (chunk) => { responseBody += chunk; });
            res.on('end', () => {
                console.log(JSON.parse(responseBody));
            });
          });
          sendreq.write(req.body);
          sendreq.end();
        }
      );
    },
    (err)=>{
      console.error(err);
    }
  );
}
```

## Consultas mediante la firma Signature V4 y el SDK para Javascript V2 AWS
<a name="iam-auth-querying-sparql-js-sdk-v2"></a>

A continuación, se muestra un ejemplo de cómo conectarse a Neptune SPARQL mediante Node.js con la autenticación Signature Version 4 y el AWS SDK para Javascript V2:

```
var AWS = require('aws-sdk');

var region = 'us-west-2'; // e.g. us-west-1
var neptune_endpoint = 'your-Neptune-cluster-endpoint';  // like: 'cluster-id.region.neptune.amazonaws.com'
var query = `query=PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX class: <http://aws.amazon.com/neptune/csv2rdf/class/>
PREFIX resource: <http://aws.amazon.com/neptune/csv2rdf/resource/>
PREFIX prop: <http://aws.amazon.com/neptune/csv2rdf/datatypeProperty/>
PREFIX objprop: <http://aws.amazon.com/neptune/csv2rdf/objectProperty/>

SELECT ?movies ?title WHERE {
    ?jel prop:name "James Earl Jones" .
    ?movies ?p2 ?jel .
    ?movies prop:title ?title
} LIMIT 10`;

runQuery(query);

function runQuery(q) {

    var endpoint = new AWS.Endpoint(neptune_endpoint);
    endpoint.port = 8182;
    var request = new AWS.HttpRequest(endpoint, region);
    request.path += 'sparql';
    request.body = encodeURI(query);
    request.headers['Content-Type'] = 'application/x-www-form-urlencoded';
    request.headers['host'] = neptune_endpoint;
    request.method = 'POST';

    var credentials = new AWS.CredentialProviderChain();
    credentials.resolve((err, cred)=>{
        var signer = new AWS.Signers.V4(request, 'neptune-db');
        signer.addAuthorization(cred, new Date());
    });

    var client = new AWS.HttpClient();
    client.handleRequest(request, null, function(response) {
        console.log(response.statusCode + ' ' + response.statusMessage);
        var responseBody = '';
        response.on('data', function (chunk) {
            responseBody += chunk;
        });
        response.on('end', function (chunk) {
            console.log('Response body: ' + responseBody);
        });
    }, function(error) {
        console.log('Error: ' + error);
    });
}
```

# Conexión a bases de datos de Amazon Neptune mediante la autenticación de IAM con Python
<a name="iam-auth-connecting-python"></a>

En esta sección, se muestra un programa de ejemplo escrito en Python que ilustra cómo trabajar con Signature Version 4 para Amazon Neptune. Se basa en los ejemplos de la sección [Proceso de firma Signature Version 4](https://docs.aws.amazon.com/general/latest/gr/sigv4-signed-request-examples.html) en la *Referencia general de Amazon Web Services*.

Para utilizar este programa de ejemplo, se necesita lo siguiente:
+ Python 3.x instalado en el equipo; puede obtenerlo en el [sitio de Python](https://www.python.org/downloads/). Estos programas se han probado con Python 3.6.
+ La [biblioteca requests de Python](https://pypi.python.org/pypi/requests), que se utiliza en el script de ejemplo para realizar solicitudes web. Una forma cómoda de instalar paquetes de Python es utilizar `pip`, que obtiene los paquetes del sitio web Python Package Index. A continuación, puede instalar `requests` ejecutando `pip install requests` en la línea de comandos.
+ Una clave de acceso (ID de clave de acceso y clave de acceso secreta) en las variables de entorno denominadas `AWS_ACCESS_KEY_ID` y `AWS_SECRET_ACCESS_KEY`. Como práctica recomendada, es conveniente que *no* incluya las credenciales en el código. Para más información, consulte [Prácticas recomendadas para cuentas de AWS](https://docs.aws.amazon.com//accounts/latest/reference/best-practices.html) en la *Guía de referencia de AWS Account Management *.

  La región de su clúster de base de datos de Neptune en la variable de entorno denominada `SERVICE_REGION`.

  Si está utilizando credenciales temporales, debe especificar `AWS_SESSION_TOKEN` además de `AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY` y `SERVICE_REGION`.
**nota**  
Si utiliza las credenciales temporales, caducan después de un intervalo especificado, *incluido el token de sesión*.  
Tiene que actualizar el token de sesión cuando solicite nuevas credenciales. Para obtener más información, consulte [Uso de credenciales de seguridad temporales para solicitar acceso a los recursos de AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_use-resources.html).

En el siguiente ejemplo, se muestra cómo realizar solicitudes firmadas a Neptune mediante Python. Se realiza una solicitud GET o POST. La información de autenticación se pasa mediante el encabezado `Authorization` de la solicitud.

Este ejemplo también funciona como una AWS Lambda función. Para obtener más información, consulte [Configuración de AWS Lambda para la autenticación IAM de Neptune](iam-auth-temporary-credentials.md#iam-auth-temporary-credentials-lambda).

**Para realizar solicitudes firmadas a los puntos de conexión de Gremlin y SPARQL en Neptune**

1. Cree un archivo con el nombre `neptunesigv4.py` y ábralo en un editor de texto.

1. Copie el siguiente código y péguelo en el archivo `neptunesigv4.py`.

   ```
   # Amazon Neptune version 4 signing example (version v3)
   
   # The following script requires python 3.6+
   #    (sudo yum install python36 python36-virtualenv python36-pip)
   # => the reason is that we're using urllib.parse() to manually encode URL
   #    parameters: the problem here is that SIGV4 encoding requires whitespaces
   #    to be encoded as %20 rather than not or using '+', as done by previous/
   #    default versions of the library.
   
   
   # See: https://docs.aws.amazon.com/general/latest/gr/sigv4_signing.html
   import sys, datetime, hashlib, hmac
   import requests  # pip3 install requests
   import urllib
   import os
   import json
   from botocore.auth import SigV4Auth
   from botocore.awsrequest import AWSRequest
   from botocore.credentials import ReadOnlyCredentials
   from types import SimpleNamespace
   from argparse import RawTextHelpFormatter
   from argparse import ArgumentParser
   
   # Configuration. https is required.
   protocol = 'https'
   
   # The following lines enable debugging at httplib level (requests->urllib3->http.client)
   # You will see the REQUEST, including HEADERS and DATA, and RESPONSE with HEADERS but without DATA.
   #
   # The only thing missing will be the response.body which is not logged.
   #
   # import logging
   # from http.client import HTTPConnection
   # HTTPConnection.debuglevel = 1
   # logging.basicConfig()
   # logging.getLogger().setLevel(logging.DEBUG)
   # requests_log = logging.getLogger("requests.packages.urllib3")
   # requests_log.setLevel(logging.DEBUG)
   # requests_log.propagate = True
   
   
   # Read AWS access key from env. variables. Best practice is NOT
   # to embed credentials in code.
   access_key = os.getenv('AWS_ACCESS_KEY_ID', '')
   secret_key = os.getenv('AWS_SECRET_ACCESS_KEY', '')
   region = os.getenv('SERVICE_REGION', '')
   
   # AWS_SESSION_TOKEN is optional environment variable. Specify a session token only if you are using temporary
   # security credentials.
   session_token = os.getenv('AWS_SESSION_TOKEN', '')
   
   ### Note same script can be used for AWS Lambda (runtime = python3.6).
   ## Steps to use this python script for AWS Lambda
   # 1. AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN and AWS_REGION variables are already part of Lambda's Execution environment
   #    No need to set them up explicitly.
   # 3. Create Lambda deployment package https://docs.aws.amazon.com/lambda/latest/dg/lambda-python-how-to-create-deployment-package.html
   # 4. Create a Lambda function in the same VPC and assign an IAM role with neptune access
   
   def lambda_handler(event, context):
       # sample_test_input = {
       #     "host": "END_POINT:8182",
       #     "method": "GET",
       #     "query_type": "gremlin",
       #     "query": "g.V().count()"
       # }
   
       # Lambda uses AWS_REGION instead of SERVICE_REGION
       global region
       region = os.getenv('AWS_REGION', '')
   
       host = event['host']
       method = event['method']
       query_type = event['query_type']
       query =  event['query']
   
       return make_signed_request(host, method, query_type, query)
   
   def validate_input(method, query_type):
       # Supporting GET and POST for now:
       if (method != 'GET' and method != 'POST'):
           print('First parameter must be "GET" or "POST", but is "' + method + '".')
           sys.exit()
   
       # SPARQL UPDATE requires POST
       if (method == 'GET' and query_type == 'sparqlupdate'):
           print('SPARQL UPDATE is not supported in GET mode. Please choose POST.')
           sys.exit()
   
   def get_canonical_uri_and_payload(query_type, query, method):
       # Set the stack and payload depending on query_type.
       if (query_type == 'sparql'):
           canonical_uri = '/sparql/'
           payload = {'query': query}
   
       elif (query_type == 'sparqlupdate'):
           canonical_uri = '/sparql/'
           payload = {'update': query}
   
       elif (query_type == 'gremlin'):
           canonical_uri = '/gremlin/'
           payload = {'gremlin': query}
           if (method == 'POST'):
               payload = json.dumps(payload)
   
       elif (query_type == 'openCypher'):
           canonical_uri = '/openCypher/'
           payload = {'query': query}
   
       elif (query_type == "loader"):
           canonical_uri = "/loader/"
           payload = query
   
       elif (query_type == "status"):
           canonical_uri = "/status/"
           payload = {}
   
       elif (query_type == "gremlin/status"):
           canonical_uri = "/gremlin/status/"
           payload = {}
   
       elif (query_type == "openCypher/status"):
           canonical_uri = "/openCypher/status/"
           payload = {}
   
       elif (query_type == "sparql/status"):
           canonical_uri = "/sparql/status/"
           payload = {}
   
       else:
           print(
               'Third parameter should be from ["gremlin", "sparql", "sparqlupdate", "loader", "status] but is "' + query_type + '".')
           sys.exit()
       ## return output as tuple
       return canonical_uri, payload
   
   def make_signed_request(host, method, query_type, query):
       service = 'neptune-db'
       endpoint = protocol + '://' + host
   
       print()
       print('+++++ USER INPUT +++++')
       print('host = ' + host)
       print('method = ' + method)
       print('query_type = ' + query_type)
       print('query = ' + query)
   
       # validate input
       validate_input(method, query_type)
   
       # get canonical_uri and payload
       canonical_uri, payload = get_canonical_uri_and_payload(query_type, query, method)
   
       # assign payload to data or params
       data = payload if method == 'POST' else None
       params = payload if method == 'GET' else None
   
       # create request URL
       request_url = endpoint + canonical_uri
   
       # create and sign request
       creds = SimpleNamespace(
           access_key=access_key, secret_key=secret_key, token=session_token, region=region,
       )
   
       request = AWSRequest(method=method, url=request_url, data=data, params=params)
       SigV4Auth(creds, service, region).add_auth(request)
   
       r = None
   
       # ************* SEND THE REQUEST *************
       if (method == 'GET'):
   
           print('++++ BEGIN GET REQUEST +++++')
           print('Request URL = ' + request_url)
           r = requests.get(request_url, headers=request.headers, verify=False, params=params)
   
       elif (method == 'POST'):
   
           print('\n+++++ BEGIN POST REQUEST +++++')
           print('Request URL = ' + request_url)
           if (query_type == "loader"):
               request.headers['Content-type'] = 'application/json'
           r = requests.post(request_url, headers=request.headers, verify=False, data=data)
   
       else:
           print('Request method is neither "GET" nor "POST", something is wrong here.')
   
       if r is not None:
           print()
           print('+++++ RESPONSE +++++')
           print('Response code: %d\n' % r.status_code)
           response = r.text
           r.close()
           print(response)
   
           return response
   
   help_msg = '''
       export AWS_ACCESS_KEY_ID=[MY_ACCESS_KEY_ID]
       export AWS_SECRET_ACCESS_KEY=[MY_SECRET_ACCESS_KEY]
       export AWS_SESSION_TOKEN=[MY_AWS_SESSION_TOKEN]
       export SERVICE_REGION=[us-east-1|us-east-2|us-west-2|eu-west-1]
   
       python version >=3.6 is required.
   
       Examples: For help
       python3 program_name.py -h
   
       Examples: Queries
       python3 program_name.py -ho your-neptune-endpoint -p 8182 -a GET -q status
       python3 program_name.py -ho your-neptune-endpoint -p 8182 -a GET -q sparql/status
       python3 program_name.py -ho your-neptune-endpoint -p 8182 -a GET -q sparql -d "SELECT ?s WHERE { ?s ?p ?o }"
       python3 program_name.py -ho your-neptune-endpoint -p 8182 -a POST -q sparql -d "SELECT ?s WHERE { ?s ?p ?o }"
       python3 program_name.py -ho your-neptune-endpoint -p 8182 -a POST -q sparqlupdate -d "INSERT DATA { <https://s> <https://p> <https://o> }"
       python3 program_name.py -ho your-neptune-endpoint -p 8182 -a GET -q gremlin/status
       python3 program_name.py -ho your-neptune-endpoint -p 8182 -a GET -q gremlin -d "g.V().count()"
       python3 program_name.py -ho your-neptune-endpoint -p 8182 -a POST -q gremlin -d "g.V().count()"
       python3 program_name.py -ho your-neptune-endpoint -p 8182 -a GET -q openCypher/status
       python3 program_name.py -ho your-neptune-endpoint -p 8182 -a GET -q openCypher -d "MATCH (n1) RETURN n1 LIMIT 1;"
       python3 program_name.py -ho your-neptune-endpoint -p 8182 -a POST -q openCypher -d "MATCH (n1) RETURN n1 LIMIT 1;"
       python3 program_name.py -ho your-neptune-endpoint -p 8182 -a GET -q loader -d '{"loadId": "68b28dcc-8e15-02b1-133d-9bd0557607e6"}'
       python3 program_name.py -ho your-neptune-endpoint -p 8182 -a GET -q loader -d '{}'
       python3 program_name.py -ho your-neptune-endpoint -p 8182 -a POST -q loader -d '{"source": "source", "format" : "csv", "failOnError": "fail_on_error", "iamRoleArn": "iam_role_arn", "region": "region"}'
   
       Environment variables must be defined as AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and SERVICE_REGION.
       You should also set AWS_SESSION_TOKEN environment variable if you are using temporary credentials (ex. IAM Role or EC2 Instance profile).
   
       Current Limitations:
       - Query mode "sparqlupdate" requires POST (as per the SPARQL 1.1 protocol)
               '''
   
   def exit_and_print_help():
       print(help_msg)
       exit()
   
   def parse_input_and_query_neptune():
   
   
       parser = ArgumentParser(description=help_msg, formatter_class=RawTextHelpFormatter)
       group_host = parser.add_mutually_exclusive_group()
       group_host.add_argument("-ho", "--host", type=str)
       group_port = parser.add_mutually_exclusive_group()
       group_port.add_argument("-p", "--port", type=int, help="port ex. 8182, default=8182", default=8182)
       group_action = parser.add_mutually_exclusive_group()
       group_action.add_argument("-a", "--action", type=str, help="http action, default = GET", default="GET")
       group_endpoint = parser.add_mutually_exclusive_group()
       group_endpoint.add_argument("-q", "--query_type", type=str, help="query_type, default = status ", default="status")
       group_data = parser.add_mutually_exclusive_group()
       group_data.add_argument("-d", "--data", type=str, help="data required for the http action", default="")
   
       args = parser.parse_args()
       print(args)
   
       # Read command line parameters
       host = args.host
       port = args.port
       method = args.action
       query_type = args.query_type
       query = args.data
   
       if (access_key == ''):
           print('!!! ERROR: Your AWS_ACCESS_KEY_ID environment variable is undefined.')
           exit_and_print_help()
   
       if (secret_key == ''):
           print('!!! ERROR: Your AWS_SECRET_ACCESS_KEY environment variable is undefined.')
           exit_and_print_help()
   
       if (region == ''):
           print('!!! ERROR: Your SERVICE_REGION environment variable is undefined.')
           exit_and_print_help()
   
       if host is None:
           print('!!! ERROR: Neptune DNS is missing')
           exit_and_print_help()
   
       host = host + ":" + str(port)
       make_signed_request(host, method, query_type, query)
   
   
   if __name__ == "__main__":
       parse_input_and_query_neptune()
   ```

1. En un terminal, vaya a la ubicación del archivo `neptunesigv4.py`.

1. Introduzca los siguientes comandos, reemplazando la clave de acceso, la clave secreta y la región por los valores correctos.

   ```
   export AWS_ACCESS_KEY_ID=MY_ACCESS_KEY_ID
   export AWS_SECRET_ACCESS_KEY=MY_SECRET_ACCESS_KEY
   export SERVICE_REGION=us-east-1 or us-east-2 or us-west-1 or us-west-2 or ca-central-1 or
                         ca-west-1 or sa-east-1 or eu-north-1 or eu-south-2 or eu-west-1 or eu-west-2 or eu-west-3 or
                         eu-central-1 or me-south-1 or me-central-1 or il-central-1 or af-south-1 or ap-east-1 or
                         ap-northeast-1 or ap-northeast-2 or ap-northeast-3 or ap-southeast-1 or ap-southeast-2 or
                         ap-southeast-3 or ap-southeast-4 or ap-southeast-5 or ap-south-1 or ap-south-2 or
                         cn-north-1 or cn-northwest-1 or
                         us-gov-east-1 or us-gov-west-1
   ```

   Si está utilizando credenciales temporales, debe especificar `AWS_SESSION_TOKEN` además de `AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY` y `SERVICE_REGION`.

   ```
   export AWS_SESSION_TOKEN=MY_AWS_SESSION_TOKEN
   ```
**nota**  
Si utiliza las credenciales temporales, caducan después de un intervalo especificado, *incluido el token de sesión*.  
Tiene que actualizar el token de sesión cuando solicite nuevas credenciales. Para obtener más información, consulte [Uso de credenciales de seguridad temporales para solicitar acceso a los recursos de AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_use-resources.html).

1. Introduzca uno de los siguientes comandos para enviar una solicitud firmada a la instancia de base de datos de Neptune. Estos ejemplos utilizan Python versión 3.6.

   **Estado de punto de enlace**

   ```
   python3.6 neptunesigv4.py -ho your-neptune-endpoint -p 8182 -a GET -q status
   ```

   **Gremlin**

   ```
   python3.6 neptunesigv4.py -ho your-neptune-endpoint -p 8182 -a GET -q gremlin -d "g.V().count()"
   
   python3.6 neptunesigv4.py -ho your-neptune-endpoint -p 8182 -a POST -q gremlin -d "g.V().count()"
   ```

   **Estado de Gremlin**

   ```
   python3.6 neptunesigv4.py -ho your-neptune-endpoint -p 8182 -a GET -q gremlin/status
   ```

   **SPARQL**

   ```
   python3.6 neptunesigv4.py -ho your-neptune-endpoint -p 8182 -a GET -q sparql -d "SELECT ?s WHERE { ?s ?p ?o }"
   ```

   **SPARQL UPDATE**

   ```
   python3.6 neptunesigv4.py -ho your-neptune-endpoint -p 8182 -a POST -q sparqlupdate -d "INSERT DATA { <https://s> <https://p> <https://o> }"
   ```

   **Estado de SPARQL**

   ```
   python3.6 neptunesigv4.py -ho your-neptune-endpoint -p 8182 -a GET -q sparql/status
   ```

   **openCypher**

   ```
   python3.6 neptunesigv4.py -ho your-neptune-endpoint -p 8182 -a GET -q openCypher -d "MATCH (n1) RETURN n1 LIMIT 1;"
   
   python3.6 neptunesigv4.py -ho your-neptune-endpoint -p 8182 -a POST -q openCypher -d "MATCH (n1) RETURN n1 LIMIT 1;"
   ```

   **Estado de openCypher**

   ```
   python3.6 neptunesigv4.py -ho your-neptune-endpoint -p 8182 -a GET -q openCypher/status
   ```

   **Programa de carga**

   ```
   python3.6 neptunesigv4.py -ho your-neptune-endpoint -p 8182 -a GET -q loader -d '{"loadId": "68b28dcc-8e15-02b1-133d-9bd0557607e6"}'
   
   python3.6 neptunesigv4.py -ho your-neptune-endpoint -p 8182 -a GET -q loader -d '{}'
   
   python3.6 neptunesigv4.py -ho your-neptune-endpoint -p 8182 -a POST -q loader -d '{"source": "source", "format" : "csv", "failOnError": "fail_on_error", "iamRoleArn": "iam_role_arn", "region": "region"}'
   ```

1. La sintaxis para ejecutar el script de Python es la siguiente:

   ```
   python3.6 neptunesigv4.py -ho your-neptune-endpoint -p port -a GET|POST -q gremlin|sparql|sparqlupdate|loader|status -d "string0data"
   ```

   SPARQL UPDATE requiere `POST`.

# Conexión a bases de datos de Amazon Neptune mediante la autenticación de IAM con Python de Gremlin
<a name="gremlin-python-iam-auth"></a>

## Descripción general de
<a name="gremlin-python-iam-auth-overview"></a>

 Esta guía muestra cómo conectarse a una base de datos de Amazon Neptune con la autenticación de IAM habilitada mediante el controlador Gremlin Python, con la autenticación Signature Version 4 y el AWS SDK para Python (Boto3). 

## Creación de una conexión básica
<a name="gremlin-python-iam-auth-basic-connection"></a>

 Utilice el siguiente ejemplo de código como guía para establecer una conexión básica con autenticación de IAM mediante el controlador Python de Gremlin. 

```
from boto3 import Session
from botocore.auth import SigV4Auth
from botocore.awsrequest import AWSRequest

from gremlin_python.process.anonymous_traversal import traversal
from gremlin_python.driver.driver_remote_connection import DriverRemoteConnection

def main():
    endpoint = 'your.cluster.endpoint.neptune.amazonaws.com'
    conn_string = 'wss://' + endpoint + ':8182/gremlin'
    default_region = 'us-east-1'
    service = 'neptune-db'

    credentials = Session().get_credentials()
    if credentials is None:
        raise Exception("No AWS credentials found")
    creds = credentials.get_frozen_credentials()
    # region set inside config profile or via AWS_DEFAULT_REGION environment variable will be loaded
    region = Session().region_name if Session().region_name else default_region

    request = AWSRequest(method='GET', url=conn_string, data=None)
    SigV4Auth(creds, service, region).add_auth(request)

    rc = DriverRemoteConnection(conn_string, 'g', headers=request.headers.items())
    g = traversal().with_remote(rc)

    # simple query to verify connection
    count = g.V().count().next()
    print('Vertex count: ' + str(count))

    # cleanup
    rc.close()

if __name__ == "__main__":
    main()
```

# Conexión a las bases de datos de Amazon Neptune mediante la autenticación de IAM con Gremlin JavaScript
<a name="gremlin-javascript-iam-auth"></a>

## Descripción general de
<a name="gremlin-javascript-iam-auth-overview"></a>

 Esta guía muestra cómo conectarse a una base de datos de Amazon Neptune con la autenticación de IAM habilitada mediante el JavaScript controlador Gremlin, con la autenticación Signature Version 4 y el AWS SDK para Javascript v3. 

## Requisitos previos
<a name="gremlin-javascript-iam-auth-prereqs"></a>
+  Un clúster de Amazon Neptune con la autenticación de IAM habilitada. 
+  [Node 13 o posterior (consulte las versiones mínimas para Gremlin y el SDK para Javascript v3 JavaScript ).AWS](https://docs.aws.amazon.com//AWSJavaScriptSDK/v3/latest/introduction/#release-cadence) 
+  AWS credenciales configuradas (mediante variables de entorno, un archivo de credenciales compartido o una función de IAM). 

## Creación de una conexión básica
<a name="gremlin-javascript-iam-auth-basic-connection"></a>

 Utilice el siguiente ejemplo de código como guía sobre cómo establecer una conexión básica con la autenticación de IAM mediante el controlador JavaScript Gremlin. 

```
const { fromNodeProviderChain } = require('@aws-sdk/credential-providers');
const { getUrlAndHeaders } = require('gremlin-aws-sigv4/lib/utils');
const { loadConfig } = require("@smithy/node-config-provider");
const { NODE_REGION_CONFIG_FILE_OPTIONS, NODE_REGION_CONFIG_OPTIONS } = require("@smithy/config-resolver");

const gremlin = require('gremlin');
const DriverRemoteConnection = gremlin.driver.DriverRemoteConnection;
const traversal = gremlin.process.AnonymousTraversalSource.traversal;

const DEFAULT_REGION = 'us-east-1';

const getCredentials = async () => {
    try {
        // Loads the default credential provider chain
        return await fromNodeProviderChain();
    } catch (e) {
        console.error("No credentials found", e);
        throw e;
    }
};

(main = async () => {
    console.log('Starting');

    const credentials = await getCredentials();
    try {
        // region set inside config profile or via AWS_REGION environment variable will be loaded
        credentials['region'] = await loadConfig(NODE_REGION_CONFIG_OPTIONS, NODE_REGION_CONFIG_FILE_OPTIONS)();
    } catch (e) {
        credentials['region'] = DEFAULT_REGION
    }

    const connInfo = getUrlAndHeaders(
        'you.cluster.endpoint.neptune.amazonaws.com',
        '8182',
        credentials,
        '/gremlin',
        'wss');

    const dc = new DriverRemoteConnection(connInfo['url'], {headers: connInfo['headers']});
    const g = traversal().withRemote(dc);

    const query = g.V().limit(5).count();
    const count = await query.next();
    console.log("Vertex count: " + count.value);

    await dc.close();
})

main();
```

# Conexión a bases de datos de Amazon Neptune mediante la autenticación de IAM con Go de Gremlin
<a name="gremlin-go-iam-auth"></a>

## Descripción general de
<a name="gremlin-go-iam-auth-overview"></a>

 Esta guía muestra cómo conectarse a una base de datos de Amazon Neptune con la autenticación de IAM habilitada mediante el controlador Gremlin Go, con la autenticación Signature versión 4 y el AWS SDK para GO v2. 

## Requisitos previos
<a name="gremlin-go-iam-auth-prereqs"></a>
+  Un clúster de Amazon Neptune con la autenticación de IAM habilitada. 
+  Go 1.22 o posterior (consulte las versiones mínimas compatibles para [Go de Gremlin](https://pkg.go.dev/github.com/apache/tinkerpop/gremlin-go/v3/driver) y [AWS SDK para Go v2](https://pkg.go.dev/github.com/aws/aws-sdk-go-v2)). 
+  AWS credenciales configuradas (mediante variables de entorno, un archivo de credenciales compartido o una función de IAM) 

## Creación de una conexión básica
<a name="gremlin-go-iam-auth-basic-connection"></a>

 Utilice el siguiente ejemplo de código como guía sobre para establecer una conexión básica con autenticación de IAM mediante el controlador de Go de Gremlin. 

```
package main

import (
	"context"
	"fmt"
	"github.com/aws/aws-sdk-go-v2/config"
	"net/http"
	"strings"
	"time"

	gremlingo "github.com/apache/tinkerpop/gremlin-go/v3/driver"
	v4 "github.com/aws/aws-sdk-go-v2/aws/signer/v4"
)

const emptyStringSHA256 = `e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855`

func main() {
	neptuneEndpoint := "you.cluster.endpoint.neptune.amazonaws.com"
	connString := "wss://" + neptuneEndpoint + ":8182/gremlin"
	service := "neptune-db"
	defaultRegion := "us-east-1"

	// Create request to sign
	req, err := http.NewRequest(http.MethodGet, connString, strings.NewReader(""))
	if err != nil {
		fmt.Println(err)
		return
	}

	// Loads the default config with default credentials provider
	// See https://github.com/aws/aws-sdk-go-v2 for additional docs on API usage
	cfg, err := config.LoadDefaultConfig(context.TODO())
	if err != nil {
		fmt.Println(err)
		return
	}
	// Retrieve loaded credentials 
	cr, err := cfg.Credentials.Retrieve(context.TODO())
	if err != nil {
		fmt.Println(err)
		return
	}

	region := defaultRegion
	if cfg.Region != "" {
		// region set inside config profile, or via AWS_REGION or AWS_DEFAULT_REGION environment variable will be loaded
		region = cfg.Region
	}

	signer := v4.NewSigner()
	// Sign request
	err = signer.SignHTTP(context.TODO(), cr, req, emptyStringSHA256, service, "us-east-2", time.Now())
	if err != nil {
		fmt.Println(err)
		return
	}

	// Pass the signed request header into gremlingo.HeaderAuthInfo()
	driverRemoteConnection, err := gremlingo.NewDriverRemoteConnection(connString,
		func(settings *gremlingo.DriverRemoteConnectionSettings) {
			settings.TraversalSource = "g"
			settings.AuthInfo = gremlingo.HeaderAuthInfo(req.Header)
			// settings.TlsConfig = &tls.Config{InsecureSkipVerify: true} // Use this only if you're on a Mac running Go 1.18+ doing local dev. See https://github.com/golang/go/issues/51991
		})
	if err != nil {
		fmt.Println(err)
		return
	}

	// Cleanup
	defer driverRemoteConnection.Close()

	// Creating graph traversal
	g := gremlingo.Traversal_().WithRemote(driverRemoteConnection)

	// Query execution
	count, err := g.V().Limit(5).Count().Next()
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Println("Vertex count:", *count)
}
```

## Actualización dinámica de credenciales de Go de Gremlin
<a name="gremlin-go-iam-auth-go-credential-refresh"></a>

 Gremlin Go permite insertar un puntero de función para recuperar las credenciales y generar el encabezado, lo que evita que el encabezado caduque en el caso de conexiones de larga duración. DynamicAuth 

```
package main

import (
	"context"
	"crypto/tls"
	"fmt"
	"github.com/aws/aws-sdk-go-v2/config"
	"net/http"
	"strings"
	"time"

	gremlingo "github.com/apache/tinkerpop/gremlin-go/v3/driver"
	v4 "github.com/aws/aws-sdk-go-v2/aws/signer/v4"
)

const emptyStringSHA256 = `e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855`

func main() {
	neptuneEndpoint := "you.cluster.endpoint.neptune.amazonaws.com"
	connString := "wss://" + neptuneEndpoint + ":8182/gremlin"
	service := "neptune-db"
	defaultRegion := "us-east-1"

	//Create the request to sign
	req, err := http.NewRequest(http.MethodGet, connString, strings.NewReader(""))
	if err != nil {
		fmt.Println(err)
		return
	}

	// Loads the default config with default credentials provider
	// See https://github.com/aws/aws-sdk-go-v2 for additional docs on API usage
	cfg, err := config.LoadDefaultConfig(context.TODO())
	if err != nil {
		fmt.Println(err)
		return
	}

	region := defaultRegion
	if cfg.Region != "" {
		// region set inside config profile, or via AWS_REGION or AWS_DEFAULT_REGION environment variable will be loaded
		region = cfg.Region
	}
	
	signer := v4.NewSigner()

	// This is the function that will be used for dynamic refreseh of credentials and signed headers
	gen := func() gremlingo.AuthInfoProvider {
		// Retrieve loaded credentials 
		cr, err := cfg.Credentials.Retrieve(context.TODO())
		fmt.Println("AWS Credentials: ", cr)
		if err != nil {
			fmt.Println(err)
			return
		}
		// Sign request
		err = signer.SignHTTP(context.TODO(), cr, req, emptyStringSHA256, service, region, time.Now())
		if err != nil {
			fmt.Println(err)
			return
		}
		fmt.Println(req.Header)
		return gremlingo.HeaderAuthInfo(req.Header)
	}

	// Pass the function into gremlingo.NewDynamicAuth(), which will generate the AuthInfoProvider to pass into gremlingo.DriverRemoteConnectionSettings below
	auth := gremlingo.NewDynamicAuth(gen)

	driverRemoteConnection, err := gremlingo.NewDriverRemoteConnection(connString,
		func(settings *gremlingo.DriverRemoteConnectionSettings) {
			settings.TraversalSource = "g"
			settings.AuthInfo = auth
			// settings.TlsConfig = &tls.Config{InsecureSkipVerify: true} // Use this only if you're on a Mac running Go 1.18+ doing local dev. See https://github.com/golang/go/issues/51991

		})
	if err != nil {
		fmt.Println(err)
		return
	}

	// Cleanup
	defer driverRemoteConnection.Close()

	// Creating graph traversal
	g := gremlingo.Traversal_().WithRemote(driverRemoteConnection)

	// Query execution
	count, err := g.V().Limit(5).Count().Next()
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Println("Vertex count:", *count)
}
```

# Conexión a bases de datos de Amazon Neptune mediante la autenticación de IAM con .NET de Gremlin
<a name="gremlin-dotnet-iam-auth"></a>

## Descripción general de
<a name="gremlin-dotnet-iam-auth-overview"></a>

 Esta guía muestra cómo conectarse a una base de datos de Amazon Neptune con la autenticación de IAM habilitada mediante el controlador Gremlin.NET, con la autenticación Signature Version 4 y el SDK para .NET AWS v3. 

## Creación de una conexión básica
<a name="gremlin-dotnet-iam-auth-basic-connection"></a>

 [Para conectarse a Gremlin.NET, utilice el archivo `SigV4RequestSigner` fuente de la biblioteca personalizada -sigv4. https://github.com/aws/ amazon-neptune-gremlin-dotnet](https://github.com/aws/amazon-neptune-gremlin-dotnet-sigv4) Un ejemplo de configuración de proyecto se encuentra en [ https://github.com/aws/amazon-neptune-gremlin-dotnettree/main/example-sigv4/](https://github.com/aws/amazon-neptune-gremlin-dotnet-sigv4/tree/main/example) y se refleja a continuación. 

Archivo de proyecto:

```
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp8.0</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <Compile Include="../src/SigV4RequestSigner.cs" Link="SigV4RequestSigner.cs" />
    <PackageReference Include="AWSSDK.Core" Version="3.7.402.24" />
    <PackageReference Include="gremlin.net" Version="3.7.3" />
  </ItemGroup>

</Project>
```

Programa de ejemplo:

```
using System;
using System.Collections.Generic;
using System.Net.WebSockets;
using System.Linq;
using System.Net.Http;
using System.Security.Cryptography;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Web;
using Gremlin.Net;
using Gremlin.Net.Driver;
using Gremlin.Net.Driver.Remote;
using Gremlin.Net.Process;
using Gremlin.Net.Process.Traversal;
using Gremlin.Net.Structure;
using static Gremlin.Net.Process.Traversal.AnonymousTraversalSource;
using static Gremlin.Net.Process.Traversal.__;
using static Gremlin.Net.Process.Traversal.P;
using static Gremlin.Net.Process.Traversal.Order;
using static Gremlin.Net.Process.Traversal.Operator;
using static Gremlin.Net.Process.Traversal.Pop;
using static Gremlin.Net.Process.Traversal.Scope;
using static Gremlin.Net.Process.Traversal.TextP;
using static Gremlin.Net.Process.Traversal.Column;
using static Gremlin.Net.Process.Traversal.Direction;
using static Gremlin.Net.Process.Traversal.T;
using Amazon.Runtime.CredentialManagement;
using Amazon.Runtime;
using Amazon;
using Amazon.Util;
using Amazon.Neptune.Gremlin.Driver;

namespace NeptuneExample
{
    class Program
    {
        static void Main(string[] args)
        {
            /*
                Include your Neptune endpoint and port below.
            */
            var neptune_host = "neptune-endpoint"; // ex: mycluster.cluster.us-east-1.neptune.amazonaws.com
            var neptune_port = 8182;

            var gremlinServer = new GremlinServer(neptune_host, neptune_port);
            var gremlinClient = new GremlinClient(gremlinServer, webSocketConfiguration: new SigV4RequestSigner().signRequest(neptune_host, neptune_port));
            var remoteConnection = new DriverRemoteConnection(gremlinClient);
            var g = Traversal().WithRemote(remoteConnection);

            /* Example code to pull the first 5 vertices in a graph. */
            Console.WriteLine("Get List of Node Labels:");
            Int32 limitValue = 5;
            var output = g.V().Limit<Vertex>(limitValue).ToList();
            foreach(var item in output) {
                Console.WriteLine(item);
            }
        }
    }
}
```

# Administración del acceso a las bases de datos de Amazon Neptune mediante políticas de IAM
<a name="security-iam-access-manage"></a>

Las [políticas de IAM](https://docs.aws.amazon.com/kms/latest/developerguide/iam-policies.html) son objetos JSON que definen los permisos para usar acciones y recursos.

 AWS Para controlar el acceso, puede crear políticas y adjuntarlas a las AWS identidades o los recursos. Una política define los permisos cuando están asociados a una identidad o un recurso. AWS evalúa estas políticas cuando un director hace una solicitud. La mayoría de las políticas se almacenan AWS como documentos JSON. Para obtener más información sobre los documentos de políticas de JSON, consulte [Información general de políticas de JSON](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#access_policies-json) en la *Guía del usuario de IAM*.

Mediante las políticas, los administradores especifican quién tiene acceso a qué, definiendo qué **entidad principal** puede realizar **acciones** sobre qué **recursos** y en qué **condiciones**.

De forma predeterminada, los usuarios y los roles no tienen permisos. Un administrador de IAM crea políticas de IAM y las agrega a roles, que los usuarios pueden asumir posteriormente. Las políticas de IAM definen permisos independientemente del método que se utilice para realizar la operación.

## Políticas basadas en identidad
<a name="security_iam_access-manage-id-based-policies"></a>

Las políticas basadas en identidad son documentos de política de permisos JSON que asocia a una identidad (usuario, grupo o rol). Estas políticas controlan qué acciones pueden realizar las identidades, en qué recursos y en qué condiciones. Para obtener más información sobre cómo crear una política basada en la identidad, consulte [Definición de permisos de IAM personalizados con políticas administradas por el cliente](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html) en la *Guía del usuario de IAM*.

Las políticas basadas en identidad pueden ser *políticas insertadas* (incrustadas directamente en una sola identidad) o *políticas administradas* (políticas independientes asociadas a varias identidades). Para obtener información sobre cómo elegir entre políticas administradas e insertadas, consulte [Selección entre políticas administradas y políticas insertadas](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-choosing-managed-or-inline.html) en la *Guía del usuario de IAM*.

## Uso de políticas de control de servicios (SCP) con AWS las organizaciones
<a name="security_iam_access-manage-scp"></a>

Las políticas de control de servicios (SCPs) son políticas de JSON que especifican los permisos máximos para una organización o unidad organizativa (OU). [AWS Organizations](https://aws.amazon.com/organizations/) AWS Organizations es un servicio para agrupar y administrar de forma centralizada varias AWS cuentas que son propiedad de su empresa. Si habilitas todas las funciones de una organización, puedes aplicar políticas de control de servicios (SCPs) a una o a todas tus cuentas. El SCP limita los permisos de las entidades en las cuentas de los miembros, incluido cada usuario raíz de la AWS cuenta. Para obtener más información sobre Organizations SCPs, consulte [Cómo SCPs trabajar](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_about-scps.html) en la Guía del AWS Organizations usuario.

Los clientes que implementen Amazon Neptune en una AWS cuenta de una AWS organización pueden aprovechar SCPs para controlar qué cuentas pueden usar Neptune. Para garantizar el acceso a Neptune desde una cuenta de miembro, asegúrese de:
+  Permitir el acceso a `rds:*` y `neptune-db:*` para las operaciones de la base de datos de Neptune. Consulte [¿Por qué se necesitan los permisos y recursos de Amazon RDS para utilizar la base de datos de Neptune?](https://aws.amazon.com/neptune/faqs/) para obtener más información sobre por qué se necesitan los permisos de Amazon RDS para la base de datos de Neptune. 
+  Permitir el acceso a `neptune-graph:*` para las operaciones de Neptune Analytics. 

## Permisos necesarios para usar la consola de Amazon Neptune
<a name="security-iam-access-manage-console"></a>

Para que un usuario pueda trabajar con la consola de Amazon Neptune, debe tener un conjunto mínimo de permisos. Estos permisos dejan al usuario describir los recursos de Neptune de su cuenta de AWS y proporcionar otra información relacionada, incluida información de red y seguridad de Amazon EC2.

Si crea una política de IAM que sea más restrictiva que el mínimo de permisos necesarios, la consola no funcionará del modo esperado para los usuarios con esa política de IAM. Para asegurarse de que esos usuarios puedan seguir usando la consola de Neptune, asocie también la política administrada `NeptuneReadOnlyAccess` al usuario, según se explica en [Uso de políticas AWS administradas para acceder a las bases de datos de Amazon Neptune](security-iam-access-managed-policies.md).

No es necesario permitir permisos mínimos de consola a los usuarios que solo realizan llamadas a la API de Amazon Neptune AWS CLI o a la misma.

## Asociación de una política de IAM a un usuario de IAM
<a name="iam-auth-policy-attaching"></a>

Para aplicar una política administrada o personalizada, debe asociarla a un usuario de IAM. Para ver un tutorial acerca de este tema, consulte [ Crear y asociar su primera política administrada por el cliente](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_managed-policies.html) en la *Guía del usuario de IAM*.

Mientras realiza el tutorial, puede usar uno de los ejemplos de política mostrados en esta sección como punto de partida y adaptarlo a sus necesidades. Al final del tutorial, tendrá un usuario de IAM con una política asociada que puede utilizar la acción `neptune-db:*`.

**importante**  
Los cambios realizados en una política de IAM pueden tardar hasta 10 minutos en aplicarse a los recursos de Neptune especificados.
Las políticas de IAM aplicadas a un clúster de base de datos de Neptune se aplican a todas las instancias incluidas en dicho clúster.

## Uso de diferentes tipos de políticas de IAM para controlar el acceso a Neptune
<a name="iam-auth-policy"></a>

Para proporcionar acceso a las acciones administrativas de Neptune o a los datos de un clúster de base de datos de Neptune, debe asociar políticas a un rol o usuario de IAM. Para obtener información sobre cómo asociar una política de IAM a un usuario, consulte [Asociación de una política de IAM a un usuario de IAM](#iam-auth-policy-attaching). Para obtener información sobre cómo asociar una política a un rol, consulte [Adición y eliminación de políticas de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html) en la *Guía del usuario de IAM*.

Para el acceso general a Neptune, puede utilizar una de las [políticas administradas](security-iam-access-managed-policies.md) de Neptune. Para que el acceso sea más restringido, puede crear su propia política personalizada utilizando las [acciones administrativas](neptune-iam-admin-actions.md) y [recursos](iam-admin-resources.md) que admite Neptune.

En una política de IAM personalizada, puede utilizar dos tipos diferentes de declaraciones de políticas que controlan los distintos modos de acceso a un clúster de base de datos de Neptune:
+ [Declaraciones de política administrativa](iam-admin-policies.md): las declaraciones de política administrativa proporcionan acceso a la [administración de Neptune APIs](api.md) que se utiliza para crear, configurar y administrar un clúster de base de datos y sus instancias.

  Dado que Neptune comparte funcionalidades con Amazon RDS, las acciones administrativas, los recursos y las claves de condición de las políticas de Neptune utilizan un prefijo `rds:` por diseño.
+ [Declaraciones de políticas de acceso a los datos](iam-data-access-policies.md): las declaraciones de políticas de acceso a los datos utilizan [acciones de acceso a los datos](iam-dp-actions.md), [recursos](iam-data-resources.md) y [claves de condición](iam-data-condition-keys.md#iam-neptune-condition-keys) para controlar el acceso a los datos que contiene un clúster de base de datos.

  Las acciones de acceso a los datos, recursos y claves de condición de Neptune usan un prefijo. `neptune-db:`

## Uso de claves de contexto de condición de IAM en Amazon Neptune
<a name="iam-using-condition-keys"></a>

Puede especificar las condiciones en una declaración de la política de IAM que controle el acceso a Neptune. La declaración de la política solo se aplica si se cumplen las condiciones.

Por ejemplo, es posible que desee que una declaración de política entre en vigor solo después de una fecha específica o que permita el acceso solo cuando la solicitud contenga un valor específico.

Para expresar condiciones, se utilizan claves de condición predefinidas en el elemento [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html) de una declaración de política, junto con [operadores de política de condiciones de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html), como igual o menor que.

Si especifica varios elementos de `Condition` en una instrucción o varias claves en un único elemento de `Condition`, AWS las evalúa mediante una operación `AND` lógica. Si especifica varios valores para una única clave de condición, AWS evalúa la condición mediante una operación lógica`OR`. Se deben cumplir todas las condiciones antes de conceder los permisos de la declaración.

 También puedes utilizar variables de marcador de posición al especificar condiciones. Por ejemplo, puedes conceder un permiso de usuario de IAM para acceder a un recurso solo si está etiquetado con su nombre de usuario de IAM. Para obtener más información, consulte [Elementos de la política de IAM: Variables y etiquetas](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_variables.html) en la *Guía del usuario de IAM*.

El tipo de datos de una clave de condición determina qué operadores de condición puede utilizar para comparar los valores de la solicitud con los valores de la declaración de política. Si utiliza un operador de condición que no es compatible con ese tipo de datos, la coincidencia siempre falla y la declaración de política nunca se aplica.

Neptune admite diferentes conjuntos de claves de condición para las declaraciones de políticas administrativas que para las declaraciones de políticas de acceso a datos:
+ [Claves de condición para las declaraciones de políticas administrativas](iam-admin-condition-keys.md)
+ [Claves de condición para las declaraciones de políticas de acceso a los datos](iam-data-condition-keys.md#iam-neptune-condition-keys)

## Compatibilidad con la política de IAM y las características de control de acceso en Amazon Neptune
<a name="neptune-iam-policy-support"></a>

La siguiente tabla muestra qué características de IAM admite Neptune para las declaraciones de políticas administrativas y las declaraciones de políticas de acceso a datos:


**Características de IAM que puede utilizar con Neptune**  

| Característica de IAM | Administración | Acceso a los datos | 
| --- | --- | --- | 
| [Políticas basadas en identidades](#security_iam_access-manage-id-based-policies) | Sí | Sí | 
| [Políticas basadas en recursos](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_identity-vs-resource.html) | No | No | 
| [Acciones de políticas](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_action.html) | Sí | Sí | 
| [Recursos de políticas](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_resource.html) | Sí | Sí | 
| [Claves de condición global](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html) | Sí | (un subconjunto) | 
| [Claves de condición basadas en etiquetas](iam-admin-condition-keys.md#iam-rds-tag-based-condition-keys) | Sí | No | 
| [Listas de control de acceso (ACLs)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/acls.html) | No | No | 
| [Políticas de control de servicios (SCPs)](#security_iam_access-manage-scp) | Sí | Sí | 
| [Roles vinculados a servicios](security-iam-service-linked-roles.md) | Sí | No | 

## Limitaciones de las políticas de IAM
<a name="iam-policy-limits"></a>

Los cambios realizados en una política de IAM pueden tardar hasta 10 minutos en aplicarse a los recursos de Neptune especificados.

Las políticas de IAM aplicadas a un clúster de base de datos de Neptune se aplican a todas las instancias incluidas en dicho clúster.

Neptune no admite actualmente el control de acceso entre cuentas en el plano de datos. El control de acceso entre cuentas solo se admite cuando se realizan cargas masivas y se utiliza el encadenamiento de roles. Para obtener más información, consulte [el tutorial sobre carga masiva](https://docs.aws.amazon.com//neptune/latest/userguide/bulk-load-tutorial-chain-roles.html#bulk-load-tutorial-chain-cross-account).

# Uso de políticas AWS administradas para acceder a las bases de datos de Amazon Neptune
<a name="security-iam-access-managed-policies"></a>

AWS aborda muchos casos de uso comunes al proporcionar políticas de IAM independientes que son creadas y administradas por. AWS Las políticas administradas conceden los permisos necesarios para casos de uso comunes, lo que le evita tener que investigar los permisos que se necesitan. Para más información, consulte[ Políticas administradas de AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies) en la *Guía del usuario de IAM*.

Las siguientes políticas AWS gestionadas, que puede adjuntar a los usuarios de su cuenta, son para utilizar la administración de Amazon Neptune: APIs
+ **[NeptuneReadOnlyAccess](read-only-access-iam-managed-policy.md)**— Otorga acceso de solo lectura a todos los recursos de Neptune con fines administrativos y de acceso a los datos en la cuenta raíz. AWS 
+ **[NeptuneFullAccess](full-access-iam-managed-policy.md)**— Otorga acceso completo a todos los recursos de Neptune para fines administrativos y de acceso a los datos en la cuenta raíz. AWS Esto se recomienda si necesita acceso completo a Neptune desde el SDK AWS CLI o el SDK, pero no para Consola de administración de AWS acceder.
+ **[NeptuneConsoleFullAccess](console-full-access-iam-managed-policy.md)**— Otorga acceso completo en la AWS cuenta raíz a todas las acciones y recursos administrativos de Neptune, pero no a ninguna acción o recurso de acceso a datos. También incluye permisos adicionales para simplificar el acceso a Neptune desde la consola, incluidos permisos limitados de IAM y Amazon EC2 (VPC).
+ **[NeptuneGraphReadOnlyAccess ](graph-read-only-access-iam-managed-policy.md)**— Proporciona acceso de solo lectura a todos los recursos de Amazon Neptune Analytics junto con permisos de solo lectura para los servicios dependientes
+ **[AWSServiceRoleForNeptuneGraphPolicy](aws-service-role-for-neptune-graph-policy.md)**— Permite que los gráficos de Neptune Analytics publiquen métricas y CloudWatch registros operativos y de uso.

Las políticas y roles de IAM de Neptune conceden cierto acceso a los recursos de Amazon RDS, ya que Neptune comparte tecnología operativa con Amazon RDS para determinadas características de administración. Esto incluye los permisos administrativos de la API, por lo que las acciones administrativas de Neptune tienen un prefijo `rds:`.

## Actualizaciones de las políticas gestionadas por Neptune AWS
<a name="neptune-managed-policy-updates"></a>

La siguiente tabla hace un seguimiento de las actualizaciones de las políticas administradas de Neptune a partir del momento en que Neptune comenzó a realizar el seguimiento de estos cambios:


| Política | Description (Descripción) | Fecha | 
| --- | --- | --- | 
| AWS políticas gestionadas para Amazon Neptune: actualización a las políticas existentes | Las políticas administradas `NeptuneReadOnlyAcess` y `NeptuneFullAccess` incluyen ahora `Sid` (ID de instrucción) como identificador en las instrucciones de la política. | 22-01-2022 | 
| [NeptuneGraphReadOnlyAccess](read-only-access-iam-managed-policy.md)(publicado) | Se ha publicado para brindar acceso de solo lectura a gráficos y recursos de Neptune Analytics. | 29-11-2023 | 
| [AWSServiceRoleForNeptuneGraphPolicy](aws-service-role-for-neptune-graph-policy.md)(publicado) | Se lanzó para permitir el acceso a los gráficos de Neptune Analytics CloudWatch para publicar métricas y registros operativos y de uso. Consulte [Uso de funciones vinculadas a servicios (SLRs) en Neptune Analytics](https://docs.aws.amazon.com/neptune-analytics/latest/userguide/nan-service-linked-roles.html). | 29-11-2020 | 
| [NeptuneConsoleFullAccess](console-full-access-iam-managed-policy.md)(permisos añadidos) | Se han añadido permisos para brindar todo el acceso necesario para interactuar con los gráficos de Neptune Analytics. | 29/11/2023 | 
| [NeptuneFullAccess](full-access-iam-managed-policy.md)(permisos añadidos) | Se agregaron permisos de acceso a los datos y permisos para la nueva base de datos APIs global. | 28 de julio de 2022 | 
| [NeptuneConsoleFullAccess](console-full-access-iam-managed-policy.md)(permisos añadidos) | Se agregaron permisos para la nueva base de datos global APIs. | 21 de julio de 2022 | 
| Se comenzó a realizar un seguimiento de los cambios en Neptune | Neptune comenzó a realizar un seguimiento de los cambios en sus políticas AWS gestionadas. | 2022-07-21 | 

# Concesión `NeptuneReadOnlyAccess` a bases de datos de Amazon Neptune mediante AWS una política gestionada
<a name="read-only-access-iam-managed-policy"></a>

La política [NeptuneReadOnlyAccess](https://console.aws.amazon.com/iam/home#policies/NeptuneReadOnlyAccess)gestionada que aparece a continuación otorga acceso de solo lectura a todas las acciones y recursos de Neptune con fines administrativos y de acceso a los datos.

**nota**  
Esta política se actualizó el 21 de julio de 2022 para incluir permisos de acceso a los datos y permisos administrativos de solo lectura, e incluir permisos para acciones de bases de datos globales.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowReadOnlyPermissionsForRDS",
            "Effect": "Allow",
            "Action": [
                "rds:DescribeAccountAttributes",
                "rds:DescribeCertificates",
                "rds:DescribeDBClusterParameterGroups",
                "rds:DescribeDBClusterParameters",
                "rds:DescribeDBClusterSnapshotAttributes",
                "rds:DescribeDBClusterSnapshots",
                "rds:DescribeDBClusters",
                "rds:DescribeDBEngineVersions",
                "rds:DescribeDBInstances",
                "rds:DescribeDBLogFiles",
                "rds:DescribeDBParameterGroups",
                "rds:DescribeDBParameters",
                "rds:DescribeDBSubnetGroups",
                "rds:DescribeEventCategories",
                "rds:DescribeEventSubscriptions",
                "rds:DescribeEvents",
                "rds:DescribeGlobalClusters",
                "rds:DescribeOrderableDBInstanceOptions",
                "rds:DescribePendingMaintenanceActions",
                "rds:DownloadDBLogFilePortion",
                "rds:ListTagsForResource"
            ],
            "Resource": "*"
        },
        {
            "Sid": "AllowReadOnlyPermissionsForCloudwatch",
            "Effect": "Allow",
            "Action": [
                "cloudwatch:GetMetricStatistics",
                "cloudwatch:ListMetrics"
            ],
            "Resource": "*"
        },
        {
            "Sid": "AllowReadOnlyPermissionsForEC2",
            "Effect": "Allow",
            "Action": [
                "ec2:DescribeAccountAttributes",
                "ec2:DescribeAvailabilityZones",
                "ec2:DescribeInternetGateways",
                "ec2:DescribeSecurityGroups",
                "ec2:DescribeSubnets",
                "ec2:DescribeVpcAttribute",
                "ec2:DescribeVpcs"
            ],
            "Resource": "*"
        },
        {
            "Sid": "AllowReadOnlyPermissionsForKMS",
            "Effect": "Allow",
            "Action": [
                "kms:ListKeys",
                "kms:ListRetirableGrants",
                "kms:ListAliases",
                "kms:ListKeyPolicies"
            ],
            "Resource": "*"
        },
        {
            "Sid": "AllowReadOnlyPermissionsForLogs",
            "Effect": "Allow",
            "Action": [
                "logs:DescribeLogStreams",
                "logs:GetLogEvents"
            ],
            "Resource": [
                "arn:aws:logs:*:*:log-group:/aws/rds/*:log-stream:*",
                "arn:aws:logs:*:*:log-group:/aws/neptune/*:log-stream:*"
            ]
        },
        {
            "Sid": "AllowReadOnlyPermissionsForNeptuneDB",
            "Effect": "Allow",
            "Action": [
                "neptune-db:Read*",
                "neptune-db:Get*",
                "neptune-db:List*"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}
```

------

# Concesión `NeptuneFullAccess` a bases de datos de Amazon Neptune mediante AWS una política gestionada
<a name="full-access-iam-managed-policy"></a>

La siguiente política [NeptuneFullAccess](https://console.aws.amazon.com/iam/home#policies/NeptuneFullAccess)gestionada otorga acceso total a todas las acciones y recursos de Neptune con fines administrativos y de acceso a los datos. Se recomienda si necesita acceso total desde AWS CLI o desde un SDK, pero no desde. Consola de administración de AWS

**nota**  
Esta política se actualizó el 21 de julio de 2022 para incluir todos los permisos de acceso a los datos, así como los permisos administrativos completos, y para incluir permisos para acciones en bases de datos globales.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowNeptuneCreate",
            "Effect": "Allow",
            "Action": [
                "rds:CreateDBCluster",
                "rds:CreateDBInstance"
            ],
            "Resource": [
                "arn:aws:rds:*:*:*"
            ],
            "Condition": {
                "StringEquals": {
                    "rds:DatabaseEngine": [
                        "graphdb",
                        "neptune"
                    ]
                }
            }
        },
        {
            "Sid": "AllowManagementPermissionsForRDS",
            "Effect": "Allow",
            "Action": [
                "rds:AddRoleToDBCluster",
                "rds:AddSourceIdentifierToSubscription",
                "rds:AddTagsToResource",
                "rds:ApplyPendingMaintenanceAction",
                "rds:CopyDBClusterParameterGroup",
                "rds:CopyDBClusterSnapshot",
                "rds:CopyDBParameterGroup",
                "rds:CreateDBClusterEndpoint",
                "rds:CreateDBClusterParameterGroup",
                "rds:CreateDBClusterSnapshot",
                "rds:CreateDBParameterGroup",
                "rds:CreateDBSubnetGroup",
                "rds:CreateEventSubscription",
                "rds:CreateGlobalCluster",
                "rds:DeleteDBCluster",
                "rds:DeleteDBClusterEndpoint",
                "rds:DeleteDBClusterParameterGroup",
                "rds:DeleteDBClusterSnapshot",
                "rds:DeleteDBInstance",
                "rds:DeleteDBParameterGroup",
                "rds:DeleteDBSubnetGroup",
                "rds:DeleteEventSubscription",
                "rds:DeleteGlobalCluster",
                "rds:DescribeDBClusterEndpoints",
                "rds:DescribeAccountAttributes",
                "rds:DescribeCertificates",
                "rds:DescribeDBClusterParameterGroups",
                "rds:DescribeDBClusterParameters",
                "rds:DescribeDBClusterSnapshotAttributes",
                "rds:DescribeDBClusterSnapshots",
                "rds:DescribeDBClusters",
                "rds:DescribeDBEngineVersions",
                "rds:DescribeDBInstances",
                "rds:DescribeDBLogFiles",
                "rds:DescribeDBParameterGroups",
                "rds:DescribeDBParameters",
                "rds:DescribeDBSecurityGroups",
                "rds:DescribeDBSubnetGroups",
                "rds:DescribeEngineDefaultClusterParameters",
                "rds:DescribeEngineDefaultParameters",
                "rds:DescribeEventCategories",
                "rds:DescribeEventSubscriptions",
                "rds:DescribeEvents",
                "rds:DescribeGlobalClusters",
                "rds:DescribeOptionGroups",
                "rds:DescribeOrderableDBInstanceOptions",
                "rds:DescribePendingMaintenanceActions",
                "rds:DescribeValidDBInstanceModifications",
                "rds:DownloadDBLogFilePortion",
                "rds:FailoverDBCluster",
                "rds:FailoverGlobalCluster",
                "rds:ListTagsForResource",
                "rds:ModifyDBCluster",
                "rds:ModifyDBClusterEndpoint",
                "rds:ModifyDBClusterParameterGroup",
                "rds:ModifyDBClusterSnapshotAttribute",
                "rds:ModifyDBInstance",
                "rds:ModifyDBParameterGroup",
                "rds:ModifyDBSubnetGroup",
                "rds:ModifyEventSubscription",
                "rds:ModifyGlobalCluster",
                "rds:PromoteReadReplicaDBCluster",
                "rds:RebootDBInstance",
                "rds:RemoveFromGlobalCluster",
                "rds:RemoveRoleFromDBCluster",
                "rds:RemoveSourceIdentifierFromSubscription",
                "rds:RemoveTagsFromResource",
                "rds:ResetDBClusterParameterGroup",
                "rds:ResetDBParameterGroup",
                "rds:RestoreDBClusterFromSnapshot",
                "rds:RestoreDBClusterToPointInTime",
                "rds:StartDBCluster",
                "rds:StopDBCluster"
            ],
            "Resource": [
                "*"
            ]
        },
        {
            "Sid": "AllowOtherDepedentPermissions",
            "Effect": "Allow",
            "Action": [
                "cloudwatch:GetMetricStatistics",
                "cloudwatch:ListMetrics",
                "ec2:DescribeAccountAttributes",
                "ec2:DescribeAvailabilityZones",
                "ec2:DescribeSecurityGroups",
                "ec2:DescribeSubnets",
                "ec2:DescribeVpcAttribute",
                "ec2:DescribeVpcs",
                "kms:ListAliases",
                "kms:ListKeyPolicies",
                "kms:ListKeys",
                "kms:ListRetirableGrants",
                "logs:DescribeLogStreams",
                "logs:GetLogEvents",
                "sns:ListSubscriptions",
                "sns:ListTopics",
                "sns:Publish"
            ],
            "Resource": [
                "*"
            ]
        },
        {
            "Sid": "AllowPassRoleForNeptune",
            "Effect": "Allow",
            "Action": "iam:PassRole",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "iam:passedToService": "rds.amazonaws.com"
                }
            }
        },
        {
            "Sid": "AllowCreateSLRForNeptune",
            "Effect": "Allow",
            "Action": "iam:CreateServiceLinkedRole",
            "Resource": "arn:aws:iam::*:role/aws-service-role/rds.amazonaws.com/AWSServiceRoleForRDS",
            "Condition": {
                "StringLike": {
                    "iam:AWSServiceName": "rds.amazonaws.com"
                }
            }
        },
        {
            "Sid": "AllowDataAccessForNeptune",
            "Effect": "Allow",
            "Action": [
                "neptune-db:*"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}
```

------

# Concesión `NeptuneConsoleFullAccess` mediante una política AWS gestionada
<a name="console-full-access-iam-managed-policy"></a>

La siguiente política [NeptuneConsoleFullAccess](https://console.aws.amazon.com/iam/home#policies/NeptuneConsoleFullAccess)gestionada otorga acceso total a todas las acciones y recursos de Neptune con fines administrativos, pero no con fines de acceso a los datos. También incluye permisos adicionales para simplificar el acceso a Neptune desde la consola, incluidos permisos limitados de IAM y Amazon EC2 (VPC).

**nota**  
Esta política se actualizó el 29 de noviembre de 2023 para incluir los permisos necesarios para interactuar con los gráficos de Neptune Analytics.  
Se actualizó el 21 de julio de 2022 para incluir permisos para acciones en bases de datos globales.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AllowNeptuneCreate",
      "Effect": "Allow",
      "Action": [
        "rds:CreateDBCluster",
        "rds:CreateDBInstance"
      ],
      "Resource": [
        "arn:aws:rds:*:*:*"
      ],
      "Condition": {
        "StringEquals": {
          "rds:DatabaseEngine": [
            "graphdb",
            "neptune"
          ]
        }
      }
    },
    {
      "Sid": "AllowManagementPermissionsForRDS",
      "Action": [
        "rds:AddRoleToDBCluster",
        "rds:AddSourceIdentifierToSubscription",
        "rds:AddTagsToResource",
        "rds:ApplyPendingMaintenanceAction",
        "rds:CopyDBClusterParameterGroup",
        "rds:CopyDBClusterSnapshot",
        "rds:CopyDBParameterGroup",
        "rds:CreateDBClusterParameterGroup",
        "rds:CreateDBClusterSnapshot",
        "rds:CreateDBParameterGroup",
        "rds:CreateDBSubnetGroup",
        "rds:CreateEventSubscription",
        "rds:DeleteDBCluster",
        "rds:DeleteDBClusterParameterGroup",
        "rds:DeleteDBClusterSnapshot",
        "rds:DeleteDBInstance",
        "rds:DeleteDBParameterGroup",
        "rds:DeleteDBSubnetGroup",
        "rds:DeleteEventSubscription",
        "rds:DescribeAccountAttributes",
        "rds:DescribeCertificates",
        "rds:DescribeDBClusterParameterGroups",
        "rds:DescribeDBClusterParameters",
        "rds:DescribeDBClusterSnapshotAttributes",
        "rds:DescribeDBClusterSnapshots",
        "rds:DescribeDBClusters",
        "rds:DescribeDBEngineVersions",
        "rds:DescribeDBInstances",
        "rds:DescribeDBLogFiles",
        "rds:DescribeDBParameterGroups",
        "rds:DescribeDBParameters",
        "rds:DescribeDBSecurityGroups",
        "rds:DescribeDBSubnetGroups",
        "rds:DescribeEngineDefaultClusterParameters",
        "rds:DescribeEngineDefaultParameters",
        "rds:DescribeEventCategories",
        "rds:DescribeEventSubscriptions",
        "rds:DescribeEvents",
        "rds:DescribeOptionGroups",
        "rds:DescribeOrderableDBInstanceOptions",
        "rds:DescribePendingMaintenanceActions",
        "rds:DescribeValidDBInstanceModifications",
        "rds:DownloadDBLogFilePortion",
        "rds:FailoverDBCluster",
        "rds:ListTagsForResource",
        "rds:ModifyDBCluster",
        "rds:ModifyDBClusterParameterGroup",
        "rds:ModifyDBClusterSnapshotAttribute",
        "rds:ModifyDBInstance",
        "rds:ModifyDBParameterGroup",
        "rds:ModifyDBSubnetGroup",
        "rds:ModifyEventSubscription",
        "rds:PromoteReadReplicaDBCluster",
        "rds:RebootDBInstance",
        "rds:RemoveRoleFromDBCluster",
        "rds:RemoveSourceIdentifierFromSubscription",
        "rds:RemoveTagsFromResource",
        "rds:ResetDBClusterParameterGroup",
        "rds:ResetDBParameterGroup",
        "rds:RestoreDBClusterFromSnapshot",
        "rds:RestoreDBClusterToPointInTime"
      ],
      "Effect": "Allow",
      "Resource": [
        "*"
      ]
    },
    {
      "Sid": "AllowOtherDepedentPermissions",
      "Action": [
        "cloudwatch:GetMetricStatistics",
        "cloudwatch:ListMetrics",
        "ec2:AllocateAddress",
        "ec2:AssignIpv6Addresses",
        "ec2:AssignPrivateIpAddresses",
        "ec2:AssociateAddress",
        "ec2:AssociateRouteTable",
        "ec2:AssociateSubnetCidrBlock",
        "ec2:AssociateVpcCidrBlock",
        "ec2:AttachInternetGateway",
        "ec2:AttachNetworkInterface",
        "ec2:CreateCustomerGateway",
        "ec2:CreateDefaultSubnet",
        "ec2:CreateDefaultVpc",
        "ec2:CreateInternetGateway",
        "ec2:CreateNatGateway",
        "ec2:CreateNetworkInterface",
        "ec2:CreateRoute",
        "ec2:CreateRouteTable",
        "ec2:CreateSecurityGroup",
        "ec2:CreateSubnet",
        "ec2:CreateVpc",
        "ec2:CreateVpcEndpoint",
        "ec2:CreateVpcEndpoint",
        "ec2:DescribeAccountAttributes",
        "ec2:DescribeAccountAttributes",
        "ec2:DescribeAddresses",
        "ec2:DescribeAvailabilityZones",
        "ec2:DescribeAvailabilityZones",
        "ec2:DescribeCustomerGateways",
        "ec2:DescribeInstances",
        "ec2:DescribeNatGateways",
        "ec2:DescribeNetworkInterfaces",
        "ec2:DescribePrefixLists",
        "ec2:DescribeRouteTables",
        "ec2:DescribeSecurityGroupReferences",
        "ec2:DescribeSecurityGroups",
        "ec2:DescribeSecurityGroups",
        "ec2:DescribeSubnets",
        "ec2:DescribeSubnets",
        "ec2:DescribeVpcAttribute",
        "ec2:DescribeVpcAttribute",
        "ec2:DescribeVpcEndpoints",
        "ec2:DescribeVpcs",
        "ec2:DescribeVpcs",
        "ec2:ModifyNetworkInterfaceAttribute",
        "ec2:ModifySubnetAttribute",
        "ec2:ModifyVpcAttribute",
        "ec2:ModifyVpcEndpoint",
        "iam:ListRoles",
        "kms:ListAliases",
        "kms:ListKeyPolicies",
        "kms:ListKeys",
        "kms:ListRetirableGrants",
        "logs:DescribeLogStreams",
        "logs:GetLogEvents",
        "sns:ListSubscriptions",
        "sns:ListTopics",
        "sns:Publish"
      ],
      "Effect": "Allow",
      "Resource": [
        "*"
      ]
    },
    {
      "Sid": "AllowPassRoleForNeptune",
      "Action": "iam:PassRole",
      "Effect": "Allow",
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "iam:passedToService": "rds.amazonaws.com"
        }
      }
    },
    {
      "Sid": "AllowCreateSLRForNeptune",
      "Action": "iam:CreateServiceLinkedRole",
      "Effect": "Allow",
      "Resource": "arn:aws:iam::*:role/aws-service-role/rds.amazonaws.com/AWSServiceRoleForRDS",
      "Condition": {
        "StringLike": {
          "iam:AWSServiceName": "rds.amazonaws.com"
        }
      }
    },
    {
      "Sid": "AllowManagementPermissionsForNeptuneAnalytics",
      "Effect": "Allow",
      "Action": [
        "neptune-graph:CreateGraph",
        "neptune-graph:DeleteGraph",
        "neptune-graph:GetGraph",
        "neptune-graph:ListGraphs",
        "neptune-graph:UpdateGraph",
        "neptune-graph:ResetGraph",
        "neptune-graph:CreateGraphSnapshot",
        "neptune-graph:DeleteGraphSnapshot",
        "neptune-graph:GetGraphSnapshot",
        "neptune-graph:ListGraphSnapshots",
        "neptune-graph:RestoreGraphFromSnapshot",
        "neptune-graph:CreatePrivateGraphEndpoint",
        "neptune-graph:GetPrivateGraphEndpoint",
        "neptune-graph:ListPrivateGraphEndpoints",
        "neptune-graph:DeletePrivateGraphEndpoint",
        "neptune-graph:CreateGraphUsingImportTask",
        "neptune-graph:GetImportTask",
        "neptune-graph:ListImportTasks",
        "neptune-graph:CancelImportTask"
      ],
      "Resource": [
        "arn:aws:neptune-graph:*:*:*"
      ]
    },
    {
      "Sid": "AllowPassRoleForNeptuneAnalytics",
      "Effect": "Allow",
      "Action": "iam:PassRole",
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "iam:passedToService": "neptune-graph.amazonaws.com"
        }
      }
    },
    {
      "Sid": "AllowCreateSLRForNeptuneAnalytics",
      "Effect": "Allow",
      "Action": "iam:CreateServiceLinkedRole",
      "Resource": "arn:aws:iam::*:role/aws-service-role/neptune-graph.amazonaws.com/AWSServiceRoleForNeptuneGraph",
      "Condition": {
        "StringLike": {
          "iam:AWSServiceName": "neptune-graph.amazonaws.com"
        }
      }
    }
  ]
}
```

------

# La concesión se realiza `NeptuneGraphReadOnlyAccess` mediante AWS una política gestionada
<a name="graph-read-only-access-iam-managed-policy"></a>

La siguiente política [NeptuneGraphReadOnlyAccess](https://console.aws.amazon.com/iam/home#policies/NeptuneGraphReadOnlyAccess)gestionada proporciona acceso de solo lectura a todos los recursos de Amazon Neptune Analytics junto con permisos de solo lectura para los servicios dependientes.

Esta política incluye permisos para hacer lo siguiente:
+ **Para Amazon EC2**: recupere información sobre subredes VPCs, grupos de seguridad y zonas de disponibilidad.
+ **Para AWS KMS**: recuperar información sobre las claves y los alias de KMS.
+ **Para CloudWatch**: recuperar información sobre CloudWatch las métricas.
+ **Para CloudWatch registros**: recupera información sobre eventos y secuencias de CloudWatch registros.

**nota**  
Esta política se publicó el 29 de noviembre de 2023.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AllowReadOnlyPermissionsForNeptuneGraph",
      "Effect": "Allow",
      "Action": [
        "neptune-graph:Get*",
        "neptune-graph:List*",
        "neptune-graph:Read*"
      ],
      "Resource": "*"
    },
    {
      "Sid": "AllowReadOnlyPermissionsForEC2",
      "Effect": "Allow",
      "Action": [
        "ec2:DescribeVpcEndpoints",
        "ec2:DescribeVpcAttribute",
        "ec2:DescribeSecurityGroups",
        "ec2:DescribeSubnets",
        "ec2:DescribeVpcs",
        "ec2:DescribeAvailabilityZones"
      ],
      "Resource": "*"
    },
    {
      "Sid": "AllowReadOnlyPermissionsForKMS",
      "Effect": "Allow",
      "Action": [
        "kms:ListKeys",
        "kms:ListAliases"
      ],
      "Resource": "*"
    },
    {
      "Sid": "AllowReadOnlyPermissionsForCloudwatch",
      "Effect": "Allow",
      "Action": [
        "cloudwatch:GetMetricData",
        "cloudwatch:ListMetrics",
        "cloudwatch:GetMetricStatistics"
      ],
      "Resource": "*"
    },
    {
      "Sid": "AllowReadOnlyPermissionsForLogs",
      "Effect": "Allow",
      "Action": [
        "logs:DescribeLogStreams",
        "logs:GetLogEvents"
      ],
      "Resource": [
        "arn:aws:logs:*:*:log-group:/aws/neptune/*:log-stream:*"
      ]
    }
  ]
}
```

------

# Concesión de acceso al gráfico de Neptune mediante `AWSServiceRoleForNeptuneGraphPolicy`
<a name="aws-service-role-for-neptune-graph-policy"></a>

La política [AWSServiceRoleForNeptuneGraphPolicy](https://console.aws.amazon.com/iam/home#policies/AWSServiceRoleForNeptuneGraphPolicy)administrada que aparece a continuación permite acceder a los gráficos CloudWatch para publicar registros y métricas operativas y de uso. Consulte [nan-service-linked-roles](https://docs.aws.amazon.com/neptune-analytics/latest/userguide/nan-service-linked-roles.html).

**nota**  
Esta política se publicó el 29 de noviembre de 2023.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "GraphMetrics",
      "Effect": "Allow",
      "Action": [
        "cloudwatch:PutMetricData"
      ],
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "cloudwatch:namespace": [
            "AWS/Neptune",
            "AWS/Usage"
          ]
        }
      }
    },
    {
      "Sid": "GraphLogGroup",
      "Effect": "Allow",
      "Action": [
        "logs:CreateLogGroup"
      ],
      "Resource": [
        "arn:aws:logs:*:*:log-group:/aws/neptune/*"
      ],
      "Condition": {
        "StringEquals": {
          "aws:ResourceAccount": "${aws:PrincipalAccount}"
        }
      }
    },
    {
      "Sid": "GraphLogEvents",
      "Effect": "Allow",
      "Action": [
        "logs:CreateLogStream",
        "logs:PutLogEvents",
        "logs:DescribeLogStreams"
      ],
      "Resource": [
        "arn:aws:logs:*:*:log-group:/aws/neptune/*:log-stream:*"
      ],
      "Condition": {
        "StringEquals": {
          "aws:ResourceAccount": "${aws:PrincipalAccount}"
        }
      }
    }
  ]
}
```

------



# Personalización del acceso a los recursos de Amazon Neptune mediante claves de contexto de condición de IAM
<a name="iam-condition-keys"></a>

Puede especificar condiciones en las políticas de IAM que controlan el acceso a las acciones de administración y recursos de Neptune. La declaración de la política solo se aplica si se cumplen las condiciones.

Por ejemplo, es posible que desee que una declaración de política entre en vigor solo después de una fecha específica o que permita el acceso solo cuando la solicitud a la API contenga un valor específico.

Para expresar condiciones, se utilizan claves de condición predefinidas en el elemento [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html) de una declaración de política, junto con [operadores de política de condiciones de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html), como igual o menor que.

Si especifica varios elementos de `Condition` en una instrucción o varias claves en un único elemento de `Condition`, AWS las evalúa mediante una operación `AND` lógica. Si especifica varios valores para una sola clave de condición, AWS evalúa la condición mediante una `OR` operación lógica. Se deben cumplir todas las condiciones antes de conceder los permisos de la declaración.

 También puedes utilizar variables de marcador de posición al especificar condiciones. Por ejemplo, puedes conceder un permiso de usuario de IAM para acceder a un recurso solo si está etiquetado con su nombre de usuario de IAM. Para obtener más información, consulte [Elementos de la política de IAM: Variables y etiquetas](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_variables.html) en la *Guía del usuario de IAM*.

El tipo de datos de una clave de condición determina qué operadores de condición puede utilizar para comparar los valores de la solicitud con los valores de la declaración de política. Si utiliza un operador de condición que no es compatible con ese tipo de datos, la coincidencia siempre falla y la declaración de política nunca se aplica. 

**Claves de condición de IAM para las declaraciones de políticas administrativas de Neptune**
+ [Claves de condición globales](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html): puede utilizar la mayoría de las claves de condición AWS globales en las declaraciones de política administrativa de Neptune.
+ [Claves de condición específicas del servicio](iam-admin-condition-keys.md): son claves que se definen para servicios específicos. AWS Las que Neptune admite para las declaraciones de políticas administrativas se enumeran en [Claves de condición de IAM para administrar Amazon Neptune](iam-admin-condition-keys.md).

**Claves de condición de IAM para las declaraciones de políticas de acceso a datos de Neptune**
+ [Claves de condición globales](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html): el subconjunto de estas claves que admite Neptune en las declaraciones de políticas de acceso a los datos aparece en [AWS claves de contexto de condiciones globales respaldadas por Neptune en las declaraciones de política de acceso a datos](iam-data-condition-keys.md#iam-data-global-condition-keys).
+ Las claves de condición específicas del servicio que Neptune define para las declaraciones de políticas de acceso a los datos se enumeran en [Claves de condición](iam-data-condition-keys.md).

# Creación de instrucciones de políticas de IAM personalizadas para administrar Amazon Neptune
<a name="iam-admin-policies"></a>

Las declaraciones de políticas administrativas le permiten controlar lo que un usuario de IAM puede hacer para administrar una base de datos de Neptune.

Una declaración de política administrativa de Neptune otorga acceso a una o más [acciones administrativas](neptune-iam-admin-actions.md) y [recursos administrativos](iam-admin-resources.md) que admite Neptune. También puede utilizar [Claves de condición](iam-admin-condition-keys.md) para hacer que los permisos administrativos sean más específicos.

**nota**  
Dado que Neptune comparte funcionalidades con Amazon RDS, las acciones administrativas, los recursos y las claves de condición específicas del servicio en las declaraciones de políticas administrativa sutilizan el `rds:` prefijo por diseño.

**Topics**
+ [Acciones de IAM para administrar Amazon Neptune](neptune-iam-admin-actions.md)
+ [Tipos de recursos de IAM para administrar Amazon Neptune](iam-admin-resources.md)
+ [Claves de condición de IAM para administrar Amazon Neptune](iam-admin-condition-keys.md)
+ [Creación de instrucciones de políticas administrativas de IAM para Amazon Neptune](iam-admin-policy-examples.md)

# Acciones de IAM para administrar Amazon Neptune
<a name="neptune-iam-admin-actions"></a>

Puede utilizar las acciones administrativas que se enumeran a continuación en el `Action` elemento de una declaración de política de IAM para controlar el acceso a la administración de [ APIsNeptune](api.md). Cuando utiliza una acción en una política, normalmente permite o deniega el acceso a la operación de la API o comandos de la CLI con el mismo nombre. No obstante, en algunos casos, una sola acción controla el acceso a más de una operación. Asimismo, algunas operaciones requieren varias acciones diferentes.

El campo `Resource type` de la siguiente lista indica si cada acción admite permisos de nivel de recurso. Si no hay ningún valor en este campo, debe especificar todos los recursos ("\$1") en el elemento `Resource` de la declaración de la política. Si la columna incluye un tipo de recurso, puede especificar un ARN de recurso en una instrucción con dicha acción. Los tipos de recursos administrativos de Neptune se muestran en [esta página](iam-admin-resources.md).

Los recursos necesarios se indican en la lista siguiente con un asterisco (\$1). Si especifica un ARN de permiso de recursos en una instrucción mediante esta acción, deberá ser de este tipo. Algunas acciones admiten varios tipos de recursos. Si un tipo de recurso es opcional (es decir, no está marcado con un asterisco), no es necesario que lo incluya.

Para obtener más información sobre los campos que se muestran aquí, consulte la [tabla de acciones](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_actions-resources-contextkeys.html#actions_table) de la [Guía del usuario de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/).

## Varillas: AddRoleTo DBCluster
<a name="neptune-iam-admin-actions-AddRoleToDBCluster"></a>

`AddRoleToDBCluster` asocia un rol de IAM a un clúster de base de datos de Neptune.

*Nivel de acceso:* `Write`.

*Acciones dependientes:* `iam:PassRole`.

*Tipo de recurso:* [clúster](iam-admin-resources.md#neptune-cluster-resource) (obligatorio).

## Varillas: AddSourceIdentifierToSubscription
<a name="neptune-iam-admin-actions-AddSourceIdentifierToSubscription"></a>

`AddSourceIdentifierToSubscription` añade un identificador de origen a una suscripción de notificación de eventos existente de Neptune.

*Nivel de acceso:* `Write`.

*Tipo de recurso:* [es](iam-admin-resources.md#neptune-es-resource) (obligatorio)

## Varillas: AddTagsToResource
<a name="neptune-iam-admin-actions-AddTagsToResource"></a>

`AddTagsToResource` asocia un rol de IAM a un clúster de base de datos de Neptune.

*Nivel de acceso:* `Write`.

*Tipos de recursos:*
+ [db](iam-admin-resources.md#neptune-db-resource)
+ [es](iam-admin-resources.md#neptune-es-resource)
+ [pg](iam-admin-resources.md#neptune-pg-resource)
+ [cluster-snapshot](iam-admin-resources.md#neptune-cluster-snapshot-resource)
+ [subgrp](iam-admin-resources.md#neptune-subgrp-resource)

*Claves de condición:*
+ [leyes:/RequestTag*tag-key*](iam-admin-condition-keys.md#admin-aws_RequestTag)
+ [leyes: TagKeys](iam-admin-condition-keys.md#admin-aws_TagKeys)

## Ards: ApplyPendingMaintenanceAction
<a name="neptune-iam-admin-actions-ApplyPendingMaintenanceAction"></a>

`ApplyPendingMaintenanceAction` aplica una acción de mantenimiento pendiente a un recurso.

*Nivel de acceso:* `Write`.

*Tipo de recurso:* [db](iam-admin-resources.md#neptune-db-resource) (obligatorio).

## RDS: copiar DBCluster ParameterGroup
<a name="neptune-iam-admin-actions-CopyDBClusterParameterGroup"></a>

`CopyDBClusterParameterGroup` copia el grupo de parámetros de clúster de base de datos especificado.

*Nivel de acceso:* `Write`.

*Tipo de recurso:* [cluster-pg](iam-admin-resources.md#neptune-cluster-pg-resource) (obligatorio).

## RDS: DBCluster Copy Snapshot
<a name="neptune-iam-admin-actions-CopyDBClusterSnapshot"></a>

`CopyDBClusterSnapshot` copia una instantánea de un clúster de base de datos.

*Nivel de acceso:* `Write`.

*Tipo de recurso:* [cluster-snapshot](iam-admin-resources.md#neptune-cluster-snapshot-resource) (obligatorio).

## RDS: grupo de DBParameter copias
<a name="neptune-iam-admin-actions-CopyDBParameterGroup"></a>

`CopyDBParameterGroup` copia el grupo de parámetros de base de datos especificado.

*Nivel de acceso:* `Write`.

*Tipo de recurso:* [pg](iam-admin-resources.md#neptune-pg-resource) (obligatorio).

## RDS: Crear DBCluster
<a name="neptune-iam-admin-actions-CreateDBCluster"></a>

`CreateDBCluster` crea un nuevo clúster de base de datos de Neptune.

*Nivel de acceso:* `Tagging`.

*Acciones dependientes:* `iam:PassRole`.

*Tipos de recursos:*
+ [cluster](iam-admin-resources.md#neptune-cluster-resource) (obligatorio).
+ [cluster-pg](iam-admin-resources.md#neptune-cluster-pg-resource) (obligatorio).
+ [subgrp](iam-admin-resources.md#neptune-subgrp-resource) (obligatorio).

*Claves de condición:*
+ [fue:/RequestTag*tag-key*](iam-admin-condition-keys.md#admin-aws_RequestTag)
+ [leyes: TagKeys](iam-admin-condition-keys.md#admin-aws_TagKeys)
+ [neptune-rds\$1 DatabaseEngine](iam-admin-condition-keys.md#admin-rds_DatabaseEngine)

## RDS: crear DBCluster ParameterGroup
<a name="neptune-iam-admin-actions-CreateDBClusterParameterGroup"></a>

`CreateDBClusterParameterGroup` crea un nuevo grupo de parámetros del clúster de base de datos.

*Nivel de acceso:* `Tagging`.

*Tipo de recurso:* [cluster-pg](iam-admin-resources.md#neptune-cluster-pg-resource) (obligatorio).

*Claves de condición:*
+ [fue:/RequestTag*tag-key*](iam-admin-condition-keys.md#admin-aws_RequestTag)
+ [leyes: TagKeys](iam-admin-condition-keys.md#admin-aws_TagKeys)

## RDSDBCluster: crear una instantánea
<a name="neptune-iam-admin-actions-CreateDBClusterSnapshot"></a>

`CreateDBClusterSnapshot` crea una instantánea de un clúster de base de datos.

*Nivel de acceso:* `Tagging`.

*Tipos de recursos:*
+ [cluster](iam-admin-resources.md#neptune-cluster-resource) (obligatorio).
+ [cluster-snapshot](iam-admin-resources.md#neptune-cluster-snapshot-resource) (obligatorio).

*Claves de condición:*
+ [fue:/RequestTag*tag-key*](iam-admin-condition-keys.md#admin-aws_RequestTag)
+ [leyes: TagKeys](iam-admin-condition-keys.md#admin-aws_TagKeys)

## RDS: crear DBInstance
<a name="neptune-iam-admin-actions-CreateDBInstance"></a>

`CreateDBInstance` crea una nueva instancia de base de datos.

*Nivel de acceso:* `Tagging`.

*Acciones dependientes:* `iam:PassRole`.

*Tipos de recursos:*
+ [db](iam-admin-resources.md#neptune-db-resource) (obligatorio).
+ [pg](iam-admin-resources.md#neptune-pg-resource) (obligatorio).
+ [subgrp](iam-admin-resources.md#neptune-subgrp-resource) (obligatorio).

*Claves de condición:*
+ [fue:/RequestTag*tag-key*](iam-admin-condition-keys.md#admin-aws_RequestTag)
+ [leyes: TagKeys](iam-admin-condition-keys.md#admin-aws_TagKeys)

## RDSDBParameter: crear grupo
<a name="neptune-iam-admin-actions-CreateDBParameterGroup"></a>

`CreateDBParameterGroup` crea un nuevo grupo de parámetros de base de datos.

*Nivel de acceso:* `Tagging`.

*Tipo de recurso:* [pg](iam-admin-resources.md#neptune-pg-resource) (obligatorio).

*Claves de condición:*
+ [fue:/RequestTag*tag-key*](iam-admin-condition-keys.md#admin-aws_RequestTag)
+ [leyes: TagKeys](iam-admin-condition-keys.md#admin-aws_TagKeys)

## RDSDBSubnet: crear grupo
<a name="neptune-iam-admin-actions-CreateDBSubnetGroup"></a>

`CreateDBSubnetGroup` crea un nuevo grupo de subred de base de datos.

*Nivel de acceso:* `Tagging`.

*Tipo de recurso:* [subgrp](iam-admin-resources.md#neptune-subgrp-resource) (obligatorio).

*Claves de condición:*
+ [fue:/RequestTag*tag-key*](iam-admin-condition-keys.md#admin-aws_RequestTag)
+ [leyes: TagKeys](iam-admin-condition-keys.md#admin-aws_TagKeys)

## Ards: CreateEventSubscription
<a name="neptune-iam-admin-actions-CreateEventSubscription"></a>

`CreateEventSubscription` crea una suscripción de notificación de eventos de Neptune.

*Nivel de acceso:* `Tagging`.

*Tipo de recurso:* [es](iam-admin-resources.md#neptune-es-resource) (obligatorio)

*Claves de condición:*
+ [leyes:/RequestTag*tag-key*](iam-admin-condition-keys.md#admin-aws_RequestTag)
+ [leyes: TagKeys](iam-admin-condition-keys.md#admin-aws_TagKeys)

## RDS: eliminar DBCluster
<a name="neptune-iam-admin-actions-DeleteDBCluster"></a>

`DeleteDBCluster` elimina un clúster de base de datos de Neptune existente.

*Nivel de acceso:* `Write`.

*Tipos de recursos:*
+ [cluster](iam-admin-resources.md#neptune-cluster-resource) (obligatorio).
+ [cluster-snapshot](iam-admin-resources.md#neptune-cluster-snapshot-resource) (obligatorio).

## RDS: eliminar DBCluster ParameterGroup
<a name="neptune-iam-admin-actions-DeleteDBClusterParameterGroup"></a>

`DeleteDBClusterParameterGroup` elimina un determinado grupo de parámetros del clúster de base de datos.

*Nivel de acceso:* `Write`.

*Tipo de recurso:* [cluster-pg](iam-admin-resources.md#neptune-cluster-pg-resource) (obligatorio).

## RDS: eliminar instantánea DBCluster
<a name="neptune-iam-admin-actions-DeleteDBClusterSnapshot"></a>

`DeleteDBClusterSnapshot` elimina una instantánea de clúster de base de datos.

*Nivel de acceso:* `Write`.

*Tipo de recurso:* [cluster-snapshot](iam-admin-resources.md#neptune-cluster-snapshot-resource) (obligatorio).

## RDS: eliminar DBInstance
<a name="neptune-iam-admin-actions-DeleteDBInstance"></a>

`DeleteDBInstance` elimina una instancia de base de datos especificada.

*Nivel de acceso:* `Write`.

*Tipo de recurso:* [db](iam-admin-resources.md#neptune-db-resource) (obligatorio).

## RDS: eliminar grupo DBParameter
<a name="neptune-iam-admin-actions-DeleteDBParameterGroup"></a>

`DeleteDBParameterGroup`elimina un grupo especificado. DBParameter

*Nivel de acceso:* `Write`.

*Tipo de recurso:* [pg](iam-admin-resources.md#neptune-pg-resource) (obligatorio).

## DBSubnetRDS: eliminar grupo
<a name="neptune-iam-admin-actions-DeleteDBSubnetGroup"></a>

`DeleteDBSubnetGroup` elimina un grupo de subred de base de datos.

*Nivel de acceso:* `Write`.

*Tipo de recurso:* [subgrp](iam-admin-resources.md#neptune-subgrp-resource) (obligatorio).

## RDS: DeleteEventSubscription
<a name="neptune-iam-admin-actions-DeleteEventSubscription"></a>

`DeleteEventSubscription` elimina una suscripción a notificaciones de eventos.

*Nivel de acceso:* `Write`.

*Tipo de recurso:* [es](iam-admin-resources.md#neptune-es-resource) (obligatorio)

## RDS: describe DBCluster ParameterGroups
<a name="neptune-iam-admin-actions-DescribeDBClusterParameterGroups"></a>

`DescribeDBClusterParameterGroups`devuelve una lista de descripciones. DBCluster ParameterGroup 

*Nivel de acceso:* `List`.

*Tipo de recurso:* [cluster-pg](iam-admin-resources.md#neptune-cluster-pg-resource) (obligatorio).

## RDSDBCluster: Describa los parámetros
<a name="neptune-iam-admin-actions-DescribeDBClusterParameters"></a>

`DescribeDBClusterParameters` devuelve la lista detallada de parámetros para un grupo de parámetros de clúster de base de datos en particular.

*Nivel de acceso:* `List`.

*Tipo de recurso:* [cluster-pg](iam-admin-resources.md#neptune-cluster-pg-resource) (obligatorio).

## RDS: describe DBCluster SnapshotAttributes
<a name="neptune-iam-admin-actions-DescribeDBClusterSnapshotAttributes"></a>

`DescribeDBClusterSnapshotAttributes` devuelve una lista de nombres y valores de atributos de instantáneas de clúster de base de datos y valores para una instantánea manual del clúster de base de datos.

*Nivel de acceso:* `List`.

*Tipo de recurso:* [cluster-snapshot](iam-admin-resources.md#neptune-cluster-snapshot-resource) (obligatorio).

## RDS: describe DBCluster las instantáneas
<a name="neptune-iam-admin-actions-DescribeDBClusterSnapshots"></a>

`DescribeDBClusterSnapshots` devuelve información acerca de instantáneas del clúster de base de datos.

*Nivel de acceso:* `Read`.

## RDS: describe DBClusters
<a name="neptune-iam-admin-actions-DescribeDBClusters"></a>

`DescribeDBClusters` devuelve información acerca de un clúster de base de datos aprovisionado de Neptune.

*Nivel de acceso:* `List`.

*Tipo de recurso:* [clúster](iam-admin-resources.md#neptune-cluster-resource) (obligatorio).

## RDS: describa DBEngine las versiones
<a name="neptune-iam-admin-actions-DescribeDBEngineVersions"></a>

`DescribeDBEngineVersions` devuelve una lista con los motores de base de datos disponibles.

*Nivel de acceso:* `List`.

*Tipo de recurso:* [pg](iam-admin-resources.md#neptune-pg-resource) (obligatorio).

## RDS: Describa DBInstances
<a name="neptune-iam-admin-actions-DescribeDBInstances"></a>

`DescribeDBInstances` devuelve información acerca de las instancias de base de datos.

*Nivel de acceso:* `List`.

*Tipo de recurso:* [es](iam-admin-resources.md#neptune-es-resource) (obligatorio)

## RDS: Describa DBParameter los grupos
<a name="neptune-iam-admin-actions-DescribeDBParameterGroups"></a>

`DescribeDBParameterGroups`devuelve una lista de descripciones de grupos. DBParameter

*Nivel de acceso:* `List`.

*Tipo de recurso:* [pg](iam-admin-resources.md#neptune-pg-resource) (obligatorio).

## RDS: describe DBParameters
<a name="neptune-iam-admin-actions-DescribeDBParameters"></a>

`DescribeDBParameters` devuelve la lista detallada de parámetros para un grupo de parámetros de base de datos determinado.

*Nivel de acceso:* `List`.

*Tipo de recurso:* [pg](iam-admin-resources.md#neptune-pg-resource) (obligatorio).

## RDS: Describa DBSubnet los grupos
<a name="neptune-iam-admin-actions-DescribeDBSubnetGroups"></a>

`DescribeDBSubnetGroups`devuelve una lista de descripciones de grupos. DBSubnet

*Nivel de acceso:* `List`.

*Tipo de recurso:* [subgrp](iam-admin-resources.md#neptune-subgrp-resource) (obligatorio).

## Varillas: DescribeEventCategories
<a name="neptune-iam-admin-actions-DescribeEventCategories"></a>

`DescribeEventCategories` devuelve una lista de categorías de todos los tipos de origen de eventos o, si se especifica, para un tipo de origen especificado.

*Nivel de acceso:* `List`.

## Varillas: DescribeEventSubscriptions
<a name="neptune-iam-admin-actions-DescribeEventSubscriptions"></a>

`DescribeEventSubscriptions` muestra todas las descripciones de la suscripción para una cuenta de cliente.

*Nivel de acceso:* `List`.

*Tipo de recurso:* [es](iam-admin-resources.md#neptune-es-resource) (obligatorio)

## Varillas: DescribeEvents
<a name="neptune-iam-admin-actions-DescribeEvents"></a>

`DescribeEvents` devuelve eventos relacionados con las instancias de base de datos, grupos de seguridad de base de datos y grupos de parámetros de base de datos de los últimos 14 días.

*Nivel de acceso:* `List`.

*Tipo de recurso:* [es](iam-admin-resources.md#neptune-es-resource) (obligatorio)

## rds: Opciones DescribeOrderable DBInstance
<a name="neptune-iam-admin-actions-DescribeOrderableDBInstanceOptions"></a>

`DescribeOrderableDBInstanceOptions` devuelve una lista de opciones de instancia de base de datos ordenable para el motor especificado.

*Nivel de acceso:* `List`.

## RDS: DescribePendingMaintenanceActions
<a name="neptune-iam-admin-actions-DescribePendingMaintenanceActions"></a>

`DescribePendingMaintenanceActions` devuelve una lista de recursos (por ejemplo, instancias de base de datos) que tienen al menos una acción de mantenimiento pendiente.

*Nivel de acceso:* `List`.

*Tipo de recurso:* [db](iam-admin-resources.md#neptune-db-resource) (obligatorio).

## rds: Modificaciones DescribeValid DBInstance
<a name="neptune-iam-admin-actions-DescribeValidDBInstanceModifications"></a>

`DescribeValidDBInstanceModifications` muestra las modificaciones disponibles que puede realizar en su instancia de base de datos.

*Nivel de acceso:* `List`.

*Tipo de recurso:* [db](iam-admin-resources.md#neptune-db-resource) (obligatorio).

## RDS: conmutación por error DBCluster
<a name="neptune-iam-admin-actions-FailoverDBCluster"></a>

`FailoverDBCluster` fuerza una conmutación por error para un clúster de base de datos.

*Nivel de acceso:* `Write`.

*Tipo de recurso:* [clúster](iam-admin-resources.md#neptune-cluster-resource) (obligatorio).

## RDS: ListTagsForResource
<a name="neptune-iam-admin-actions-ListTagsForResource"></a>

`ListTagsForResource` muestra todas las etiquetas en un recurso de Neptune.

*Nivel de acceso:* `Read`.

*Tipos de recursos:*
+ [cluster-snapshot](iam-admin-resources.md#neptune-cluster-snapshot-resource)
+ [db](iam-admin-resources.md#neptune-db-resource)
+ [es](iam-admin-resources.md#neptune-es-resource)
+ [pg](iam-admin-resources.md#neptune-pg-resource)
+ [subgrp](iam-admin-resources.md#neptune-subgrp-resource)

## RDS: modificar DBCluster
<a name="neptune-iam-admin-actions-ModifyDBCluster"></a>

`ModifyDBCluster`

Modifica la configuración de un clúster de base de datos de Neptune.

*Nivel de acceso:* `Write`.

*Acciones dependientes:* `iam:PassRole`.

*Tipos de recursos:*
+ [cluster](iam-admin-resources.md#neptune-cluster-resource) (obligatorio).
+ [cluster-pg](iam-admin-resources.md#neptune-cluster-pg-resource) (obligatorio).

## RDS: modificar DBCluster ParameterGroup
<a name="neptune-iam-admin-actions-ModifyDBClusterParameterGroup"></a>

`ModifyDBClusterParameterGroup` modifica los parámetros de un grupo de parámetros del clúster de base de datos.

*Nivel de acceso:* `Write`.

*Tipo de recurso:* [cluster-pg](iam-admin-resources.md#neptune-cluster-pg-resource) (obligatorio).

## RDS: modificar DBCluster SnapshotAttribute
<a name="neptune-iam-admin-actions-ModifyDBClusterSnapshotAttribute"></a>

`ModifyDBClusterSnapshotAttribute` añade un atributo y valores a una instantánea manual del clúster de base de datos o los elimina.

*Nivel de acceso:* `Write`.

*Tipo de recurso:* [cluster-snapshot](iam-admin-resources.md#neptune-cluster-snapshot-resource) (obligatorio).

## RDS: modificar DBInstance
<a name="neptune-iam-admin-actions-ModifyDBInstance"></a>

`ModifyDBInstance` modifica la configuración de una instancia de base de datos.

*Nivel de acceso:* `Write`.

*Acciones dependientes:* `iam:PassRole`.

*Tipos de recursos:*
+ [db](iam-admin-resources.md#neptune-db-resource) (obligatorio).
+ [pg](iam-admin-resources.md#neptune-pg-resource) (obligatorio).

## RDS: modificar grupo DBParameter
<a name="neptune-iam-admin-actions-ModifyDBParameterGroup"></a>

`ModifyDBParameterGroup` modifica los parámetros de un grupo de parámetros de base de datos.

*Nivel de acceso:* `Write`.

*Tipo de recurso:* [pg](iam-admin-resources.md#neptune-pg-resource) (obligatorio).

## RDS: modificar DBSubnet grupo
<a name="neptune-iam-admin-actions-ModifyDBSubnetGroup"></a>

`ModifyDBSubnetGroup` modifica un grupo de subred de base de datos existente.

*Nivel de acceso:* `Write`.

*Tipo de recurso:* [subgrp](iam-admin-resources.md#neptune-subgrp-resource) (obligatorio).

## RDS: ModifyEventSubscription
<a name="neptune-iam-admin-actions-ModifyEventSubscription"></a>

`ModifyEventSubscription` modifica una suscripción a notificaciones de eventos de Neptune existente.

*Nivel de acceso:* `Write`.

*Tipo de recurso:* [es](iam-admin-resources.md#neptune-es-resource) (obligatorio)

## RDS: reiniciar DBInstance
<a name="neptune-iam-admin-actions-RebootDBInstance"></a>

`RebootDBInstance` reinicia el servicio del motor de base de datos para la instancia.

*Nivel de acceso:* `Write`.

*Tipo de recurso:* [db](iam-admin-resources.md#neptune-db-resource) (obligatorio).

## RDS: RemoveRoleFrom DBCluster
<a name="neptune-iam-admin-actions-RemoveRoleFromDBCluster"></a>

`RemoveRoleFromDBCluster`disocia una función de AWS Identity and Access Management (IAM) de un clúster de base de datos de Amazon Neptune.

*Nivel de acceso:* `Write`.

*Acciones dependientes:* `iam:PassRole`.

*Tipo de recurso:* [clúster](iam-admin-resources.md#neptune-cluster-resource) (obligatorio).

## Ards: RemoveSourceIdentifierFromSubscription
<a name="neptune-iam-admin-actions-RemoveSourceIdentifierFromSubscription"></a>

`RemoveSourceIdentifierFromSubscription` elimina un identificador de origen de una suscripción a notificaciones de eventos de Neptune existente.

*Nivel de acceso:* `Write`.

*Tipo de recurso:* [es](iam-admin-resources.md#neptune-es-resource) (obligatorio)

## Varillas: RemoveTagsFromResource
<a name="neptune-iam-admin-actions-RemoveTagsFromResource"></a>

`RemoveTagsFromResource` elimina etiquetas de metadatos de un recurso de Neptune.

*Nivel de acceso:* `Tagging`.

*Tipos de recursos:*
+ [cluster-snapshot](iam-admin-resources.md#neptune-cluster-snapshot-resource)
+ [db](iam-admin-resources.md#neptune-db-resource)
+ [es](iam-admin-resources.md#neptune-es-resource)
+ [pg](iam-admin-resources.md#neptune-pg-resource)
+ [subgrp](iam-admin-resources.md#neptune-subgrp-resource)

*Claves de condición:*
+ [leyes:/RequestTag*tag-key*](iam-admin-condition-keys.md#admin-aws_RequestTag)
+ [leyes: TagKeys](iam-admin-condition-keys.md#admin-aws_TagKeys)

## RDS: restablecer DBCluster ParameterGroup
<a name="neptune-iam-admin-actions-ResetDBClusterParameterGroup"></a>

`ResetDBClusterParameterGroup` modifica los parámetros de un grupo de parámetros del clúster de base de datos al valor predeterminado.

*Nivel de acceso:* `Write`.

*Tipo de recurso:* [cluster-pg](iam-admin-resources.md#neptune-cluster-pg-resource) (obligatorio).

## RDS: restablecer grupo DBParameter
<a name="neptune-iam-admin-actions-ResetDBParameterGroup"></a>

`ResetDBParameterGroup`modifica los parámetros de un grupo de parámetros de base de datos al valor predeterminado. engine/system 

*Nivel de acceso:* `Write`.

*Tipo de recurso:* [pg](iam-admin-resources.md#neptune-pg-resource) (obligatorio).

## RDS: restaurar DBCluster FromSnapshot
<a name="neptune-iam-admin-actions-RestoreDBClusterFromSnapshot"></a>

`RestoreDBClusterFromSnapshot` crea un nuevo clúster de base de datos desde una instantánea de clúster de base de datos.

*Nivel de acceso:* `Write`.

*Acciones dependientes:* `iam:PassRole`.

*Tipos de recursos:*
+ [cluster](iam-admin-resources.md#neptune-cluster-resource) (obligatorio).
+ [cluster-snapshot](iam-admin-resources.md#neptune-cluster-snapshot-resource) (obligatorio).

*Claves de condición:*
+ [fue:/RequestTag*tag-key*](iam-admin-condition-keys.md#admin-aws_RequestTag)
+ [leyes: TagKeys](iam-admin-condition-keys.md#admin-aws_TagKeys)

## RDS: restaurar DBCluster ToPointInTime
<a name="neptune-iam-admin-actions-RestoreDBClusterToPointInTime"></a>

`RestoreDBClusterToPointInTime` restaura un clúster de base de datos a un punto arbitrario en el tiempo.

*Nivel de acceso:* `Write`.

*Acciones dependientes:* `iam:PassRole`.

*Tipos de recursos:*
+ [cluster](iam-admin-resources.md#neptune-cluster-resource) (obligatorio).
+ [subgrp](iam-admin-resources.md#neptune-subgrp-resource) (obligatorio).

*Claves de condición:*
+ [fue:/RequestTag*tag-key*](iam-admin-condition-keys.md#admin-aws_RequestTag)
+ [leyes: TagKeys](iam-admin-condition-keys.md#admin-aws_TagKeys)

## RDS: iniciar DBCluster
<a name="neptune-iam-admin-actions-StartDBCluster"></a>

`StartDBCluster` inicia el clúster de base de datos especificado.

*Nivel de acceso:* `Write`.

*Tipo de recurso:* [clúster](iam-admin-resources.md#neptune-cluster-resource) (obligatorio).

## RDS: parada DBCluster
<a name="neptune-iam-admin-actions-StopDBCluster"></a>

`StopDBCluster` detiene el clúster de base de datos especificado.

*Nivel de acceso:* `Write`.

*Tipo de recurso:* [clúster](iam-admin-resources.md#neptune-cluster-resource) (obligatorio).

# Tipos de recursos de IAM para administrar Amazon Neptune
<a name="iam-admin-resources"></a>

Neptune admite los tipos de recursos de la siguiente tabla para su uso en el elemento `Resource` de las declaraciones de políticas de administración de IAM. Para obtener más información sobre el elemento `Resource`, consulte [Elementos de la política de JSON de IAM: Resource](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_resource.html).

La [lista de acciones de administración de Neptune](neptune-iam-admin-actions.md) identifica los tipos de recursos que se pueden especificar con cada acción. Un tipo de recurso también determina qué claves de condición se pueden incluir en una política, tal y como se especifica en la última columna de la tabla de abajo.

En la columna `ARN`, se especifica el formato de nombre de recurso de Amazon (ARN) que debe utilizar para hacer referencia a los recursos de este tipo. Las partes precedidas por ` $ ` deben sustituirse por los valores reales de su escenario. Por ejemplo, si ve `$user-name` en un ARN, debe sustituir esa cadena por el nombre de usuario real de IAM o una variable de política que contenga un nombre de usuario de IAM. Para obtener más información sobre ARNs, consulte [ ARNsIAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html#identifiers-arns) y. [Trabajar con tareas administrativas ARNs en Amazon Neptune](tagging-arns.md)

En la columna ` Condition Keys `, se especifican las claves de contexto de condiciones que puede incluir en una declaración de política de IAM cuando se incluyen en la declaración este recurso y una acción de apoyo compatible.


****  

| Tipos de recursos | ARN | Claves de condición | 
| --- | --- | --- | 
|  `cluster` (un clúster de base de datos)  | arn:partition:rds:region:account-id:cluster:instance-name |  [leyes:/ResourceTag*tag-key*](iam-admin-condition-keys.md#admin-aws_ResourceTag) [rds:cluster-tag/ *tag-key*](iam-admin-condition-keys.md#admin-rds_cluster-tag)  | 
|  `cluster-pg` (un grupo de parámetros de clúster de base de datos)  | arn:partition:rds:region:account-id:cluster-pg:neptune-DBClusterParameterGroupName |  [leyes:/ResourceTag*tag-key*](iam-admin-condition-keys.md#admin-aws_ResourceTag)  | 
|  `cluster-snapshot` (una instantánea de clúster de base de datos)  | arn:partition:rds:region:account-id:cluster-snapshot:neptune-DBClusterSnapshotName |  [leyes:ResourceTag/*tag-key*](iam-admin-condition-keys.md#admin-aws_ResourceTag) [Ards:/cluster-snapshot-tag*tag-key*](iam-admin-condition-keys.md#admin-rds_cluster-snapshot-tag)  | 
|  `db` (una instancia de base de datos)  | arn:partition:rds:region:account-id:db:neptune-DbInstanceName |  [leyes:/ResourceTag*tag-key*](iam-admin-condition-keys.md#admin-aws_ResourceTag) [Ards: DatabaseClass](iam-admin-condition-keys.md#admin-rds_DatabaseClass) [Varillas: DatabaseEngine](iam-admin-condition-keys.md#admin-rds_DatabaseEngine) [rds: db-tag/ *tag-key*](iam-admin-condition-keys.md#admin-rds_db-tag)  | 
|  `es` (una suscripción a eventos)  | arn:partition:rds:region:account-id:es:neptune-CustSubscriptionId  |  [leyes:/ResourceTag*tag-key*](iam-admin-condition-keys.md#admin-aws_ResourceTag) [rds:es-tag/ *tag-key*](iam-admin-condition-keys.md#admin-rds_es-tag)  | 
|  `pg` (un grupo de parámetros de base de datos)  | arn:partition:rds:region:account-id:pg:neptune-ParameterGroupName |  [leyes:/ResourceTag*tag-key*](iam-admin-condition-keys.md#admin-aws_ResourceTag) [rds: pg-tag/ *tag-key*](iam-admin-condition-keys.md#admin-rds_pg-tag)  | 
|  `subgrp` (un grupo de subred de base de datos)  | arn:partition:rds:region:account-id:subgrp:neptune-DBSubnetGroupName\$1 |  [leyes:/ResourceTag*tag-key*](iam-admin-condition-keys.md#admin-aws_ResourceTag) [rds: subgrp-tag/ *tag-key*](iam-admin-condition-keys.md#admin-rds_subgrp-tag)  | 

# Claves de condición de IAM para administrar Amazon Neptune
<a name="iam-admin-condition-keys"></a>

[Con las claves de condición](security-iam-access-manage.md#iam-using-condition-keys), puede especificar condiciones en una declaración de política de IAM para que la declaración se aplique solo cuando se aplican las condiciones. Las claves de condición que puede utilizar en las declaraciones de políticas administrativas de Neptune se clasifican en las siguientes categorías:
+ [Claves de condición globales](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html): están definidas para su uso general con los servicios. AWS AWS La mayoría se puede utilizar en las declaraciones de políticas administrativas de Neptune.
+ [Claves de condición de las propiedades de recursos administrativos](#iam-rds-property-condition-keys): estas claves, que se enumeran [a continuación](#iam-rds-property-condition-keys), se basan en las propiedades de los recursos administrativos.
+ [Claves de condición de acceso basadas en etiquetas](#iam-rds-tag-based-condition-keys): estas claves, que se enumeran [a continuación](#iam-rds-tag-based-condition-keys), se basan en las [etiquetas de AWS](https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html) asociadas a los recursos administrativos.

## Claves de condición de las propiedades de recursos administrativos de Neptune
<a name="iam-rds-property-condition-keys"></a>


| Claves de condición | Descripción | Tipo | 
| --- | --- | --- | 
| rds:DatabaseClass | Filtra el acceso por el tipo de clase de instancia de base de datos | Cadena | 
| rds:DatabaseEngine | Filtra el acceso por el motor de la base de datos. Para ver los posibles valores, consulte el parámetro del motor en Create DBInstance API | Cadena | 
| rds:DatabaseName | Filtra el acceso por el nombre definido por el usuario de la base de datos en la instancia de base de datos | Cadena | 
| rds:EndpointType | Filtra el acceso según el tipo de punto de enlace Puede ser: READER, WRITER, CUSTOM (lectura, escritura, personalizado) | Cadena | 
| rds:Vpc | Filtra el acceso por un valor que especifica si la instancia de base de datos se ejecuta en una Amazon Virtual Private Cloud (Amazon VPC) Para indicar que la instancia de base de datos se ejecuta en una Amazon VPC; especifique true. | Booleano | 

## Claves de condición administrativas basadas en etiquetas
<a name="iam-rds-tag-based-condition-keys"></a>

Amazon Neptune permite especificar condiciones en una política de IAM que utiliza etiquetas personalizadas para controlar el acceso a Neptune a través de [Referencia de la API de administración](api.md).

Por ejemplo, si añade una etiqueta denominada `environment` a sus instancias de base de datos, con valores como `beta`, `staging` y `production`, puede crear una política que restrinja el acceso a las instancias en función del valor de esa etiqueta.

**importante**  
Si administra el acceso a sus recursos de Neptune mediante el etiquetado, asegúrese de proteger el acceso a las etiquetas. Puede restringir el acceso a las etiquetas creando políticas para las acciones `AddTagsToResource` y `RemoveTagsFromResource`.  
Por ejemplo, podría utilizar la siguiente política para denegar a los usuarios la posibilidad de añadir o eliminar etiquetas para todos los recursos. A continuación, podría crear políticas para permitir que usuarios específicos añadan o quiten etiquetas.  

****  

```
{ "Version":"2012-10-17",		 	 	 
  "Statement":[
    { "Sid": "DenyTagUpdates",
      "Effect": "Deny",
      "Action": [
        "rds:AddTagsToResource",
        "rds:RemoveTagsFromResource"
      ],
      "Resource":"*"
    }
  ]
}
```

Las siguientes claves de condición basadas en etiquetas solo funcionan con los recursos administrativos en declaraciones de políticas administrativas.


**Claves de condición administrativas basadas en etiquetas**  

| Claves de condición | Descripción | Tipo | 
| --- | --- | --- | 
|   [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-requesttag](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-requesttag)  | Filtra acciones en función de la presencia de pares de clave-valor de etiqueta en la solicitud. | Cadena | 
|   [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-resourcetag](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-resourcetag)  | Filtra el acceso en función de pares de clave-valor asociados al recurso. | Cadena | 
|   [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keyss](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keyss)  | Filtra el acceso en función de la presencia de claves de etiqueta en la solicitud. | Cadena | 
| rds:cluster-pg-tag/\$1\$1TagKey\$1 | Filtra el acceso por la etiqueta asociada a un grupo de parámetros de clúster de base de datos. | Cadena | 
| rds:cluster-snapshot-tag/\$1\$1TagKey\$1 | Filtra el acceso por la etiqueta asociada a una instantánea de clúster de base de datos. | Cadena | 
| rds:cluster-tag/\$1\$1TagKey\$1 | Filtra el acceso por la etiqueta asociada a un clúster de base de datos. | Cadena | 
| rds:db-tag/\$1\$1TagKey\$1 | Filtra el acceso por la etiqueta asociada a una instancia de base de datos. | Cadena | 
| rds:es-tag/\$1\$1TagKey\$1 | Filtra el acceso por la etiqueta asociada a una suscripción de evento. | Cadena | 
| rds:pg-tag/\$1\$1TagKey\$1 | Filtra el acceso por la etiqueta asociada a un grupo de parámetros de base de datos. | Cadena | 
| rds:req-tag/\$1\$1TagKey\$1 | Filtra el acceso por el conjunto de claves y valores de etiquetas que se pueden usar para etiquetar un recurso. | Cadena | 
| rds:secgrp-tag/\$1\$1TagKey\$1 | Filtra el acceso por la etiqueta asociada a un grupo de seguridad de base de datos. | Cadena | 
| rds:snapshot-tag/\$1\$1TagKey\$1 | Filtra el acceso por la etiqueta asociada a una instantánea de base de datos. | Cadena | 
| rds:subgrp-tag/\$1\$1TagKey\$1 | Filtra el acceso por la etiqueta adjunta a un grupo de subred de base de datos | Cadena | 

# Creación de instrucciones de políticas administrativas de IAM para Amazon Neptune
<a name="iam-admin-policy-examples"></a>

## Ejemplos de políticas administrativas generales
<a name="iam-admin-policy-general-examples"></a>

En los siguientes ejemplos, se muestra cómo crear políticas administrativas de Neptune que concedan permisos para realizar diversas acciones de administración en un clúster de base de datos.

### Política que impide que un usuario de IAM elimine una instancia de base de datos específica
<a name="iam-admin-policy-not-delete-instance"></a>

A continuación, se muestra un ejemplo de política que impide que un usuario de IAM elimine una instancia de base de datos de Neptune específica:

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "DenyDeleteOneInstance",
      "Effect": "Deny",
      "Action": "rds:DeleteDBInstance",
      "Resource": "arn:aws:rds:us-west-2:123456789012:db:my-instance-name"
    }
  ]
}
```

------

### La política concede permiso para crear nuevas instancias de base de datos
<a name="iam-admin-policy-to-create-instances"></a>

A continuación, se muestra un ejemplo de una política que permite a un usuario de IAM crear instancias de base de datos en un clúster de base de datos de Neptune específico:

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AllowCreateInstance",
      "Effect": "Allow",
      "Action": "rds:CreateDBInstance",
      "Resource": "arn:aws:rds:us-west-2:123456789012:cluster:my-cluster"
    }
  ]
}
```

------

### Política que concede permiso para crear nuevas instancias de base de datos que usen un grupo de parámetros de base de datos específico
<a name="iam-admin-policy-to-create-instances-with-pg"></a>

A continuación, tenemos un ejemplo de política que permite a un usuario de IAM crear instancias de base de datos en un clúster de base de datos específico (aquí `us-west-2`) en un clúster de base de datos de Neptune específico utilizando solo un grupo de parámetros de base de datos específico.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AllowCreateInstanceWithPG",
      "Effect": "Allow",
      "Action": "rds:CreateDBInstance",
      "Resource": [
        "arn:aws:rds:us-west-2:123456789012:cluster:my-cluster",
        "arn:aws:rds:us-west-2:123456789012:pg:my-instance-pg"
      ]
    }
  ]
}
```

------

### Política que concede permiso para describir cualquier recurso
<a name="iam-admin-policy-to-describe"></a>

A continuación, tenemos un ejemplo de política que permite a un usuario de IAM describir cualquier recurso de Neptune.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowDescribe",
            "Effect": "Allow",
            "Action": "rds:Describe*",
            "Resource": "*"
        }
    ]
}
```

------

## Ejemplos de políticas administrativas basadas en etiquetas
<a name="iam-admin-policy-tagging-examples"></a>

En los siguientes ejemplos, se muestra cómo crear políticas administrativas de Neptune que se etiquetan para filtrar permisos para varias acciones de administración en un cluster de base de datos.

### Ejemplo 1: conceder permiso para acciones en un recurso mediante una etiqueta personalizada que puede tomar varios valores
<a name="security-iam-tag-examples-1"></a>

La política siguiente permite el uso de la API `ModifyDBInstance`, `CreateDBInstance` o `DeleteDBInstance` en cualquier instancia de base de datos que tenga la etiqueta `env` establecida en `dev` o `test`:

------
#### [ JSON ]

****  

```
{ "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AllowDevTestAccess",
      "Effect": "Allow",
      "Action": [
        "rds:ModifyDBInstance",
        "rds:CreateDBInstance",
        "rds:DeleteDBInstance"
      ],
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "rds:db-tag/env": [
              "dev",
              "test"
          ],
          "rds:DatabaseEngine": "neptune"
        }
      }
    }
  ]
}
```

------

### Ejemplo 3: limitar el conjunto de claves y valores de etiquetas que se pueden usar para etiquetar un recurso
<a name="security-iam-tag-examples-2"></a>

En esta política, se usa una clave `Condition` para permitir que una etiqueta que tiene la clave `env` y un valor de `test`, `qa` o `dev` se añada a un recurso:

------
#### [ JSON ]

****  

```
{ "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AllowTagAccessForDevResources",
      "Effect": "Allow",
      "Action": [
        "rds:AddTagsToResource",
        "rds:RemoveTagsFromResource"
      ],
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "rds:req-tag/env": [
            "test",
            "qa",
            "dev"
          ],
          "rds:DatabaseEngine": "neptune"
        }
      }
    }
  ]
}
```

------

### Ejemplo 3: permitir el acceso completo a los recursos de Neptune en función de `aws:ResourceTag`
<a name="security-iam-tag-examples-3"></a>

La siguiente política es similar al primer ejemplo anterior, pero utiliza en su lugar `aws:ResourceTag`.

------
#### [ JSON ]

****  

```
{ "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AllowFullAccessToDev",
      "Effect": "Allow",
      "Action": [
        "rds:*"
      ],
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "aws:ResourceTag/env": "dev",
          "rds:DatabaseEngine": "neptune"
        }
      }
    }
  ]
}
```

------

# Creación de instrucciones de políticas de IAM personalizadas para acceder a datos en Amazon Neptune
<a name="iam-data-access-policies"></a>

Las instrucciones de políticas de acceso a datos de Neptune utilizan [acciones](iam-dp-actions.md), [recursos](iam-data-resources.md) y [claves de condición](iam-data-condition-keys.md#iam-neptune-condition-keys) de acceso a los datos, todos ellos precedidos por el prefijo `neptune-db:`.

**Topics**
+ [Uso de acciones de consulta en las declaraciones de políticas de acceso a datos de Neptune](#iam-data-query-actions)
+ [Acciones de IAM para el acceso a los datos en Amazon Neptune](iam-dp-actions.md)
+ [Tipos de recursos de IAM para acceder a los datos en Amazon Neptune](iam-data-resources.md)
+ [Claves de condición de IAM para acceder a los datos en Amazon Neptune](iam-data-condition-keys.md)
+ [Creación de políticas de acceso a datos de IAM en Amazon Neptune](iam-data-access-examples.md)

## Uso de acciones de consulta en las declaraciones de políticas de acceso a datos de Neptune
<a name="iam-data-query-actions"></a>

Hay tres acciones de consulta de Neptune que se pueden utilizar en las declaraciones de políticas de acceso a los datos: `ReadDataViaQuery`, `WriteDataViaQuery` y `DeleteDataViaQuery`. Es posible que una consulta en particular necesite permisos para realizar varias de estas acciones, y puede que no siempre sea evidente qué combinación de estas acciones debe permitirse para ejecutar una consulta.

Antes de ejecutar una consulta, Neptune determina los permisos necesarios para ejecutar cada paso de la consulta y los combina en el conjunto completo de permisos que requiere la consulta. Tenga en cuenta que este conjunto completo de permisos incluye todas las acciones que *puede* realizar la consulta, que no es necesariamente el conjunto de acciones que la consulta realizará realmente cuando se ejecute en sus datos.

Esto significa que, para permitir que se ejecute una consulta determinada, debe proporcionar permisos para todas las acciones que la consulta pueda realizar, tanto si las acaba realizando como si no.

Estos son algunos ejemplos de consultas de Gremlin en las que esto se explica con más detalle:
+ 

  ```
  g.V().count()
  ```

  `g.V()` y `count()` solo requieren acceso de lectura, por lo que la consulta en su conjunto solo requiere acceso `ReadDataViaQuery`.
+ 

  ```
  g.addV()
  ```

  `addV()` necesita comprobar si existe o no un vértice con un identificador determinado antes de insertar uno nuevo. Esto significa que requiere tanto acceso `ReadDataViaQuery` como `WriteDataViaQuery`.
+ 

  ```
  g.V('1').as('a').out('created').addE('createdBy').to('a')
  ```

  `g.V('1').as('a')` y `out('created')` solo requieren acceso de lectura, pero `addE().from('a')` requiere acceso de lectura y escritura, ya que `addE()` necesita leer los vértices `from` y `to` y comprobar si ya existe un borde con el mismo identificador antes de añadir uno nuevo. Por lo tanto, la consulta en su conjunto necesita tanto el acceso `ReadDataViaQuery` como `WriteDataViaQuery`.
+ 

  ```
  g.V().drop()
  ```

  `g.V()` solo requiere acceso de lectura. `drop()` necesita acceso de lectura y eliminación porque tiene que leer un vértice o borde antes de eliminarlo, por lo que la consulta en su conjunto requiere tanto acceso `ReadDataViaQuery` como `DeleteDataViaQuery`.
+ 

  ```
  g.V('1').property(single, 'key1', 'value1')
  ```

  `g.V('1')` solo requiere acceso de lectura, pero `property(single, 'key1', 'value1')` requiere acceso de lectura, escritura y eliminación. En este caso, en el paso `property()`, se inserta la clave y el valor si aún no existen en el vértice, pero si ya existen, se elimina el valor de la propiedad existente y se inserta un nuevo valor en su lugar. Por lo tanto, la consulta en su conjunto requiere acceso `ReadDataViaQuery`, `WriteDataViaQuery` y `DeleteDataViaQuery`.

  Cualquier consulta que contenga un paso `property()` necesitará permisos `ReadDataViaQuery`, `WriteDataViaQuery` y `DeleteDataViaQuery`.

Estos son algunos ejemplos de openCypher:
+ 

  ```
  MATCH (n)
  RETURN n
  ```

  Esta consulta lee todos los nodos de la base de datos y los devuelve, lo que solo requiere acceso `ReadDataViaQuery`.
+ 

  ```
  MATCH (n:Person)
  SET n.dept = 'AWS'
  ```

  Esta consulta requiere acceso `ReadDataViaQuery`, `WriteDataViaQuery` y `DeleteDataViaQuery`. Lee todos los nodos con la etiqueta 'Person' y añade una nueva propiedad con la clave `dept` y el valor `AWS` o, si la propiedad `dept` ya existe, elimina el valor anterior e inserta `AWS` en su lugar. Además, si el valor que se va a establecer es `null`, `SET` elimina la propiedad por completo.

   Como en algunos casos es posible que la cláusula `SET` necesite eliminar un valor existente, **siempre** necesitará permisos `DeleteDataViaQuery` y permisos `ReadDataViaQuery` y `WriteDataViaQuery`.
+ 

  ```
  MATCH (n:Person)
  DETACH DELETE n
  ```

  Esta consulta necesita permisos `ReadDataViaQuery` y `DeleteDataViaQuery`. Busca todos los nodos con la etiqueta `Person` y los elimina junto con los bordes conectados a esos nodos y las etiquetas y propiedades asociadas.
+ 

  ```
  MERGE (n:Person {name: 'John'})-[:knows]->(:Person {name: 'Peter'})
  RETURN n
  ```

  Esta consulta necesita permisos `ReadDataViaQuery` y `WriteDataViaQuery`. La cláusula `MERGE` coincide con un patrón específico o lo crea. Dado que puede producirse una escritura si el patrón no coincide, se necesitan permisos de escritura además de permisos de lectura.

# Acciones de IAM para el acceso a los datos en Amazon Neptune
<a name="iam-dp-actions"></a>

Tenga en cuenta que las acciones de acceso a datos de Neptune tienen el prefijo `neptune-db:`, mientras que las acciones administrativas de Neptune tienen el prefijo `rds:`.

El nombre de recurso de Amazon (ARN) para un recurso de datos en IAM no es el mismo que el ARN asignado a un clúster en el momento de su creación. Debe crear el ARN como se muestra en [Specifying data resources](iam-data-resources.md). Este recurso de datos ARNs puede utilizar caracteres comodín para incluir varios recursos.

Las declaraciones de política de acceso a los datos también pueden incluir la clave de QueryLanguage condición [neptune-db:](iam-data-condition-keys.md#iam-neptune-condition-keys) para restringir el acceso mediante el lenguaje de consulta.

A partir de [Versión: 1.2.0.0 (21/07/2022)](engine-releases-1.2.0.0.md), Neptune permite restringir los permisos a una o más [acciones específicas de Neptune](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonneptune.html). Esto proporciona un control de acceso más detallado de lo que era posible anteriormente.

**importante**  
Los cambios realizados en una política de IAM pueden tardar hasta 10 minutos en aplicarse a los recursos de Neptune especificados.
Las políticas de IAM que se aplican a un clúster de base de datos de Neptune se aplican a todas las instancias incluidas en dicho clúster.

## *Acciones de acceso a los datos basadas en consultas*
<a name="iam-dp-actions-queries"></a>

**nota**  
No siempre es obvio qué permisos se necesitan para ejecutar una consulta determinada, ya que las consultas pueden realizar más de una acción en función de los datos que procesen. Para obtener más información, consulte [Uso de acciones de consulta](iam-data-access-policies.md#iam-data-query-actions).

## `neptune-db:ReadDataViaQuery`
<a name="readdataviaquery"></a>

`ReadDataViaQuery` permite al usuario leer datos de la base de datos de Neptune mediante el envío de consultas.

*Grupos de acciones:* solo lectura, lectura-escritura.

*Claves de contexto de acción*: `neptune-db:QueryLanguage`.

*Recursos necesarios:* base de datos.

## `neptune-db:WriteDataViaQuery`
<a name="writedataviaquery"></a>

`WriteDataViaQuery` permite al usuario escribir datos en la base de datos de Neptune mediante el envío de consultas.

*Grupos de acciones*: lectura-escritura.

*Claves de contexto de acción*: `neptune-db:QueryLanguage`.

*Recursos necesarios:* base de datos.

## `neptune-db:DeleteDataViaQuery`
<a name="deletedataviaquery"></a>

`DeleteDataViaQuery` permite al usuario eliminar datos de la base de datos de Neptune mediante el envío de consultas.

*Grupos de acciones*: lectura-escritura.

*Claves de contexto de acción*: `neptune-db:QueryLanguage`.

*Recursos necesarios:* base de datos.

## `neptune-db:GetQueryStatus`
<a name="getquerystatus"></a>

`GetQueryStatus` permite al usuario verificar el estado de todas las consultas activas.

*Grupos de acciones:* solo lectura, lectura-escritura.

*Claves de contexto de acción*: `neptune-db:QueryLanguage`.

*Recursos necesarios:* base de datos.

## `neptune-db:GetStreamRecords`
<a name="getstreamrecords"></a>

`GetStreamRecords` permite al usuario obtener registros de flujo de Neptune.

*Grupos de acciones*: lectura-escritura.

*Claves de contexto de acción*: `neptune-db:QueryLanguage`.

*Recursos necesarios:* base de datos.

## `neptune-db:CancelQuery`
<a name="cancelquery"></a>

`CancelQuery` permite al usuario cancelar una consulta.

*Grupos de acciones*: lectura-escritura.

*Recursos necesarios:* base de datos.

## *Acciones generales de acceso a los datos*
<a name="iam-dp-actions-general"></a>

## `neptune-db:GetEngineStatus`
<a name="getenginestatus"></a>

`GetEngineStatus` permite al usuario verificar el estado del motor de Neptune.

*Grupos de acciones:* solo lectura, lectura-escritura.

*Recursos necesarios:* base de datos.

## `neptune-db:GetStatisticsStatus`
<a name="getstatisticsstatus"></a>

`GetStatisticsStatus` permite al usuario comprobar el estado de las estadísticas que se recopilan para la base de datos.

*Grupos de acciones:* solo lectura, lectura-escritura.

*Recursos necesarios:* base de datos.

## `neptune-db:GetGraphSummary`
<a name="getgraphsummary"></a>

`GetGraphSummary` La API de resumen de gráficos le permite recuperar un resumen de solo lectura de su gráfico.

*Grupos de acciones:* solo lectura, lectura-escritura.

*Recursos necesarios:* base de datos.

## `neptune-db:ManageStatistics`
<a name="managestatistics"></a>

`ManageStatistics` permite al usuario administrar la recopilación de estadísticas de la base de datos.

*Grupos de acciones*: lectura-escritura.

*Recursos necesarios:* base de datos.

## `neptune-db:DeleteStatistics`
<a name="deletestatistics"></a>

`DeleteStatistics` permite al usuario eliminar todas las estadísticas de la base de datos.

*Grupos de acciones*: lectura-escritura.

*Recursos necesarios:* base de datos.

## `neptune-db:ResetDatabase`
<a name="resetdatabase"></a>

`ResetDatabase` permite al usuario obtener el token necesario para el restablecimiento y restablecer la base de datos de Neptune.

*Grupos de acciones*: lectura-escritura.

*Recursos necesarios:* base de datos.

## *Acciones de acceso a datos del programa de carga masiva*
<a name="iam-dp-actions-loader"></a>

## `neptune-db:StartLoaderJob`
<a name="startloaderjob"></a>

`StartLoaderJob` permite al usuario iniciar un trabajo del programa de carga masiva.

*Grupos de acciones*: lectura-escritura.

*Recursos necesarios:* base de datos.

## `neptune-db:GetLoaderJobStatus`
<a name="getloaderjobstatus"></a>

`GetLoaderJobStatus` permite al usuario verificar el estado de un trabajo del programa de carga masiva.

*Grupos de acciones:* solo lectura, lectura-escritura.

*Recursos necesarios:* base de datos.

## `neptune-db:ListLoaderJobs`
<a name="listloaderjobs"></a>

`ListLoaderJobs` permite al usuario enumerar todos los trabajos del programa de carga masiva.

*Grupos de acciones:* solo enumeración, solo lectura, lectura-escritura.

*Recursos necesarios:* base de datos.

## `neptune-db:CancelLoaderJob`
<a name="cancelloaderjob"></a>

`CancelLoaderJob` permite al usuario cancelar un trabajo del programa de carga.

*Grupos de acciones*: lectura-escritura.

*Recursos necesarios:* base de datos.

## *Acciones de acceso a los datos mediante machine learning*
<a name="iam-dp-actions-ml"></a>

## `neptune-db:StartMLDataProcessingJob`
<a name="startmldataprocessingjob"></a>

`StartMLDataProcessingJob` permite al usuario iniciar un trabajo de procesamiento de datos de Neptune ML.

*Grupos de acciones*: lectura-escritura.

*Recursos necesarios:* base de datos.

## `neptune-db:StartMLModelTrainingJob`
<a name="startmlmodeltrainingjob"></a>

`StartMLModelTrainingJob` permite a un usuario comenzar un trabajo de entrenamiento de modelos de ML.

*Grupos de acciones*: lectura-escritura.

*Recursos necesarios:* base de datos.

## `neptune-db:StartMLModelTransformJob`
<a name="startmlmodeltransformjob"></a>

`StartMLModelTransformJob` permite que un usuario comience un trabajo de transformación de modelos de ML.

*Grupos de acciones*: lectura-escritura.

*Recursos necesarios:* base de datos.

## `neptune-db:CreateMLEndpoint`
<a name="createmlendpoint"></a>

`CreateMLEndpoint` permite al usuario crear un punto de conexión de Neptune ML.

*Grupos de acciones*: lectura-escritura.

*Recursos necesarios:* base de datos.

## `neptune-db:GetMLDataProcessingJobStatus`
<a name="getmldataprocessingjobstatus"></a>

`GetMLDataProcessingJobStatus` permite a un usuario comprobar el estado de un trabajo de procesamiento de datos de Neptune ML.

*Grupos de acciones:* solo lectura, lectura-escritura.

*Recursos necesarios:* base de datos.

## `neptune-db:GetMLModelTrainingJobStatus`
<a name="getmlmodeltrainingjobstatus"></a>

`GetMLModelTrainingJobStatus` permite a un usuario comprobar el estado de un trabajo de entrenamiento de modelos de Neptune ML.

*Grupos de acciones:* solo lectura, lectura-escritura.

*Recursos necesarios:* base de datos.

## `neptune-db:GetMLModelTransformJobStatus`
<a name="getmlmodeltransformjobstatus"></a>

`GetMLModelTransformJobStatus` permite a un usuario comprobar el estado de un trabajo de transformación de modelos de Neptune ML.

*Grupos de acciones:* solo lectura, lectura-escritura.

*Recursos necesarios:* base de datos.

## `neptune-db:GetMLEndpointStatus`
<a name="getmlendpointstatus"></a>

`GetMLEndpointStatus` permite a un usuario comprobar el estado de un punto de conexión de Neptune ML.

*Grupos de acciones:* solo lectura, lectura-escritura.

*Recursos necesarios:* base de datos.

## `neptune-db:ListMLDataProcessingJobs`
<a name="listmldataprocessingjobs"></a>

`ListMLDataProcessingJobs` permite a un usuario enumerar todos los trabajos de procesamiento de datos de Neptune ML.

*Grupos de acciones:* solo enumeración, solo lectura, lectura-escritura.

*Recursos necesarios:* base de datos.

## `neptune-db:ListMLModelTrainingJobs`
<a name="listmlmodeltrainingjobs"></a>

`ListMLModelTrainingJobs` permite a un usuario enumerar todos los trabajos de entrenamiento de modelos de Neptune ML.

*Grupos de acciones:* solo enumeración, solo lectura, lectura-escritura.

*Recursos necesarios:* base de datos.

## `neptune-db:ListMLModelTransformJobs`
<a name="listmlmodeltransformjobs"></a>

`ListMLModelTransformJobs` permite a un usuario generar una lista de todos los trabajos de transformación de modelos de ML.

*Grupos de acciones:* solo enumeración, solo lectura, lectura-escritura.

*Recursos necesarios:* base de datos.

## `neptune-db:ListMLEndpoints`
<a name="listmlendpoints"></a>

`ListMLEndpoints` permite a un usuario enumerar todos los puntos de conexión de Neptune ML.

*Grupos de acciones:* solo enumeración, solo lectura, lectura-escritura.

*Recursos necesarios:* base de datos.

## `neptune-db:CancelMLDataProcessingJob`
<a name="cancelmldataprocessingjob"></a>

`CancelMLDataProcessingJob` permite a un usuario cancelar un trabajo de procesamiento de datos de Neptune ML.

*Grupos de acciones*: lectura-escritura.

*Recursos necesarios:* base de datos.

## `neptune-db:CancelMLModelTrainingJob`
<a name="cancelmlmodeltrainingjob"></a>

`CancelMLModelTrainingJob` permite a un usuario cancelar un trabajo de entrenamiento de modelos de Neptune ML.

*Grupos de acciones*: lectura-escritura.

*Recursos necesarios:* base de datos.

## `neptune-db:CancelMLModelTransformJob`
<a name="cancelmlmodeltransformjob"></a>

`CancelMLModelTransformJob` permite a un usuario cancelar un trabajo de transformación de modelos de Neptune ML.

*Grupos de acciones*: lectura-escritura.

*Recursos necesarios:* base de datos.

## `neptune-db:DeleteMLEndpoint`
<a name="deletemlendpoint"></a>

`DeleteMLEndpoint` permite al usuario eliminar un punto de conexión de Neptune ML.

*Grupos de acciones*: lectura-escritura.

*Recursos necesarios:* base de datos.

# Tipos de recursos de IAM para acceder a los datos en Amazon Neptune
<a name="iam-data-resources"></a>

Los recursos de datos, como las acciones de datos, tienen un prefijo `neptune-db:`.

En una política de acceso a datos de Neptune, se especifica el clúster de base de datos al que se va a dar acceso en un ARN con el siguiente formato:

```
arn:aws:neptune-db:region:account-id:cluster-resource-id/*
```

Dicho ARN de recurso contiene las siguientes partes:
+ `region`es la AWS región del clúster de base de datos Amazon Neptune.
+ `account-id` es el número de cuenta de AWS para el clúster de base de datos.
+ `cluster-resource-id` es un ID de recurso del clúster de base de datos.
**importante**  
El `cluster-resource-id` es diferente al identificador del clúster. Para encontrar un ID de recurso de clúster en Neptune Consola de administración de AWS, busque el clúster de base de datos en cuestión en la sección **Configuración**.

# Claves de condición de IAM para acceder a los datos en Amazon Neptune
<a name="iam-data-condition-keys"></a>

[Con las claves de condición](security-iam-access-manage.md#iam-using-condition-keys), puede especificar condiciones en una declaración de política de IAM para que la declaración se aplique solo cuando se aplican las condiciones.

Las claves de condición que puede usar en las declaraciones de políticas de acceso a los datos de Neptune se clasifican en las siguientes categorías:
+ [Claves de [condición globales: el subconjunto de claves](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html) de condición AWS globales que Neptune admite en las declaraciones de política de acceso a los datos se detalla a continuación.](#iam-data-global-condition-keys)
+ [Claves de condición específicas del servicio](#iam-neptune-condition-keys): son claves definidas por Neptune específicamente para su uso en las declaraciones de políticas de acceso a los datos. En la actualidad, solo hay una, [neptune-db: QueryLanguage](#neptune-db-query-language), que solo permite el acceso si se utiliza un lenguaje de consulta específico.

## AWS claves de contexto de condiciones globales respaldadas por Neptune en las declaraciones de política de acceso a datos
<a name="iam-data-global-condition-keys"></a>

En la siguiente tabla se muestra el subconjunto de [claves de contexto de condición global de AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html) que Amazon Neptune admite para su uso en las declaraciones de políticas de acceso a los datos:


**Claves de condición globales que puede utilizar en las declaraciones de políticas de acceso a los datos**  

| Claves de condición | Descripción | Tipo | 
| --- | --- | --- | 
| [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-currenttime](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-currenttime) | Filtra el acceso por la fecha y hora actual de la solicitud. | String | 
| [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-epochtime](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-epochtime) | Filtra el acceso por fecha y hora de la solicitud expresadas como un valor de época de UNIX. | Numeric | 
| [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-principalaccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-principalaccount) | Filtra el acceso por la cuenta a la que pertenece la entidad principal solicitante. | String | 
| [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-principalarn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-principalarn) | Filtra el acceso por el ARN de la entidad principal que realizó la solicitud. | String | 
| [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-principalisawsservice](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-principalisawsservice) | Permite el acceso solo si la llamada la realiza directamente un director de AWS servicio. | Boolean | 
| [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-principalorgid](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-principalorgid) | Filtra el acceso por el identificador de la organización en AWS Organizations a la que pertenece el principal solicitante. | String | 
| [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-principalorgpaths](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-principalorgpaths) | Filtra el acceso por la AWS ruta Organizations para el director que realiza la solicitud. | String | 
| [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-principaltag](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-principaltag) | Filtra el acceso por una etiqueta asociada a la entidad principal que realiza la solicitud. | String | 
| [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-principaltype](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-principaltype) | Filtra el acceso por el tipo de la entidad principal que realiza la solicitud. | String | 
| [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-requestedregion](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-requestedregion) | Filtra el acceso por la AWS región a la que se llamó en la solicitud. | String | 
| [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-securetransport](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-securetransport) | Permite el acceso solo si la solicitud se envió mediante SSL. | Boolean | 
| [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceip](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceip) | Filtra el acceso por la dirección IP del solicitante | String | 
| [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-tokenissuetime](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-tokenissuetime) | Filtra el acceso por la fecha y hora en que se emitieron las credenciales de seguridad temporales. | String | 
| [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-useragent](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-useragent) | Filtra el acceso por aplicación cliente del solicitante. | String | 
| [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-userid](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-userid) | Filtra el acceso mediante el identificador de la entidad principal del solicitante. | String | 
| [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-viaawsservice](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-viaawsservice) | Permite el acceso solo si un AWS servicio ha realizado la solicitud en tu nombre. | Boolean | 

## Claves de condición específicas del servicio de Neptune
<a name="iam-neptune-condition-keys"></a>

Neptune admite la siguiente clave de condición específica del servicio para las políticas de IAM:


**Claves de condición específicas del servicio de Neptune**  

| Claves de condición | Descripción | Tipo | 
| --- | --- | --- | 
| neptune-db:QueryLanguage |  Filtra el acceso a los datos según el lenguaje de consulta que se utilice. Los valores válidos son `Gremlin`, `OpenCypher` y `Sparql`. Las acciones admitidas son `ReadDataViaQuery`, `WriteDataViaQuery`, `DeleteDataViaQuery`, `GetQueryStatus` y `CancelQuery`.  | String | 

# Creación de políticas de acceso a datos de IAM en Amazon Neptune
<a name="iam-data-access-examples"></a>

[Los siguientes ejemplos muestran cómo crear políticas de IAM personalizadas que utilizan un control de acceso detallado del plano de datos APIs y las acciones, introducido en la versión 1.2.0.0 del motor Neptune.](engine-releases-1.2.0.0.md) 

## Ejemplo de política que permite el acceso sin restricciones a los datos de un clúster de base de datos de Neptune
<a name="iam-auth-data-policy-example-general"></a>

En la siguiente política de ejemplo, se permite a un usuario de IAM conectarse a un clúster de base de datos de Neptune utilizando la autenticación de base de datos de IAM, y se utiliza el carácter "`*`" para hacer corresponder todas las acciones disponibles.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "neptune-db:*",
      "Resource": "arn:aws:neptune-db:us-east-1:123456789012:cluster-ABCD1234EFGH5678IJKL90MNOP/*"
    }
  ]
}
```

------

La sección de recursos anterior incluye un ARN de recurso en un formato específico de la autenticación de IAM de Neptune. Para crear el ARN, consulte [Specifying data resources](iam-data-resources.md). Tenga en cuenta que el ARN que se utiliza para una autorización de IAM `Resource` no es el mismo que el ARN asignado al clúster en el momento de su creación.

## Ejemplo de política que permite acceso de solo lectura a un clúster de base de datos de Neptune
<a name="iam-auth-data-policy-example-read-only"></a>

La siguiente política concede permiso para el acceso completo de solo lectura a los datos de un clúster de base de datos de Neptune: 

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement":[
    {
      "Effect": "Allow",
      "Action": [
        "neptune-db:Read*",
        "neptune-db:Get*",
        "neptune-db:List*"
      ],
      "Resource": "arn:aws:neptune-db:us-east-1:123456789012:cluster-ABCD1234EFGH5678IJKL90MNOP/*"
    }
  ]
}
```

------

## Ejemplo de política que deniega todo acceso a un clúster de base de datos de Neptune
<a name="iam-auth-data-policy-example-deny"></a>

La acción predeterminada de IAM es denegar el acceso a un clúster de base de datos, a menos que se conceda un *efecto* de `Allow`. Sin embargo, la siguiente política deniega todo acceso a un clúster de base de datos para una AWS cuenta y una región determinadas, lo que, en ese caso, prevalece sobre cualquier efecto. `Allow`

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Deny",
      "Action": "neptune-db:*",
      "Resource": "arn:aws:neptune-db:us-east-1:123456789012:cluster-ABCD1234EFGH5678IJKL90MNOP/*"
    }
  ]
}
```

------

## Ejemplo de política que concede acceso de lectura a través de consultas
<a name="iam-auth-data-policy-example-read-query"></a>

La siguiente política solo concede permiso para leer desde un clúster de base de datos de Neptune utilizando una consulta: 

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "neptune-db:ReadDataViaQuery",
      "Resource": "arn:aws:neptune-db:us-east-1:123456789012:cluster-ABCD1234EFGH5678IJKL90MNOP/*"
    }
  ]
}
```

------

## Ejemplo de política que solo permite consultas de Gremlin
<a name="iam-auth-data-policy-example-gremlin-only"></a>

La siguiente política usa la clave de condición `neptune-db:QueryLanguage` para conceder permiso para consultar Neptune únicamente con el lenguaje de consulta Gremlin: 

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "neptune-db:ReadDataViaQuery",
        "neptune-db:WriteDataViaQuery",
        "neptune-db:DeleteDataViaQuery"
      ],
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "neptune-db:QueryLanguage": "Gremlin"
        }
      }
    }
  ]
}
```

------

## Ejemplo de política que permite todos los accesos excepto a la administración de modelos de Neptune ML
<a name="iam-auth-data-policy-example-all-but-ml"></a>

La siguiente política concede acceso completo a las operaciones de gráficos de Neptune, excepto a las características de administración de modelos de Neptune ML:

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement":[
    {
      "Effect": "Allow",
      "Action": [
        "neptune-db:CancelLoaderJob",
        "neptune-db:CancelQuery",
        "neptune-db:DeleteDataViaQuery",
        "neptune-db:DeleteStatistics",
        "neptune-db:GetEngineStatus",
        "neptune-db:GetLoaderJobStatus",
        "neptune-db:GetQueryStatus",
        "neptune-db:GetStatisticsStatus",
        "neptune-db:GetStreamRecords",
        "neptune-db:ListLoaderJobs",
        "neptune-db:ManageStatistics",
        "neptune-db:ReadDataViaQuery",
        "neptune-db:ResetDatabase",
        "neptune-db:StartLoaderJob",
        "neptune-db:WriteDataViaQuery"
      ],
      "Resource": "arn:aws:neptune-db:us-east-1:123456789012:cluster-ABCD1234EFGH5678IJKL90MNOP/*"
    }
  ]
}
```

------

## Ejemplo de política que permite el acceso a la administración de modelos de Neptune ML
<a name="iam-auth-data-policy-example-ml"></a>

Esta política concede acceso a las características de administración de modelos de Neptune ML:

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement":[
    {
      "Effect": "Allow",
      "Action": [
        "neptune-db:CancelMLDataProcessingJob",
        "neptune-db:CancelMLModelTrainingJob",
        "neptune-db:CancelMLModelTransformJob",
        "neptune-db:CreateMLEndpoint",
        "neptune-db:DeleteMLEndpoint",
        "neptune-db:GetMLDataProcessingJobStatus",
        "neptune-db:GetMLEndpointStatus",
        "neptune-db:GetMLModelTrainingJobStatus",
        "neptune-db:GetMLModelTransformJobStatus",
        "neptune-db:ListMLDataProcessingJobs",
        "neptune-db:ListMLEndpoints",
        "neptune-db:ListMLModelTrainingJobs",
        "neptune-db:ListMLModelTransformJobs",
        "neptune-db:StartMLDataProcessingJob",
        "neptune-db:StartMLModelTrainingJob",
        "neptune-db:StartMLModelTransformJob"
      ],
      "Resource": "arn:aws:neptune-db:us-east-1:123456789012:cluster-ABCD1234EFGH5678IJKL90MNOP/*"
    }
  ]
}
```

------

## Ejemplo de política que otorga acceso completo a las consultas
<a name="iam-auth-data-policy-example-full-query"></a>

La siguiente política concede acceso completo a las operaciones de consulta de gráficos de Neptune, pero no a características como el restablecimiento rápido, los flujos, el programa de carga masiva, la administración de modelos de Neptune ML, etc.:

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement":[
    {
      "Effect": "Allow",
      "Action": [
        "neptune-db:ReadDataViaQuery",
        "neptune-db:WriteDataViaQuery",
        "neptune-db:DeleteDataViaQuery",
        "neptune-db:GetEngineStatus",
        "neptune-db:GetQueryStatus",
        "neptune-db:CancelQuery"
      ],
      "Resource": "arn:aws:neptune-db:us-east-1:123456789012:cluster-ABCD1234EFGH5678IJKL90MNOP/*"
    }
  ]
}
```

------

## Ejemplo de política que concede acceso completo únicamente a las consultas de Gremlin
<a name="iam-auth-data-policy-example-full-gremlin-access"></a>

La siguiente política concede acceso completo a las operaciones de consulta de gráficos de Neptune utilizando el lenguaje de consulta Gremlin, pero no a las consultas en otros lenguajes, ni a características como el restablecimiento rápido, los flujos, el programa de carga masiva, la administración de modelos de Neptune ML, etc.:

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement":[
    {
      "Effect": "Allow",
      "Action": [
        "neptune-db:ReadDataViaQuery",
        "neptune-db:WriteDataViaQuery",
        "neptune-db:DeleteDataViaQuery",
        "neptune-db:GetEngineStatus",
        "neptune-db:GetQueryStatus",
        "neptune-db:CancelQuery"
      ],
      "Resource": [
        "arn:aws:neptune-db:us-east-1:123456789012:cluster-ABCD1234EFGH5678IJKL90MNOP/*"
      ],
      "Condition": {
        "StringEquals": {
           "neptune-db:QueryLanguage":"Gremlin"
        }
      }
    }
  ]
}
```

------

## Ejemplo de política que permite el acceso total excepto el restablecimiento rápido
<a name="iam-auth-data-policy-example-all-but-fast-reset"></a>

La siguiente política concede acceso completo a un clúster de base de datos de Neptune, excepto para el restablecimiento rápido:

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "neptune-db:*",
      "Resource": "arn:aws:neptune-db:us-east-1:123456789012:cluster-ABCD1234EFGH5678IJKL90MNOP/*"
    },
    {
      "Effect": "Deny",
      "Action": "neptune-db:ResetDatabase",
      "Resource": "arn:aws:neptune-db:us-east-1:123456789012:cluster-ABCD1234EFGH5678IJKL90MNOP/*"
    }
  ]
}
```

------

# Uso de roles vinculados a servicios para Amazon Neptune
<a name="security-iam-service-linked-roles"></a>

[Amazon Neptune utiliza funciones vinculadas a AWS Identity and Access Management servicios (IAM).](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#iam-term-service-linked-role) Un rol vinculado a un servicio es un tipo único de rol de IAM que está vinculado directamente a Neptune. Neptune predefine las funciones vinculadas al servicio e incluyen todos los permisos que el servicio requiere para llamar a otros AWS servicios en su nombre. 

**importante**  
Para ciertas características de administración, Amazon Neptune utiliza una tecnología operativa que comparte con Amazon RDS. Esto incluye la *función vinculada a un servicio* y los permisos de la API de administración.

Un rol vinculado a un servicio simplifica la configuración de Neptune porque ya no tendrá que añadir manualmente los permisos necesarios. Neptune define los permisos de sus roles vinculados a servicios y, a menos que esté definido de otra manera, solo Neptune puede asumir sus roles. Los permisos definidos incluyen las políticas de confianza y de permisos, y que la política de permisos no se pueda asociar a ninguna otra entidad de IAM.

Las funciones se pueden eliminar únicamente después de eliminar primero sus recursos relacionados. De esta forma, se protegen los recursos de Neptune, ya que se evita que se puedan eliminar accidentalmente permisos de acceso a los recursos.

**Para obtener información sobre otros servicios que admiten funciones vinculadas a servicios, consulte [AWS Servicios que funcionan con IAM y busque los servicios con](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html) la opción **Sí** en la columna Función vinculada a servicios.** Elija una opción **Sí** con un enlace para ver la documentación acerca del rol vinculado al servicio en cuestión.

## Permisos de roles vinculados a servicios de Neptune
<a name="service-linked-role-permissions"></a>

Neptune usa la función `AWSServiceRoleForRDS` vinculada al servicio para permitir que Neptune y Amazon RDS AWS llamen a los servicios en nombre de sus instancias de base de datos. El rol vinculado a servicios `AWSServiceRoleForRDS` confía en el servicio `rds.amazonaws.com` para asumir el rol.

La política de permisos del rol permite que Neptune realice las siguientes acciones en los recursos especificados:
+ Acciones en `ec2`:
  + `AssignPrivateIpAddresses`
  + `AuthorizeSecurityGroupIngress`
  + `CreateNetworkInterface`
  + `CreateSecurityGroup`
  + `DeleteNetworkInterface`
  + `DeleteSecurityGroup`
  + `DescribeAvailabilityZones`
  + `DescribeInternetGateways`
  + `DescribeSecurityGroups`
  + `DescribeSubnets`
  + `DescribeVpcAttribute`
  + `DescribeVpcs`
  + `ModifyNetworkInterfaceAttribute`
  + `RevokeSecurityGroupIngress`
  + `UnassignPrivateIpAddresses`
+ Acciones en `sns`:
  + `ListTopic`
  + `Publish`
+ Acciones en `cloudwatch`:
  + `PutMetricData`
  + `GetMetricData`
  + `CreateLogStream`
  + `PullLogEvents`
  + `DescribeLogStreams`
  + `CreateLogGroup`

**nota**  
Debe configurar permisos para permitir a una entidad de IAM (como un usuario, grupo o rol) crear, editar o eliminar un rol vinculado a servicios. Podría encontrarse con el siguiente mensaje de error:  
Unable to create the resource. Verify that you have permission to create service linked role. Otherwise wait and try again later.  
Si aparece este mensaje, asegúrese de que tiene los siguientes permisos habilitados:   

```
{
    "Action": "iam:CreateServiceLinkedRole",
    "Effect": "Allow",
    "Resource": "arn:aws:iam::*:role/aws-service-role/rds.amazonaws.com/AWSServiceRoleForRDS",
    "Condition": {
        "StringLike": {
            "iam:AWSServiceName":"rds.amazonaws.com"
        }
    }
}
```
 Para obtener más información, consulte [Permisos de roles vinculados a servicios](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html#service-linked-role-permissions) en la *Guía del usuario de IAM*.

## Creación de un rol vinculado a un servicio de Neptune
<a name="create-service-linked-role"></a>

No necesita crear manualmente un rol vinculado a servicios. Al crear una instancia o un clúster, Neptune se encarga de crear el rol vinculado al servicio.

**importante**  
Para obtener más información, consulte [Un nuevo rol ha aparecido en mi cuenta de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/troubleshoot_roles.html#troubleshoot_roles_new-role-appeared) en la *Guía del usuario de IAM*.

Si elimina este rol vinculado a un servicio y necesita crearlo de nuevo, puede utilizar el mismo proceso para volver a crear el rol en su cuenta. Al crear una instancia o un clúster, Neptune se encarga de crear el rol vinculado al servicio de nuevo.

## Modificación de un rol vinculado a un servicio de Neptune
<a name="edit-service-linked-role"></a>

Neptune no le permite editar el rol vinculado a servicios `AWSServiceRoleForRDS`. Después de crear un rol vinculado al servicio, no podrá cambiar el nombre del rol, ya que varias entidades podrían hacer referencia al rol. Sin embargo, sí puede editar la descripción del rol con IAM. Para obtener más información, consulte [Edición de un rol vinculado a servicios](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html#edit-service-linked-role) en la *Guía del usuario de IAM*.

## Eliminación de un rol vinculado a un servicio de Neptune
<a name="delete-service-linked-role"></a>

Si ya no necesita utilizar una característica o servicio que requiere un rol vinculado a servicios, recomendamos que elimine dicho rol. Así no tendrá una entidad no utilizada que no se supervise ni mantenga de forma activa. Sin embargo, debe eliminar todas las instancias y clústeres para poder eliminar la función vinculada al servicio asociada.

### Limpiar una función vinculada a un servicio antes de eliminar
<a name="delete-service-linked-role-cleanup"></a>

Antes de poder utilizar IAM para eliminar un rol vinculado a un servicio, primero debe confirmar que dicho rol no tiene sesiones activas y eliminar los recursos que utiliza.

**Para comprobar si el rol vinculado a un servicio tiene una sesión activa en la consola de IAM**

1. Inicie sesión en la consola de IAM Consola de administración de AWS y ábrala en. [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)

1. En el panel de navegación de la consola de IAM, elija **Roles (Roles)**. A continuación, seleccione el nombre (no la casilla de verificación) del rol de `AWSServiceRoleForRDS`.

1. En la página **Resumen** del rol seleccionado, seleccione la pestaña **Asesor de acceso**.

1. En la pestaña **Asesor de acceso**, revise la actividad reciente del rol vinculado a servicios.
**nota**  
Si no está seguro de si Neptune utiliza el rol `AWSServiceRoleForRDS`, puede intentar eliminar el rol para comprobarlo. Si el servicio está utilizando el rol, este no podrá eliminarse y podrá ver las regiones en las que se está utilizando. Si el rol se está utilizando, debe esperar que la sesión finalice para poder eliminarlo. No se puede revocar la sesión de un rol vinculado a servicios. 

Si desea quitar la función `AWSServiceRoleForRDS`, primero debe eliminar *todos* sus clústeres e instancias.

#### Eliminación de todas las instancias
<a name="delete-service-linked-role-instances"></a>

Use alguno de estos procedimientos para eliminar cada una de sus instancias.

**Para eliminar una instancia (consola)**

1. Abra la consola de Amazon RDS en [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/).

1. En el panel de navegación, seleccione **Instances (Instancias)**.

1. En la lista **Instances**, elija la instancia que desea eliminar.

1. Elija **Instance actions** y, a continuación, **Delete**.

1. Si aparece el mensaje **Create final Snapshot? (¿Crear instantánea final?)**, elija **Yes (Sí)** o **No**.

1. Si eligió **Yes (Sí)** en el paso anterior, en **Final snapshot name (Nombre de instantánea final)** escriba el nombre de la instantánea final.

1. Elija **Eliminar**.

**Para eliminar una instancia (AWS CLI)**  
Consulte `[delete-db-instance](https://docs.aws.amazon.com/cli/latest/reference/neptune/delete-db-instance.html)` en la *referencia de comandos de AWS CLI *.

**Para eliminar una instancia (API)**  
Consulte `[DeleteDBInstance](&doc-domaiAPI_DeleteDBInstance.html)`.

#### Eliminación de todos los clústeres
<a name="delete-service-linked-role-clusters"></a>

Utilice uno de los siguientes procedimientos para eliminar un clúster y, a continuación, repita el procedimiento para cada uno de los clústeres.

**Para eliminar un clúster (consola)**

1. [Inicie sesión en la consola AWS de administración y abra la consola de Amazon Neptune en https://console.aws.amazon.com/neptune/ casa.](https://console.aws.amazon.com/neptune/home)

1. En la lista **Clusters**, elija el clúster que desea eliminar.

1. Elija **Cluster Actions** y, a continuación, **Delete**.

1. Elija **Eliminar**.

**Para eliminar un clúster (CLI)**  
Consulte `[delete-db-cluster](https://docs.aws.amazon.com/cli/latest/reference/neptune/delete-db-cluster.html)` en la *referencia de comandos de AWS CLI *.

**Para eliminar un clúster (API)**  
Consulte `[DeleteDBCluster](API_DeleteDBCluster.html)`

Puede utilizar la consola de IAM, la CLI de IAM o la API de IAM para eliminar el rol vinculado a servicios `AWSServiceRoleForRDS`. Para obtener más información, consulte [Eliminación de un rol vinculado a servicios](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html#delete-service-linked-role) en la *Guía del usuario de IAM*.

# Uso de credenciales temporales para conectarse a Amazon Neptune
<a name="iam-auth-temporary-credentials"></a>

Amazon Neptune admite la autenticación de IAM con credenciales temporales.

Puede utilizar un rol asumido para la autenticación mediante una política de autenticación de IAM, como una de las políticas de ejemplo de las secciones anteriores.

Si está utilizando credenciales temporales, debe especificar `AWS_SESSION_TOKEN` además de `AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY` y `SERVICE_REGION`.

**nota**  
Las credenciales temporales caducan después de un intervalo especificado, *incluido el token de sesión*.  
Tiene que actualizar el token de sesión cuando solicite nuevas credenciales. Para obtener más información, consulte [Uso de credenciales de seguridad temporales para solicitar acceso a los recursos](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_use-resources.html). AWS 

En las siguientes secciones se describe cómo permitir el acceso y recuperar las credenciales temporales.

**Para realizar la autenticación mediante credenciales temporales**

1. Cree un rol de IAM con permiso para obtener acceso a un clúster de Neptune. Para obtener información acerca de la creación de esta función, consulta [Uso de diferentes tipos de políticas de IAM para controlar el acceso a Neptune](security-iam-access-manage.md#iam-auth-policy).

1. Añada una relación de confianza al rol que permite el acceso a las credenciales.

   Recupere las credenciales temporales, incluidas las credenciales `AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY` y `AWS_SESSION_TOKEN`.

1. Conéctese al clúster de Neptune y firme las solicitudes con las credenciales temporales. Para obtener más información acerca de la conexión y la firma de solicitudes, consulte [Conexión a la base de datos de Amazon Neptune mediante autenticación AWS Identity and Access Management](iam-auth-connecting.md).

Hay varios métodos para recuperar credenciales temporales según el entorno.

**Topics**
+ [Obtener credenciales temporales mediante el AWS CLI](#iam-auth-temporary-credentials-cli)
+ [Configuración de AWS Lambda para la autenticación IAM de Neptune](#iam-auth-temporary-credentials-lambda)
+ [Configuración de Amazon EC2 para la autenticación de IAM de Neptune](#iam-auth-temporary-credentials-ec2)

## Obtener credenciales temporales mediante el AWS CLI
<a name="iam-auth-temporary-credentials-cli"></a>

Para obtener las credenciales con AWS Command Line Interface (AWS CLI), primero debe agregar una relación de confianza que conceda permiso para asumir el rol al AWS usuario que ejecutará el AWS CLI comando.

Añada la siguiente relación de confianza al rol de autenticación de IAM de Neptune. Si no tiene un rol de autenticación de IAM de Neptune, consulte [Uso de diferentes tipos de políticas de IAM para controlar el acceso a Neptune](security-iam-access-manage.md#iam-auth-policy).

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::123456789012:user/test"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
```

------

Para obtener información sobre cómo añadir la relación de confianza a la función, consulte [Edición de la relación de confianza para una función existente](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/edit_trust.html) en la *guía de administración de AWS Directory Service *.

Si la política de Neptune aún no está asociada a un rol, cree un nuevo rol. Asocie la política de autenticación de IAM de Neptune y, a continuación, añada la política de confianza. Para obtener información sobre la creación de una función nueva, consulte [Creación de una función nueva](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/create_role.html).

**nota**  
En las siguientes secciones se presupone que lo tiene AWS CLI instalado.

**Para ejecutar el AWS CLI manualmente**

1. Escriba el comando siguiente para solicitar las credenciales usando la AWS CLI. Reemplace el ARN del rol, el nombre de la sesión y el perfil por sus propios valores.

   ```
   aws sts assume-role  --role-arn  arn:aws:iam::123456789012:role/NeptuneIAMAuthRole --role-session-name test --profile testprofile
   ```

1. A continuación se muestra un ejemplo de salida del comando. La sección `Credentials` contiene los valores que necesita.
**nota**  
Registre el valor de `Expiration` ya que lo necesitará para obtener nuevas credenciales transcurrido este tiempo.

   ```
   {
       "AssumedRoleUser": {
           "AssumedRoleId": "AROA3XFRBF535PLBIFPI4:s3-access-example",
           "Arn": "arn:aws:sts::123456789012:assumed-role/xaccounts3access/s3-access-example"
       },
       "Credentials": {
           "SecretAccessKey": "9drTJvcXLB89EXAMPLELB8923FB892xMFI",
           "SessionToken": "AQoXdzELDDY//////////wEaoAK1wvxJY12r2IrDFT2IvAzTCn3zHoZ7YNtpiQLF0MqZye/qwjzP2iEXAMPLEbw/m3hsj8VBTkPORGvr9jM5sgP+w9IZWZnU+LWhmg+a5fDi2oTGUYcdg9uexQ4mtCHIHfi4citgqZTgco40Yqr4lIlo4V2b2Dyauk0eYFNebHtYlFVgAUj+7Indz3LU0aTWk1WKIjHmmMCIoTkyYp/k7kUG7moeEYKSitwQIi6Gjn+nyzM+PtoA3685ixzv0R7i5rjQi0YE0lf1oeie3bDiNHncmzosRM6SFiPzSvp6h/32xQuZsjcypmwsPSDtTPYcs0+YN/8BRi2/IcrxSpnWEXAMPLEXSDFTAQAM6Dl9zR0tXoybnlrZIwMLlMi1Kcgo5OytwU=",
           "Expiration": "2016-03-15T00:05:07Z",
           "AccessKeyId": "ASIAJEXAMPLEXEG2JICEA"
       }
   }
   ```

1. Establezca las variables de entorno mediante las credenciales devueltas.

   ```
   export AWS_ACCESS_KEY_ID=ASIAJEXAMPLEXEG2JICEA
   export AWS_SECRET_ACCESS_KEY=9drTJvcXLB89EXAMPLELB8923FB892xMFI
   export AWS_SESSION_TOKEN=AQoXdzELDDY//////////wEaoAK1wvxJY12r2IrDFT2IvAzTCn3zHoZ7YNtpiQLF0MqZye/qwjzP2iEXAMPLEbw/m3hsj8VBTkPORGvr9jM5sgP+w9IZWZnU+LWhmg+a5fDi2oTGUYcdg9uexQ4mtCHIHfi4citgqZTgco40Yqr4lIlo4V2b2Dyauk0eYFNebHtYlFVgAUj+7Indz3LU0aTWk1WKIjHmmMCIoTkyYp/k7kUG7moeEYKSitwQIi6Gjn+nyzM+PtoA3685ixzv0R7i5rjQi0YE0lf1oeie3bDiNHncmzosRM6SFiPzSvp6h/32xQuZsjcypmwsPSDtTPYcs0+YN/8BRi2/IcrxSpnWEXAMPLEXSDFTAQAM6Dl9zR0tXoybnlrZIwMLlMi1Kcgo5OytwU=
   
   export SERVICE_REGION=us-east-1 or us-east-2 or us-west-1 or us-west-2 or ca-central-1 or
                         ca-west-1 or sa-east-1 or eu-north-1 or eu-south-2 or eu-west-1 or eu-west-2 or eu-west-3 or
                         eu-central-1 or me-south-1 or me-central-1 or il-central-1 or af-south-1 or ap-east-1 or
                         ap-northeast-1 or ap-northeast-2 or ap-northeast-3 or ap-southeast-1 or ap-southeast-2 or
                         ap-southeast-3 or ap-southeast-4 or ap-southeast-5 or ap-south-1 or ap-south-2 or
                         cn-north-1 or cn-northwest-1 or
                         us-gov-east-1 or us-gov-west-1
   ```

1. Conéctese utilizando uno de los siguientes métodos.
   + [Conexión a bases de datos de Amazon Neptune mediante la autenticación de IAM con la consola de Gremlin](iam-auth-connecting-gremlin-console.md)
   + [Conexión a bases de datos de Amazon Neptune mediante IAM con Java de Gremlin](iam-auth-connecting-gremlin-java.md)
   + [Conexión a bases de datos de Amazon Neptune mediante la autenticación de IAM con Java y SPARQL](iam-auth-connecting-sparql-java.md)
   + [Conexión a bases de datos de Amazon Neptune mediante la autenticación de IAM con Python](iam-auth-connecting-python.md)

**Para usar un script para obtener las credenciales**

1. Ejecute el siguiente comando para instalar el comando **jq**. El script usa este comando para analizar el resultado del AWS CLI comando.

   ```
   sudo yum -y install jq
   ```

1. Cree un archivo con el nombre `credentials.sh` en un editor de texto y añada el siguiente texto. Reemplace la región del servicio, el ARN del rol, el nombre de la sesión y el perfil por sus propios valores.

   ```
   #!/bin/bash
   
   creds_json=$(aws sts assume-role  --role-arn  arn:aws:iam::123456789012:role/NeptuneIAMAuthRole --role-session-name test --profile testprofile)
   
   export AWS_ACCESS_KEY_ID=$(echo "$creds_json" | jq .Credentials.AccessKeyId |tr -d '"')
   export AWS_SECRET_ACCESS_KEY=$(echo "$creds_json" | jq .Credentials.SecretAccessKey| tr -d '"')
   export AWS_SESSION_TOKEN=$(echo "$creds_json" | jq .Credentials.SessionToken|tr -d '"')
   
   export SERVICE_REGION=us-east-1 or us-east-2 or us-west-1 or us-west-2 or ca-central-1 or
                         ca-west-1 or sa-east-1 or eu-north-1 or eu-south-2 or eu-west-1 or eu-west-2 or eu-west-3 or
                         eu-central-1 or me-south-1 or me-central-1 or il-central-1 or af-south-1 or ap-east-1 or
                         ap-northeast-1 or ap-northeast-2 or ap-northeast-3 or ap-southeast-1 or ap-southeast-2 or
                         ap-southeast-3 or ap-southeast-4 or ap-southeast-5 or ap-south-1 or ap-south-2 or
                         cn-north-1 or cn-northwest-1 or
                         us-gov-east-1 or us-gov-west-1
   ```

1. Conéctese utilizando uno de los siguientes métodos.
   + [Conexión a bases de datos de Amazon Neptune mediante la autenticación de IAM con la consola de Gremlin](iam-auth-connecting-gremlin-console.md)
   + [Conexión a bases de datos de Amazon Neptune mediante IAM con Java de Gremlin](iam-auth-connecting-gremlin-java.md)
   + [Conexión a bases de datos de Amazon Neptune mediante la autenticación de IAM con Java y SPARQL](iam-auth-connecting-sparql-java.md)
   + [Conexión a bases de datos de Amazon Neptune mediante la autenticación de IAM con Python](iam-auth-connecting-python.md)

## Configuración de AWS Lambda para la autenticación IAM de Neptune
<a name="iam-auth-temporary-credentials-lambda"></a>

AWS Lambda incluye las credenciales automáticamente cada vez que se ejecuta la función Lambda.

En primer lugar, añada una relación de confianza que conceda permiso para asumir el rol al servicio de Lambda.

Añada la siguiente relación de confianza al rol de autenticación de IAM de Neptune. Si no tiene un rol de autenticación de IAM de Neptune, consulte [Uso de diferentes tipos de políticas de IAM para controlar el acceso a Neptune](security-iam-access-manage.md#iam-auth-policy).

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Service": "lambda.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
```

------

Para obtener información sobre cómo añadir la relación de confianza a la función, consulte [Edición de la relación de confianza para una función existente](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/edit_trust.html) en la *guía de administración de AWS Directory Service*.

Si la política de Neptune aún no está asociada a un rol, cree un nuevo rol. Asocie la política de autenticación de IAM de Neptune y, a continuación, añada la política de confianza. Para obtener información sobre la creación de una función nueva, consulte [Creación de una función nueva](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/create_role.html) en la *guía de administración de AWS Directory Service *.

**Para obtener acceso a Neptune desde Lambda**

1. Inicie sesión en Consola de administración de AWS y abra la AWS Lambda consola en [https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/).

1. Cree una nueva función Lambda para Python versión 3.6.

1. Asigne el rol `AWSLambdaVPCAccessExecutionRole` a la función Lambda. Esto es necesario para obtener acceso a los recursos de Neptune, que son solo VPC.

1. Asigne el rol de IAM de autenticación de Neptune a la función de Lambda.

   Para obtener más información, consulte [Permisos de AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/intro-permission-model.html) en la *Guía para desarrolladores de AWS Lambda *.

1.  Copie la muestra de Python de autenticación de IAM en el código de la función Lambda.

   Para obtener más información acerca de la muestra y el código de muestra, consulte [Conexión a bases de datos de Amazon Neptune mediante la autenticación de IAM con Python](iam-auth-connecting-python.md).

## Configuración de Amazon EC2 para la autenticación de IAM de Neptune
<a name="iam-auth-temporary-credentials-ec2"></a>

Amazon EC2 le permite utilizar perfiles de instancia para proporcionar credenciales automáticamente. Para obtener más información, consulte [Uso de perfiles de instancias](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html) en la *Guía del usuario de IAM*.

En primer lugar, añada una relación de confianza que conceda permiso para asumir el rol al servicio de Amazon EC2.

Añada la siguiente relación de confianza al rol de autenticación de IAM de Neptune. Si no tiene un rol de autenticación de IAM de Neptune, consulte [Uso de diferentes tipos de políticas de IAM para controlar el acceso a Neptune](security-iam-access-manage.md#iam-auth-policy).

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Service": "ec2.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
```

------

Para obtener información sobre cómo añadir la relación de confianza a la función, consulte [Edición de la relación de confianza para una función existente](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/edit_trust.html) en la *guía de administración de AWS Directory Service *.

Si la política de Neptune aún no está asociada a un rol, cree un nuevo rol. Asocie la política de autenticación de IAM de Neptune y, a continuación, añada la política de confianza. Para obtener información sobre la creación de una función nueva, consulte [Creación de una función nueva](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/create_role.html) en la *guía de administración de AWS Directory Service *.

**Para usar un script para obtener las credenciales**

1. Ejecute el siguiente comando para instalar el comando **jq**. El script utiliza este comando para analizar la salida del comando **curl**.

   ```
   sudo yum -y install jq
   ```

1. Cree un archivo con el nombre `credentials.sh` en un editor de texto y añada el siguiente texto. Reemplace la región de servicio por su propio valor.

   ```
   TOKEN=$( curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600" )
   role_name=$( curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/iam/security-credentials/ )
   creds_json=$( curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/iam/security-credentials/${role_name} )
   
   export AWS_ACCESS_KEY_ID=$(echo "$creds_json" | jq .AccessKeyId |tr -d '"')
   export AWS_SECRET_ACCESS_KEY=$(echo "$creds_json" | jq .SecretAccessKey| tr -d '"')
   export AWS_SESSION_TOKEN=$(echo "$creds_json" | jq .Token|tr -d '"')
   
   export SERVICE_REGION=us-east-1 or us-east-2 or us-west-1 or us-west-2 or ca-central-1 or
                         ca-west-1 or sa-east-1 or eu-north-1 or eu-south-2 or eu-west-1 or eu-west-2 or eu-west-3 or
                         eu-central-1 or me-south-1 or me-central-1 or il-central-1 or af-south-1 or ap-east-1 or
                         ap-northeast-1 or ap-northeast-2 or ap-northeast-3 or ap-southeast-1 or ap-southeast-2 or
                         ap-southeast-3 or ap-southeast-4 or ap-southeast-5 or ap-south-1 or ap-south-2 or
                         cn-north-1 or cn-northwest-1 or
                         us-gov-east-1 or us-gov-west-1
   ```

1. Ejecute el script en el shell `bash` con el comando `source`:

   ```
   source credentials.sh
   ```

   Aún mejor es agregar los comandos de este script al archivo `.bashrc` de la instancia EC2 para que se invoquen automáticamente cuando inicie sesión, lo que hará que las credenciales temporales estén disponibles en la consola de Gremlin.

1. Conéctese utilizando uno de los siguientes métodos.
   + [Conexión a bases de datos de Amazon Neptune mediante la autenticación de IAM con la consola de Gremlin](iam-auth-connecting-gremlin-console.md)
   + [Conexión a bases de datos de Amazon Neptune mediante IAM con Java de Gremlin](iam-auth-connecting-gremlin-java.md)
   + [Conexión a bases de datos de Amazon Neptune mediante la autenticación de IAM con Java y SPARQL](iam-auth-connecting-sparql-java.md)
   + [Conexión a bases de datos de Amazon Neptune mediante la autenticación de IAM con Python](iam-auth-connecting-python.md)

# Registro y supervisión del uso y el rendimiento en Amazon Neptune
<a name="security-monitoring"></a>

Amazon Neptune admite varios métodos para monitorizar el rendimiento y el uso:
+ **Estado del clúster**: compruebe el estado del motor de base de datos de gráficos de un clúster de Neptune. Para obtener más información, consulte [Compruebe el estado de una instancia de Neptune](access-graph-status.md).
+ **Amazon CloudWatch**: Neptune envía automáticamente las métricas a las alarmas CloudWatch y también las admite CloudWatch . Para obtener más información, consulte [Monitorización de Neptune con Amazon CloudWatch](cloudwatch.md).
+ **Archivos de registro de auditoría**: consulte, descargue o vea los archivos de registro de base de datos con la consola de Neptune. Para obtener más información, consulte [Uso de registros de auditoría con un clúster de Amazon Neptune](auditing.md).
+ **Publicación de registros en Amazon CloudWatch Logs**: puede configurar un clúster de base de datos de Neptune para publicar datos de registros de auditoría en un grupo de registros de Amazon CloudWatch Logs. Con CloudWatch Logs, puede realizar un análisis en tiempo real de los datos de registro, usarlos CloudWatch para crear alarmas y ver métricas, y usar CloudWatch Logs para almacenar sus registros de registro en un almacenamiento de alta durabilidad. Para obtener más información, consulte [Registros de Neptune CloudWatch ](cloudwatch-logs.md).
+ **AWS CloudTrail**— Neptune admite el registro de API mediante. CloudTrail Para obtener más información, consulte [Registro de llamadas a la API de Amazon Neptune con AWS CloudTrail](cloudtrail.md).
+ **Etiquetado**: utilice etiquetas para añadir metadatos a sus recursos de Neptune y realizar un seguimiento del uso en función de las etiquetas. Para obtener más información, consulte [Etiquetado de recursos de Amazon Neptune](tagging.md).

# Amazon Neptune y puntos de enlace de VPC de interfaz ()AWS PrivateLink
<a name="vpc-interface-endpoints"></a>

Puede utilizarla [AWS PrivateLink](https://aws.amazon.com/privatelink/)para crear una conexión privada entre su VPC y los puntos de enlace de la API de Amazon Neptune. Puede acceder a las operaciones de la API de Amazon Neptune como si estuvieran en su VPC, sin utilizar una puerta de enlace a Internet, un dispositivo NAT o una conexión de VPN. El tráfico entre su VPC y Amazon Neptune permanece dentro de la red de Amazon.

Amazon Neptune comparte la infraestructura de API con Amazon Relational Database Service. *Para configurar los puntos de enlace de la interfaz de VPC para Amazon Neptune, siga las instrucciones de la [API de Amazon RDS y los puntos de enlace de la VPC de la interfaz (AWS PrivateLink) de la Guía del usuario de Amazon](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/vpc-interface-endpoints.html) Aurora.*

# Consideraciones de conformidad para Amazon Neptune
<a name="neptune-compliance"></a>

Para saber si uno Servicio de AWS está dentro del ámbito de aplicación de programas de conformidad específicos, consulte Alcance por programa de [conformidad Servicios de AWS en Alcance por programa](https://aws.amazon.com/compliance/services-in-scope/)Servicios de AWS de de conformidad que le interese. Para obtener información general, consulte Programas de [AWS cumplimiento > Programas AWS](https://aws.amazon.com/compliance/programs/) .

Puede descargar informes de auditoría de terceros utilizando AWS Artifact. Para obtener más información, consulte [Descarga de informes en AWS Artifact](https://docs.aws.amazon.com/artifact/latest/ug/downloading-documents.html) .

Su responsabilidad de cumplimiento al Servicios de AWS utilizarlos viene determinada por la confidencialidad de sus datos, los objetivos de cumplimiento de su empresa y las leyes y reglamentos aplicables. Para obtener más información sobre su responsabilidad de conformidad al utilizarlos Servicios de AWS, consulte [AWS la documentación de seguridad](https://docs.aws.amazon.com/security/).

# Creación de implementaciones de Amazon Neptune resilientes y tolerantes a los desastres
<a name="disaster-recovery-resiliency"></a>

La infraestructura AWS global se basa en AWS regiones y zonas de disponibilidad. AWS Las regiones proporcionan varias zonas de disponibilidad aisladas y separadas físicamente, que están conectadas mediante redes de baja latencia, alto rendimiento y alta redundancia. Con las zonas de disponibilidad, puede diseñar y utilizar aplicaciones y bases de datos que realizan una conmutación por error automática entre zonas de disponibilidad sin interrupciones. Las zonas de disponibilidad tienen una mayor disponibilidad, tolerancia a errores y escalabilidad que las infraestructuras tradicionales de centros de datos únicos o múltiples. 

Un clúster de base de datos de Amazon Neptune solo se puede crear en una Amazon VPC que tenga un mínimo de dos subredes en al menos dos zonas de disponibilidad. Mediante la distribución de las instancias del clúster en al menos dos zonas de disponibilidad, Neptune contribuye a garantizar que haya instancias disponibles en el clúster de base de datos en el caso improbable de que se produzca un error en una zona de disponibilidad. El volumen de un clúster de base de datos de Neptune siempre abarca tres zonas de disponibilidad. De este modo, se proporciona un almacenamiento duradero y con un menor riesgo de pérdida de datos.

[Para obtener más información sobre AWS las regiones y las zonas de disponibilidad, consulte Infraestructura global.AWS](https://aws.amazon.com/about-aws/global-infrastructure/)