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
Hier ist ein Beispiel dafür, wie Sie mithilfe der Gremlin-Java-API mit Sig4-Signatur eine Verbindung zu Neptune herstellen können (es werden allgemeine Kenntnisse über die Verwendung von Maven vorausgesetzt). In diesem Beispiel wird die Amazon Neptune SigV4 Signer-Bibliothekpom.xml:
Anmerkung
Die folgenden Beispiele verwendenrequestInterceptor(), was in 3.6.6 eingeführt wurde. TinkerPop Wenn Sie eine frühere TinkerPop Version als 3.6.6 (aber 3.5.5 oder höher) verwenden, verwenden Sie handshakeInterceptor() statt requestInterceptor() in den folgenden Codebeispielen.
<dependency> <groupId>com.amazonaws</groupId> <artifactId>amazon-neptune-sigv4-signer</artifactId> <version>3.1.0</version> </dependency>
Der Amazon Neptune SigV4 Signer unterstützt beide Versionen 1.x und 2.x des Java SDK. AWS In den folgenden Beispielen wird 2.x verwendet, wobei es sich um eine Instanz handelt. DefaultCredentialsProvider software.amazon.awssdk.auth.credentials.AwsCredentialsProvider Wenn Sie von 1.x auf 2.x aktualisieren, lesen Sie die Änderungen des Credentials-Providers in der Dokumentation zum 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); }
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-Instance, Lambda-Funktion, ECS-Task usw.).
-
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:
-
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.
STSclientDasSTSclientwird 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", 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(); }