Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Herstellen einer Verbindung zu Amazon Neptune Neptune-Datenbanken mithilfe von IAM mit Gremlin Java
Verwenden Sie TinkerPop 3.4.11 oder höher, um mit Sig4-Signatur eine Verbindung zu Neptune herzustellen
Hier ist ein Beispiel für die Verbindung zu Neptune mithilfe der Gremlin Java API mit Sig4-Signatur, wenn Sie TinkerPop 3.4.11 oder höher verwenden (es setzt allgemeine Kenntnisse über die Verwendung von Maven voraus). Definieren Sie zunächst die Abhängigkeiten als Teil der Datei pom.xml
:
Anmerkung
Die folgenden Beispiele wurden aktualisiert und beinhalten nun auch die Verwendung von requestInterceptor (). Dies wurde in 3.6.6 hinzugefügt. TinkerPop Vor TinkerPop Version 3.6.6 wurde in den Codebeispielen HandshakeInterceptor () verwendet, das in dieser Version veraltet war.
<dependency> <groupId>com.amazonaws</groupId> <artifactId>amazon-neptune-sigv4-signer</artifactId> <version>2.4.0</version> </dependency>
Verwenden Sie dann Code wie den folgenden:
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) .requestInterceptor( 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); }
Anmerkung
Wenn Sie ein Upgrade von 3.4.11
ausführen, entfernen Sie Verweise auf die amazon-neptune-gremlin-java-sigv4
-Bibliothek. Dies ist nicht mehr erforderlich, wenn Sie requestInterceptor()
wie im Beispiel oben gezeigt verwenden. Versuchen Sie nicht, requestInterceptor()
in Verbindung mit dem Channelizer (SigV4WebSocketChannelizer.class
) zu verwenden, da dies zu Fehlern führen würde.
Kontenübergreifende IAM-Authentifizierung
Amazon Neptune unterstützt die kontoübergreifende IAM-Authentifizierung mithilfe von Rollenübernahme, manchmal auch als Rollenverkettung bezeichnet. So gewähren Sie Zugriff auf einen Neptune-Cluster von einer Anwendung aus, die in einem anderen AWS Konto gehostet wird:
-
Erstellen Sie einen neuen IAM-Benutzer oder eine neue IAM-Rolle im AWS Anwendungskonto mit einer Vertrauensrichtlinie, die es dem Benutzer oder der Rolle ermöglicht, eine andere IAM-Rolle anzunehmen. Weisen Sie diese Rolle dem Computer zu, der die Anwendung hostet (EC2 Instanz, Lambda-Funktion, ECS-Task usw.).
{ "Version": "2012-10-17", "Statement": [ { "Sid": "assume-role-policy", "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "(ARN of the role in the database account)" } ] }
-
Erstellen Sie eine neue IAM-Rolle im AWS Neptune-Datenbankkonto, die den Zugriff auf die Neptune-Datenbank und die Rollenübernahme vom IAM-Benutzer/der Rolle des Anwendungskontos ermöglicht. Verwenden Sie eine Vertrauensrichtlinie von:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": [ "(ARN of application account IAM user or role)" ] }, "Action": "sts:AssumeRole", "Condition": {} } ] }
-
Verwenden Sie das folgende Codebeispiel als Anleitung zur Verwendung dieser beiden Rollen, um der Anwendung den Zugriff auf Neptune zu ermöglichen. In diesem Beispiel wird die Rolle des Anwendungskontos DefaultCredentialProviderChainbeim Erstellen des übernommen.
STSclient
DasSTSclient
wird dann über das verwendetSTSAssumeRoleSessionCredentialsProvider
, um die im AWS Neptune-Datenbankkonto gehostete Rolle zu übernehmen.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", 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(); }
Eine TinkerPop frühere Version als 3.4.11 verwenden, um eine Verbindung zu Neptune mit Sig4-Signatur herzustellen
TinkerPop Frühere Versionen unterstützten die im vorherigen Abschnitt gezeigte requestInterceptor()
Konfiguration nicht und müssen sich daher auf das amazon-neptune-gremlin-java-sigv4
Paket verlassen. 3.4.11
Dies ist eine Neptune-Bibliothek, die die SigV4WebSocketChannelizer
Klasse enthält, die den TinkerPop Standard-Channelizer durch eine ersetzt, die automatisch eine SigV4-Signatur einfügen kann. Führen Sie nach Möglichkeit ein Upgrade auf TinkerPop 3.4.11 oder höher durch, da die Bibliothek veraltet ist. amazon-neptune-gremlin-java-sigv4
Hier ist ein Beispiel dafür, wie man mit der Gremlin Java API mit Sig4-Signatur eine Verbindung zu Neptune herstellt, wenn man TinkerPop Versionen vor 3.4.11 verwendet (es setzt allgemeine Kenntnisse über die Verwendung von Maven voraus).
Definieren Sie zunächst die Abhängigkeiten als Teil der Datei pom.xml
:
<dependency> <groupId>com.amazonaws</groupId> <artifactId>amazon-neptune-gremlin-java-sigv4</artifactId> <version>2.4.0</version> </dependency>
Die Abhängigkeit oben enthält die Gremlin-Treiberversion 3.4.10
. Es ist zwar möglich, neuere Gremlin-Treiberversionen (bis 3.4.13
) zu verwenden. Ein Upgrade des Treibers über Version 3.4.10 hinaus sollte jedoch eine Änderung enthalten, sodass das oben beschriebene requestInterceptor()
-Modell verwendet wird.
Das gremlin-driver
-Cluster-Objekt sollte dann wie folgt im Java-Code konfiguriert werden:
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();