Mengonfigurasikan akses lintas akun ke Amazon DynamoDB - AWS Prescriptive Guidance

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Mengonfigurasikan akses lintas akun ke Amazon DynamoDB

Shashi Dalmia, Imhoertha Ojior, dan Esteban Serna Parra, Amazon Web Services

Ringkasan

Pola ini menjelaskan langkah-langkah untuk mengonfigurasi akses lintas akun ke Amazon DynamoDB dengan menggunakan kebijakan berbasis sumber daya. Untuk beban kerja yang menggunakan DynamoDB, semakin umum menggunakan strategi isolasi beban kerja untuk meminimalkan ancaman keamanan dan memenuhi persyaratan kepatuhan. Menerapkan strategi isolasi beban kerja seringkali memerlukan akses lintas akun dan lintas wilayah ke sumber daya DynamoDB dengan menggunakan kebijakan berbasis identitas (IAM). AWS Identity and Access Management Ini melibatkan pengaturan izin IAM dan membangun hubungan kepercayaan antara. Akun AWS

Kebijakan berbasis sumber daya untuk DynamoDB sangat menyederhanakan postur keamanan untuk beban kerja lintas akun. Pola ini menyediakan langkah-langkah dan kode sampel untuk menunjukkan bagaimana Anda dapat mengkonfigurasi AWS Lambda fungsi dalam satu Akun AWS untuk menulis data ke tabel database DynamoDB di akun yang berbeda.

Prasyarat dan batasan

Prasyarat

  • Dua aktif Akun AWS. Pola ini mengacu pada akun ini sebagai Akun A dan Akun B.

  • AWS Command Line Interface (AWS CLI) diinstal dan dikonfigurasi untuk mengakses Akun A, untuk membuat tabel DynamoDB. Langkah-langkah lain dalam pola ini memberikan instruksi untuk menggunakan konsol IAM, DynamoDB, dan Lambda. Jika Anda berencana untuk menggunakannya, AWS CLI konfigurasikan untuk mengakses kedua akun.

Batasan

Arsitektur

Diagram berikut menunjukkan arsitektur akun tunggal. AWS Lambda, Amazon Elastic Compute Cloud (Amazon EC2), dan DynamoDB semuanya berada di akun yang sama. Dalam skenario ini, fungsi Lambda dan EC2 instans Amazon dapat mengakses DynamoDB. Untuk memberikan akses ke tabel DynamoDB, Anda dapat membuat kebijakan berbasis identitas di IAM, atau Anda dapat membuat kebijakan berbasis sumber daya di DynamoDB.

Menggunakan izin IAM untuk mengakses tabel DynamoDB di akun yang sama.

Diagram berikut menunjukkan arsitektur multi-akun. Jika sumber daya dalam satu Akun AWS memerlukan akses ke tabel DynamoDB di akun lain, Anda perlu menyiapkan kebijakan berbasis sumber daya di DynamoDB untuk memberikan akses yang diperlukan. Misalnya, dalam diagram berikut, akses ke tabel DynamoDB di Akun A diberikan ke fungsi Lambda di Akun B dengan menggunakan kebijakan berbasis sumber daya.

Menggunakan kebijakan berbasis sumber daya untuk mengakses tabel DynamoDB di akun yang berbeda.

Pola ini menjelaskan akses lintas akun antara Lambda dan DynamoDB. Anda dapat menggunakan langkah serupa untuk yang lain Layanan AWS jika izin yang sesuai dikonfigurasi di kedua akun. Misalnya, jika ingin memberikan akses fungsi Lambda ke bucket Amazon Simple Storage Service (Amazon S3) di Akun A, Anda dapat membuat kebijakan berbasis sumber daya di Amazon S3 dan menambahkan izin ke peran eksekusi Lambda di Akun B.

Alat

Layanan AWS

  • Amazon DynamoDB adalah layanan database NoSQL yang dikelola sepenuhnya yang menyediakan kinerja yang cepat, dapat diprediksi, dan terukur.

  • AWS Identity and Access Management (IAM) membantu Anda mengelola akses ke sumber daya AWS dengan aman dengan mengontrol siapa yang diautentikasi dan diberi wewenang untuk menggunakannya.

  • AWS Lambdaadalah layanan komputasi yang membantu Anda menjalankan kode tanpa perlu menyediakan atau mengelola server. Ini menjalankan kode Anda hanya bila diperlukan dan skala secara otomatis, jadi Anda hanya membayar untuk waktu komputasi yang Anda gunakan.

Kode

Pola ini mencakup kode sampel di bagian Informasi tambahan untuk menunjukkan bagaimana Anda dapat mengonfigurasi fungsi Lambda di Akun B untuk menulis ke tabel DynamoDB di Akun A. Kode disediakan hanya untuk tujuan ilustrasi dan pengujian. Jika Anda menerapkan pola ini di lingkungan produksi, gunakan kode sebagai referensi, dan sesuaikan untuk lingkungan Anda sendiri.

Praktik terbaik

Epik

TugasDeskripsiKeterampilan yang dibutuhkan

Buat kebijakan di Akun B.

Kebijakan IAM ini memungkinkan PutItemtindakan untuk tabel DynamoDB di Akun A.

  1. Masuk ke Akun B di Konsol Manajemen AWS.

  2. Buka konsol IAM.

  3. Di panel navigasi, pilih Kebijakan dan kemudian pilih Buat kebijakan.

  4. Pada halaman Tentukan izin, untuk editor kebijakan, pilih JSON.

  5. Masukkan kebijakan berikut.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "Statement1", "Effect": "Allow", "Action": "dynamodb:PutItem", "Resource": "arn:aws:dynamodb:<Region>:<Account-A-ID>:table/Table-Account-A" } ] }
  6. Ganti <Region> dan <Account-A-ID> dengan nilai Anda, lalu pilih Berikutnya.

  7. Untuk nama Kebijakan, masukkan nama unik untuk kebijakan Anda, sepertiDynamoDB-PutItem-Policy.

  8. (Opsional) Tambahkan deskripsi kebijakan.

  9. Pilih Buat kebijakan.

AWS Umum

Buat peran di Akun B.

Fungsi Lambda di Akun B menggunakan peran IAM ini untuk mengakses tabel DynamoDB di Akun A.

  1. Buka konsol IAM.

  2. Di panel navigasi, pilih Peran, lalu pilih Buat peran.

  3. Untuk Pilih entitas tepercaya, pilih Layanan AWS.

  4. Di bagian Use case, pilih Lambda.

  5. Pilih Berikutnya: Izin.

  6. Di kotak Filter kebijakan, masukkan DynamoDB.

  7. Dalam daftar kebijakan DynamoDB, pilih. DynamoDB-PutItem-Policy

  8. Kosongkan kotak Filter kebijakan, lalu masukkan Lambda.

  9. Dalam daftar kebijakan Lambda, pilih AWSLambda Jalankan.

  10. Pilih Berikutnya: Nama, tinjau, dan buat.

  11. Untuk nama Peran, masukkan nama unik untuk peran Anda, sepertiDynamoDB-PutItemAccess.

  12. (Opsional) Tambahkan deskripsi peran.

  13. (Opsional) Tambahkan metadata ke peran dengan melampirkan tag sebagai pasangan nilai kunci.

  14. Pilih Buat peran.

Untuk informasi selengkapnya tentang membuat peran, lihat dokumentasi IAM.

AWS Umum

Perhatikan ARN peran.

  1. Buka konsol IAM.

  2. Di panel navigasi, pilih Peran.

  3. Di kotak pencarian, masukkanDynamoDB-PutItemAccess, lalu pilih peran.

  4. Pada halaman ringkasan untuk peran tersebut, salin Nama Sumber Daya Amazon (ARN). Anda menggunakan ARN saat Anda mengatur fungsi Lambda.

AWS Umum
TugasDeskripsiKeterampilan yang dibutuhkan

Buat tabel DynamoDB.

Gunakan AWS CLI perintah berikut untuk membuat tabel DynamoDB.

aws dynamodb create-table \ --table-name Table-Account-A \ --attribute-definitions \ AttributeName=category,AttributeType=S \ AttributeName=item,AttributeType=S \ --key-schema \ AttributeName=category,KeyType=HASH \ AttributeName=item,KeyType=RANGE \ --provisioned-throughput \ ReadCapacityUnits=5,WriteCapacityUnits=5 \ --resource-policy \ '{ "Version": "2012-10-17", "Statement": [ { "Sid": "Statement1", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<Account-B-ID>:role/<Role-Name>" }, "Action": "dynamodb:PutItem", "Resource": "arn:aws:dynamodb:<Region>:<Account-A-ID>:table/Table-Account-A" } ] }'

Ganti yang berikut ini dalam contoh kode ini:

  • <Account-B-ID>adalah ID Akun B.

  • <Role-Name>adalah nama peran IAM yang Anda buat, sepertiDynamoDB-PutItemAccess.

  • <Region>adalah Wilayah AWS tempat Anda membuat tabel DynamoDB.

  • <Account-A-ID>adalah ID Akun A.

catatan

Anda menentukan konfigurasi kebijakan berbasis sumber daya dalam create-table pernyataan menggunakan tanda. --resource-policy Kebijakan ini mengacu pada ARN untuk tabel DynamoDB di Akun A.

Untuk informasi selengkapnya tentang membuat tabel, lihat dokumentasi DynamoDB.

AWS Umum
TugasDeskripsiKeterampilan yang dibutuhkan

Buat fungsi Lambda untuk menulis data ke DynamoDB.

  1. Masuk ke Akun B di Konsol Manajemen AWS.

  2. Buka Konsol Lambda.

  3. Di panel navigasi, pilih Fungsi, lalu pilih Buat fungsi.

  4. Untuk Nama, masukkan lambda_write_function.

  5. Untuk Runtime, pilih Python 3.8 atau yang lebih baru.

  6. Di bawah Ubah peran eksekusi default, pilih Gunakan peran yang ada.

  7. Untuk peran yang ada, pilih peran IAM yang Anda buat, sepertiDynamoDB-PutItemAccess.

  8. Pilih Buat fungsi.

  9. Di tab Kode, tempel kode sampel yang disediakan di bagian Informasi tambahan dari pola ini. Ganti yang berikut ini dalam contoh kode ini:

    • <Account-A-ID>adalah ID Akun A.

    • <Region>adalah Wilayah AWS tempat Anda membuat tabel DynamoDB.

  10. Pilih Deploy.

  11. Pilih Uji. Ini meminta Anda untuk mengonfigurasi acara pengujian. Buat acara baru dengan nama pilihan Anda, sepertiMyTestEventForWrite, lalu simpan konfigurasinya.

  12. Pilih UjiLagi. Ini menjalankan fungsi Lambda dengan nama acara yang Anda berikan.

  13. Periksa output dari fungsi. Ini harus menunjukkan bahwa fungsi mengakses tabel DynamoDB di Akun A dan mampu menulis data untuk itu.

Untuk informasi selengkapnya tentang membuat fungsi Lambda, lihat dokumentasi Lambda.

AWS Umum
TugasDeskripsiKeterampilan yang dibutuhkan

Hapus sumber daya.

Untuk menghindari timbulnya biaya yang terkait dengan sumber daya yang dibuat dalam pola ini, lakukan hal berikut untuk menghapus sumber daya ini:

  1. Di Akun B, hapus fungsi Lambda yang Anda buat untuk terhubung ke DynamoDB. Untuk petunjuk, lihat dokumentasi Lambda.

  2. Di Akun A, hapus tabel DynamoDB yang Anda buat. Untuk petunjuk, lihat dokumentasi DynamoDB.

  3. Untuk praktik terbaik keamanan, hapus kebijakan IAM (DynamoDB-PutItem-Policy) saat tidak lagi diperlukan. Untuk informasi selengkapnya, lihat dokumentasi IAM.

  4. Untuk praktik terbaik keamanan, hapus peran IAM (DynamoDB-PutItemAccess) saat tidak lagi diperlukan. Untuk informasi selengkapnya, lihat dokumentasi IAM.

AWS Umum

Pemecahan Masalah

IsuSolusi

Saat membuat fungsi Lambda, Anda menerima kesalahan. ResourceNotFoundException

Konfirmasikan bahwa Anda telah memasukkan Wilayah AWS dan ID Akun A. Ini adalah bagian dari ARN untuk tabel DynamoDB.

Sumber daya terkait

Informasi tambahan

Kode sampel

import boto3 from datetime import datetime dynamodb_client = boto3.client('dynamodb') def lambda_handler(event, context): now = datetime.now().isoformat() data = dynamodb_client.put_item(TableName='arn:aws:dynamodb:<Region>:<Account-A-ID>:table/Table-Account-A', Item={"category": {"S": "Fruit"},"item": {"S": "Apple"},"time": {"S": now}}) return data
catatan

Ketika klien DynamoDB dipakai, ARN dari tabel DynamoDB disediakan bukan nama tabel. Ini diperlukan agar fungsi Lambda terhubung ke tabel DynamoDB yang benar saat dijalankan.