As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Conectando-se aos bancos IAM de dados do Amazon Neptune usando o Gremlin Java
Usando TinkerPop 3.4.11 ou superior para se conectar a Neptune com assinatura Sig4
Aqui está um exemplo de como se conectar a Neptune usando o Gremlin API Java com assinatura Sig4 ao usar 3.4.11 ou superior (pressupõe conhecimento geral sobre TinkerPop o uso do Maven). Primeiro, defina as dependências como parte do arquivo pom.xml
:
<dependency> <groupId>com.amazonaws</groupId> <artifactId>amazon-neptune-sigv4-signer</artifactId> <version>2.4.0</version> </dependency>
Depois, use o código da seguinte maneira:
import com.amazonaws.auth.DefaultAWSCredentialsProviderChain; 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) .handshakeInterceptor( r -> { try { NeptuneNettyHttpSigV4Signer sigV4Signer = new NeptuneNettyHttpSigV4Signer("(your region)
", new DefaultAWSCredentialsProviderChain()); 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); }
nota
Se você estiver realizando a atualização do 3.4.11
, remova as referências à biblioteca amazon-neptune-gremlin-java-sigv4
. Não é mais necessária ao usar handshakeInterceptor()
conforme mostrado no exemplo acima. Não tente usar o handshakeInterceptor()
com o canalizador (SigV4WebSocketChannelizer.class
), pois isso gerará erros.
IAMAutenticação entre contas
O Amazon Neptune oferece suporte à autenticação entre IAM contas por meio do uso da suposição de funções, também conhecida como encadeamento de funções. Para fornecer acesso a um cluster Neptune a partir de um aplicativo hospedado em uma conta diferente: AWS
-
Crie um novo IAM usuário ou função na AWS conta do aplicativo, com uma política de confiança que permita que o usuário ou função assuma outra IAM função. Atribua essa função à computação que hospeda o aplicativo (EC2instância, função LambdaECS, tarefa etc.).
{ "Version": "2012-10-17", "Statement": [ { "Sid": "assume-role-policy", "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "(ARN of the role in the database account)" } ] }
-
Crie uma nova IAM função na conta do banco de dados Neptune que permita acesso ao AWS banco de dados Neptune e permita a suposição de função a partir do usuário/função da conta do aplicativo. IAM Use uma política de confiança de:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": [ "(ARN of application account IAM user or role)" ] }, "Action": "sts:AssumeRole", "Condition": {} } ] }
-
Use o exemplo de código a seguir como orientação sobre como usar essas duas funções para permitir que o aplicativo acesse Neptune. Neste exemplo, a função da conta do aplicativo será assumida por meio do DefaultCredentialProviderChainao criar
STSclient
o. Em seguida,STSclient
é usado por meio doSTSAssumeRoleSessionCredentialsProvider
para assumir a função hospedada na conta do banco de dados Neptune AWS .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) .handshakeInterceptor( r -> { try { NeptuneNettyHttpSigV4Signer sigV4Signer = // new NeptuneNettyHttpSigV4Signer("us-west-2", new DefaultAWSCredentialsProviderChain()); 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(); }
Usando uma versão TinkerPop anterior à 3.4.11 para se conectar ao Netuno com a assinatura Sig4
TinkerPop as versões anteriores 3.4.11
não tinham suporte para a handshakeInterceptor()
configuração mostrada na seção anterior e, portanto, devem contar com o amazon-neptune-gremlin-java-sigv4
pacote. Essa é uma biblioteca Neptune que contém a classe, que substitui SigV4WebSocketChannelizer
o Channelizer TinkerPop padrão por uma que pode injetar automaticamente uma assinatura SigV4. Sempre que possível, atualize para TinkerPop 3.4.11 ou superior, porque a amazon-neptune-gremlin-java-sigv4
biblioteca está obsoleta.
Aqui está um exemplo de como se conectar ao Neptune usando o Gremlin API Java com assinatura Sig4 ao usar versões anteriores à 3.4.11 (pressupõe conhecimento geral sobre como TinkerPop usar o Maven).
Primeiro, defina as dependências como parte do arquivo pom.xml
:
<dependency> <groupId>com.amazonaws</groupId> <artifactId>amazon-neptune-gremlin-java-sigv4</artifactId> <version>2.4.0</version> </dependency>
A dependência acima incluirá a versão 3.4.10
do driver do Gremlin. Embora seja possível usar versões mais recentes do driver do Gremlin (até 3.4.13
), uma atualização do driver após a 3.4.10 deve incluir uma alteração para usar o modelo handshakeInterceptor()
descrito acima.
O objeto gremlin-driver
do cluster deve então ser configurado da seguinte forma no código Java:
import org.apache.tinkerpop.gremlin.driver.SigV4WebSocketChannelizer;
...
Cluster cluster = Cluster.build(your cluster
) .enableSsl(true) .channelizer(SigV4WebSocketChannelizer.class) .create(); Client client = cluster.connect(); client.submit("g.V().has('code','IAD')").all().get();