Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Bayangkan Anda memiliki klaster DynamoDB Accelerator DAX () yang berjalan di AWS satu akun (akun A), dan DAX klaster harus dapat diakses dari instans Amazon Elastic Compute Cloud (EC2Amazon) di akun AWS lain (akun B). Dalam tutorial ini, Anda melakukannya dengan meluncurkan sebuah EC2 instance di akun B dengan IAM peran dari akun B. Anda kemudian menggunakan kredenal keamanan sementara dari EC2 instance untuk mengambil IAM peran dari akun A. Akhirnya, Anda menggunakan kredenal keamanan sementara dari asumsi IAM peran di akun A untuk membuat panggilan aplikasi melalui koneksi VPC peering Amazon ke DAX cluster di akun A. Untuk melakukan tugas-tugas ini, Anda akan memerlukan akses administratif di kedua akun. AWS
penting
Tidak mungkin untuk memiliki DAX cluster mengakses tabel DynamoDB dari akun yang berbeda.
Mengatur IAM
-
Buat file teks bernama
AssumeDaxRoleTrust.json
dengan konten berikut, yang EC2 memungkinkan Amazon bekerja atas nama Anda.{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
-
Di akun B, buat peran yang EC2 dapat digunakan Amazon saat meluncurkan instance.
aws iam create-role \ --role-name AssumeDaxRole \ --assume-role-policy-document file://AssumeDaxRoleTrust.json
-
Buat file teks bernama
AssumeDaxRolePolicy.json
dengan konten berikut, yang memungkinkan kode berjalan pada EC2 instance di akun B untuk mengambil IAM peran dalam akun A. GantiaccountA
dengan ID aktual akun A.{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::
accountA
:role/DaxCrossAccountRole" } ] } -
Tambahkan kebijakan tersebut ke peran yang baru Anda buat.
aws iam put-role-policy \ --role-name AssumeDaxRole \ --policy-name AssumeDaxRolePolicy \ --policy-document file://AssumeDaxRolePolicy.json
-
Buat profil instans untuk mengizinkan instans menggunakan peran.
aws iam create-instance-profile \ --instance-profile-name AssumeDaxInstanceProfile
-
Kaitkan peran dengan profil instans.
aws iam add-role-to-instance-profile \ --instance-profile-name AssumeDaxInstanceProfile \ --role-name AssumeDaxRole
-
Buat file teks bernama
DaxCrossAccountRoleTrust.json
berisi konten berikut, yang mengizinkan akun B mengambil peran akun A. GantiaccountB
dengan ID aktual akun B.{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::
accountB
:role/AssumeDaxRole" }, "Action": "sts:AssumeRole" } ] } -
Di akun A, buat peran yang dapat diambil oleh akun B.
aws iam create-role \ --role-name DaxCrossAccountRole \ --assume-role-policy-document file://DaxCrossAccountRoleTrust.json
-
Buat file teks bernama
DaxCrossAccountPolicy.json
yang memungkinkan akses ke DAX cluster. Gantidax-cluster-arn
dengan Amazon Resource Name (ARN) yang benar dari DAX cluster Anda.{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "dax:GetItem", "dax:BatchGetItem", "dax:Query", "dax:Scan", "dax:PutItem", "dax:UpdateItem", "dax:DeleteItem", "dax:BatchWriteItem", "dax:ConditionCheckItem" ], "Resource": "
dax-cluster-arn
" } ] } -
Di akun A, tambahkan kebijakan ke peran tersebut.
aws iam put-role-policy \ --role-name DaxCrossAccountRole \ --policy-name DaxCrossAccountPolicy \ --policy-document file://DaxCrossAccountPolicy.json
Mengatur VPC
-
Temukan grup subnet dari DAX cluster akun A. Ganti
cluster-name
dengan nama DAX cluster yang harus diakses akun B.aws dax describe-clusters \ --cluster-name
cluster-name
--query 'Clusters[0].SubnetGroup' -
Dengan menggunakan itu
subnet-group
, temukan clusterVPC.aws dax describe-subnet-groups \ --subnet-group-name
subnet-group
\ --query 'SubnetGroups[0].VpcId' -
Dengan menggunakan itu
vpc-id
, temukan VPC'sCIDR.aws ec2 describe-vpcs \ --vpc
vpc-id
\ --query 'Vpcs[0].CidrBlock' -
Dari akun B, buat VPC menggunakan yang berbeda, tidak tumpang tindih CIDR dari yang ditemukan pada langkah sebelumnya. Kemudian, buat setidaknya satu subnet. Anda dapat menggunakan wizard VPC pembuatan di AWS Management Console atau AWS CLI.
-
Dari akun B, minta koneksi peering ke akun A VPC seperti yang dijelaskan dalam Membuat dan menerima koneksi VPC peering. Dari akun A, terima koneksi.
-
Dari akun B, temukan tabel VPC routing baru. Ganti
vpc-id
dengan ID yang VPC Anda buat di akun B.aws ec2 describe-route-tables \ --filters 'Name=vpc-id,Values=
vpc-id
' \ --query 'RouteTables[0].RouteTableId' -
Tambahkan rute untuk mengirim lalu lintas yang ditujukan untuk akun A CIDR ke koneksi VPC peering. Ingatlah untuk mengganti masing-masing
user input placeholder
dengan nilai yang benar untuk akun Anda.aws ec2 create-route \ --route-table-id
accountB-route-table-id
\ --destination-cidraccountA-vpc-cidr
\ --vpc-peering-connection-idpeering-connection-id
-
Dari akun A, temukan tabel rute DAX cluster menggunakan yang
vpc-id
Anda temukan sebelumnya.aws ec2 describe-route-tables \ --filters 'Name=vpc-id, Values=
accountA-vpc-id
' \ --query 'RouteTables[0].RouteTableId' -
Dari akun A, tambahkan rute untuk mengirim lalu lintas yang ditujukan untuk akun B CIDR ke koneksi VPC peering. Ganti masing-masing
user input placeholder
dengan nilai yang benar untuk akun Anda.aws ec2 create-route \ --route-table-id
accountA-route-table-id
\ --destination-cidraccountB-vpc-cidr
\ --vpc-peering-connection-idpeering-connection-id
-
Dari akun B, luncurkan EC2 instance VPC yang Anda buat sebelumnya. Berikan
AssumeDaxInstanceProfile
. Anda dapat menggunakan wizard peluncuran di AWS Management Console atau AWS CLI. Perhatikan grup keamanan instans. -
Dari akun A, temukan grup keamanan yang digunakan oleh DAX cluster. Ingatlah untuk mengganti
cluster-name
dengan nama DAX cluster Anda.aws dax describe-clusters \ --cluster-name
cluster-name
\ --query 'Clusters[0].SecurityGroups[0].SecurityGroupIdentifier' -
Perbarui grup keamanan DAX klaster untuk mengizinkan lalu lintas masuk dari grup keamanan EC2 instans yang Anda buat di akun B. Ingatlah untuk mengganti
user input placeholders
dengan nilai yang benar untuk akun Anda.aws ec2 authorize-security-group-ingress \ --group-id
accountA-security-group-id
\ --protocol tcp \ --port 8111 \ --source-groupaccountB-security-group-id
\ --group-owneraccountB-id
Pada titik ini, aplikasi pada EC2 instance akun B dapat menggunakan profil instance untuk mengambil arn:aws:iam::
peran dan menggunakan DAX cluster.accountA-id
:role/DaxCrossAccountRole
Ubah DAX klien untuk memungkinkan akses lintas akun
catatan
AWS Security Token Service (AWS STS) kredensial adalah kredensial sementara. Beberapa klien menangani pembaruan secara otomatis, sementara klien lain memerlukan logika tambahan untuk memperbarui kredensialnya. Sebaiknya Anda mengikuti panduan dokumentasi yang sesuai.
Bagian ini membantu Anda memodifikasi kode DAX klien yang ada untuk memungkinkan DAX akses lintas akun. Jika Anda belum memiliki kode DAX klien, Anda dapat menemukan contoh kode kerja di Jawa dan DAX tutorial.
-
Tambahkan impor berikut.
import com.amazonaws.auth.STSAssumeRoleSessionCredentialsProvider; import com.amazonaws.services.securitytoken.AWSSecurityTokenService; import com.amazonaws.services.securitytoken.AWSSecurityTokenServiceClientBuilder;
-
Dapatkan penyedia kredensial dari AWS STS dan buat objek DAX klien. Ingatlah untuk mengganti masing-masing
user input placeholder
dengan nilai yang benar untuk akun Anda.AWSSecurityTokenService awsSecurityTokenService = AWSSecurityTokenServiceClientBuilder .standard() .withRegion(
region
) .build(); STSAssumeRoleSessionCredentialsProvider credentials = new STSAssumeRoleSessionCredentialsProvider.Builder("arn:aws:iam::accountA
:role/RoleName
", "TryDax") .withStsClient(awsSecurityTokenService) .build(); DynamoDB client = AmazonDaxClientBuilder.standard() .withRegion(region
) .withEndpointConfiguration(dax_endpoint
) .withCredentials(credentials) .build();