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-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 setzt allgemeine Kenntnisse über die Verwendung von Maven voraus). In diesem Beispiel wird die Amazon Neptune SigV4 Signer-Bibliothek verwendet, um das Signieren von Anfragen zu unterstützen. pom.xml:
Anmerkung
In den folgenden Beispielen wird verwendetrequestInterceptor(), was in 3.6.6 eingeführt wurde. TinkerPop Wenn Sie eine TinkerPop Version vor 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 Instance handelt. DefaultCredentialsProvider software.amazon.awssdk.auth.credentials.AwsCredentialsProvider Wenn Sie ein Upgrade von 1.x auf 2.x durchführen, lesen Sie die Änderungen des Providers für Anmeldeinformationen in der AWS SDK-Dokumentation für 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); }
Kontoübergreifende IAM-Authentifizierung
Amazon Neptune unterstützt die kontoübergreifende IAM-Authentifizierung mithilfe der Rollenübernahme, die manchmal auch als Rollenverkettung bezeichnet wird. https://docs.aws.amazon.com//neptune/latest/userguide/bulk-load-tutorial-chain-roles.html#bulk-load-tutorial-chain-cross-account Um den Zugriff auf einen Neptune-Cluster von einer Anwendung aus zu ermöglichen, die in einem anderen Konto gehostet wird: AWS
-
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 zu übernehmen. 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 ermöglicht und die Rollenübernahme vom IAM des Anwendungskontos aus ermöglicht. user/role 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 DefaultCredentialProviderChain beim Erstellen des übernommen.
STSclientDerSTSclientwird dann über den verwendetSTSAssumeRoleSessionCredentialsProvider, um die Rolle zu übernehmen, die im AWS Neptune-Datenbankkonto gehostet wird.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(); }