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.
Conexión a bases de datos de Amazon Neptune mediante IAM con Java de Gremlin
Este es un ejemplo de cómo conectarse a Neptune mediante la API Java de Gremlin con la firma Sig4 (se supone que se tienen conocimientos generales sobre el uso de Maven). En este ejemplo, se utiliza la biblioteca Amazon Neptune SigV4 Signerpom.xml:
nota
Los siguientes ejemplos utilizanrequestInterceptor(), que 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 siguientes ejemplos se utiliza la versión 2.x, donde es una instancia. DefaultCredentialsProvider software.amazon.awssdk.auth.credentials.AwsCredentialsProvider Si va a actualizar de la versión 1.x a la 2.x, consulte los cambios en el proveedor de credenciales en la documentación del AWS SDK para 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
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. 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.).
-
Cree un nuevo rol de IAM en la AWS cuenta de la base de datos de Neptune que permita el acceso a la base de datos de Neptune y permita asumir el rol desde la cuenta de IAM de la aplicación. user/role Utilice una política de confianza de:
-
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, la función de la cuenta de la aplicación se asumirá mediante el DefaultCredentialProviderChain.
STSclientLuegoSTSclientse usa a través deSTSAssumeRoleSessionCredentialsProviderpara asumir el rol hospedado en la AWS cuenta de base 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(); }