Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Menghubungkan ke database Amazon Neptunus menggunakan IAM dengan Gremlin Java
Berikut adalah contoh cara terhubung ke Neptunus menggunakan driver Gremlin Java dengan penandatanganan Sigv4 (ini mengasumsikan pengetahuan umum tentang penggunaan Maven).
catatan
Contoh berikut telah diperbarui untuk menyertakan penggunaan requestInterceptor (). Ini ditambahkan di TinkerPop 3.6.6. Sebelum TinkerPop versi 3.6.6, contoh kode menggunakan HandshakeInterceptor (), yang tidak digunakan lagi dengan rilis itu.
<dependency> <groupId>com.amazonaws</groupId> <artifactId>amazon-neptune-sigv4-signer</artifactId> <version>3.1.0</version> </dependency>
Amazon Neptune SiGv4 Signer mendukung penggunaan kedua versi 1.x dan 2.x dari Java SDK. AWS Contoh berikut menggunakan 2.x di mana DefaultCredentialsProvider adalah software.amazon.awssdk.auth.credentials.AwsCredentialsProvider instance, tetapi Anda bisa sama-sama menggunakan formulir 1.x dengan apapun. com.amazonaws.auth.AWSCredentialsProvider Jika Anda memutakhirkan dari 1.x ke 2.x, Anda dapat membaca lebih lanjut tentang perubahan antara 1.x dan 2.x dalam perubahan penyedia Credentials dari dokumentasi SDK for Java 2.x. AWS
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)", 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); }
Autentikasi IAM lintas akun
Amazon Neptunus mendukung otentikasi IAM lintas akun melalui penggunaan asumsi peran, juga kadang-kadang disebut sebagai rantai peran. Untuk menyediakan akses ke cluster Neptunus dari aplikasi yang dihosting di akun yang berbeda: AWS
-
Buat pengguna atau peran IAM baru di AWS akun aplikasi, dengan kebijakan kepercayaan yang memungkinkan pengguna atau peran untuk mengambil peran IAM lain. Tetapkan peran ini ke komputasi yang menghosting aplikasi (EC2 misalnya, fungsi Lambda, Tugas ECS, dll.).
-
Buat peran IAM baru di akun AWS database Neptunus yang memungkinkan akses ke database Neptunus dan memungkinkan asumsi peran dari pengguna/peran IAM akun aplikasi. Gunakan kebijakan kepercayaan dari:
-
Gunakan contoh kode berikut sebagai panduan tentang cara menggunakan dua peran ini untuk memungkinkan aplikasi mengakses Neptunus. Dalam contoh ini, peran akun aplikasi akan diasumsikan melalui DefaultCredentialProviderChainsaat membuat
STSclient. KemudianSTSclientdigunakan melaluiSTSAssumeRoleSessionCredentialsProvideruntuk mengambil peran yang dihosting di akun database AWS Neptunus.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(); }