Membatasi akses ke rahasia - AWS Bimbingan Preskriptif

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

Membatasi akses ke rahasia

Keamanan adalah prioritas utama di AWS. Dalam AWS Well-Architected Framework, praktik terbaik Store and use secrets merekomendasikan agar Anda membatasi akses ke rahasia, log dan mengaudit akses ke rahasia, dan Anda mendapatkan akses melalui API alih-alih memberikan akses ke seseorang. Ini terkait dengan Menghasilkan kata sandi acak dengan menggunakan AWS Secrets Manager, yang sebelumnya dibahas dalam panduan ini.

Di masa lalu, kredensi yang digunakan untuk mengautentikasi ke database, pihak ketiga APIs, token, dan rahasia lainnya mungkin telah disematkan dalam kode sumber atau dalam file lingkungan. Di banyak organisasi, administrator database masih dapat mengakses semua kredensi pengguna database. Namun, lebih aman jika tidak. Kami menyarankan Anda:

  • Batasi akses ke Secrets Manager melalui kebijakan AWS Identity and Access Management (IAM) yang dilampirkan ke peran AWS layanan atau peran IAM untuk pengguna.

  • Memperluas akses terprogram ke rahasia di Secrets Manager hanya melalui panggilan API ke Secrets Manager.

  • Hindari menggunakan rahasia hard-code.

  • Jangan lewatkan nilai kredensi dalam variabel.

  • Pastikan bahwa rahasia langsung digunakan oleh aplikasi atau infrastruktur, bukan oleh pengguna manusia.

Contoh kode berikut menunjukkan pendekatan yang dapat Anda gunakan untuk melindungi data sensitif saat membuat database. Saat Anda membuat database, Anda dapat meminta input pengguna sebagai kata sandi dan kemudian memutar kata sandi, atau Anda dapat menggunakan kata sandi acak dari awal. Membuat kata sandi acak dari awal dapat membantu Anda menangani dan mengelola kredensitas dengan lebih aman.

Cuplikan kode berikut membuat sumber daya database, dan password = local.passwddata mengambil kata sandi dari variabel lokal.

resource "aws_db_instance" "default" { count = var.createdb == true ? 1 : 0 allocated_storage = 20 identifier = var.identifier db_name = var.databasename engine = "mysql" engine_version = "8.0.32" instance_class = "db.t3.micro" username = "admin" password = local.passwddata skip_final_snapshot = true publicly_accessible = false vpc_security_group_ids = [aws_security_group.db.id] db_subnet_group_name = aws_db_subnet_group.db.0.name }

Cuplikan kode berikut membuat kata sandi acak atau menerima kata sandi yang disediakan pengguna. Terraformmenyimpan kata sandi ini sebagai variabel lokal sehingga Anda dapat menggunakan variabel kata sandi ini nanti dalam kode.

locals { passwddata = var.passwddata != null ? var.passwddata : data.aws_secretsmanager_random_password.test.random_secrets }