Memusatkan manajemen kunci akses IAM di AWS Organizations dengan menggunakan Terraform - AWS Prescriptive Guidance

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

Memusatkan manajemen kunci akses IAM di AWS Organizations dengan menggunakan Terraform

Aarti Rajput, Chintamani Aphale, T.V.R.L.Phani Kumar Dadi, Pratap Kumar Nanda, Pradip kumar Pandey, dan Mayuri Shinde, Amazon Web Services

Ringkasan

Pemberitahuan: AWS CodeCommit tidak lagi tersedia untuk pelanggan baru. Pelanggan yang sudah ada AWS CodeCommit dapat terus menggunakan layanan seperti biasa. Pelajari selengkapnya

Menegakkan aturan keamanan untuk kunci dan kata sandi adalah tugas penting bagi setiap organisasi. Salah satu aturan penting adalah memutar kunci AWS Identity and Access Management (IAM) secara berkala untuk menegakkan keamanan. Kunci akses AWS umumnya dibuat dan dikonfigurasi secara lokal setiap kali tim ingin mengakses AWS dari AWS Command Line Interface (AWS CLI) atau dari aplikasi di luar AWS. Untuk menjaga keamanan yang kuat di seluruh organisasi, kunci keamanan lama harus diubah atau dihapus setelah persyaratan dipenuhi atau secara berkala. Proses mengelola rotasi kunci di beberapa akun dalam suatu organisasi memakan waktu dan membosankan. Pola ini membantu Anda mengotomatiskan proses rotasi dengan menggunakan Account Factory for Terraform (AFT) dan layanan AWS.

Pola ini memberikan manfaat ini:

  • Mengelola kunci akses IDs dan kunci akses rahasia Anda di semua akun di organisasi Anda dari lokasi pusat.

  • Secara otomatis memutar variabel AWS_ACCESS_KEY_ID dan AWS_SECRET_ACCESS_KEY lingkungan.

  • Menegakkan perpanjangan jika kredensi pengguna disusupi.

Pola ini menggunakan Terraform untuk menerapkan fungsi AWS Lambda, aturan EventBridge Amazon, dan peran IAM. EventBridge Aturan berjalan secara berkala dan memanggil fungsi Lambda yang mencantumkan semua kunci akses pengguna berdasarkan kapan mereka dibuat. Fungsi Lambda tambahan membuat ID kunci akses baru dan kunci akses rahasia, jika kunci sebelumnya lebih tua dari periode rotasi yang Anda tentukan (misalnya, 45 hari), dan beri tahu administrator keamanan dengan menggunakan Amazon Simple Notification Service (Amazon SNS) dan Amazon Simple Email Service (Amazon SES). Rahasia dibuat di AWS Secrets Manager untuk pengguna tersebut, kunci akses rahasia lama disimpan di Secrets Manager, dan izin untuk mengakses kunci lama dikonfigurasi. Untuk memastikan bahwa kunci akses lama tidak lagi digunakan, itu dinonaktifkan setelah periode tidak aktif (misalnya, 60 hari, yang akan menjadi 15 hari setelah kunci diputar dalam contoh kami). Setelah periode buffer tidak aktif (misalnya, 90 hari, atau 45 hari setelah kunci diputar dalam contoh kami), kunci akses lama dihapus dari AWS Secrets Manager. Untuk detail arsitektur dan alur kerja, lihat bagian Arsitektur.

Prasyarat dan batasan

Arsitektur

Repositori AFT

Pola ini menggunakan Account Factory for Terraform (AFT) untuk membuat semua sumber daya AWS yang diperlukan dan pipeline kode untuk menyebarkan sumber daya di akun penerapan. Pipeline kode berjalan di dua repositori:

  • Kustomisasi global berisi kode Terraform yang akan berjalan di semua akun yang terdaftar di AFT.

  • Kustomisasi akun berisi kode Terraform yang akan berjalan di akun penerapan.

Detail sumber daya

CodePipeline Pekerjaan AWS membuat sumber daya berikut di akun penerapan:

  • EventBridge Aturan AWS dan aturan yang dikonfigurasi

  • account-inventoryFungsi Lambda

  • IAM-access-key-rotationFungsi Lambda

  • NotificationFungsi Lambda

  • Bucket Amazon Simple Storage Service (Amazon S3) yang berisi template email

  • Kebijakan IAM yang diperlukan

Arsitektur

Arsitektur untuk memusatkan manajemen kunci akses IAM di AWS Organizations

Diagram ini menggambarkan hal sebagai berikut:

  1. EventBridge Aturan memanggil fungsi account-inventory Lambda setiap 24 jam.

  2. Fungsi account-inventory Lambda menanyakan AWS Organizations untuk daftar semua akun AWS, nama akun IDs, dan email akun. 

  3. Fungsi account-inventory Lambda memulai fungsi IAM-access-key-auto-rotation Lambda untuk setiap akun AWS dan meneruskan metadata ke dalamnya untuk pemrosesan tambahan.

  4. Fungsi IAM-access-key-auto-rotation Lambda menggunakan peran IAM yang diasumsikan untuk mengakses akun AWS. Skrip Lambda menjalankan audit terhadap semua pengguna dan kunci akses IAM mereka di akun.

  5. Ambang batas rotasi kunci IAM (periode rotasi) dikonfigurasi sebagai variabel lingkungan saat fungsi IAM-access-key-auto-rotation Lambda diterapkan. Jika periode rotasi diubah, fungsi IAM-access-key-auto-rotation Lambda di-deploy kembali dengan variabel lingkungan yang diperbarui. Anda dapat mengonfigurasi parameter untuk mengatur periode rotasi, periode tidak aktif untuk kunci lama, dan buffer tidak aktif setelah itu kunci lama akan dihapus (lihat Menyesuaikan parameter untuk pipa kode di bagian Epik).

  6. Fungsi IAM-access-key-auto-rotation Lambda memvalidasi usia kunci akses berdasarkan konfigurasinya. Jika usia kunci akses IAM belum melebihi periode rotasi yang Anda tentukan, fungsi Lambda tidak akan mengambil tindakan lebih lanjut.

  7. Jika usia kunci akses IAM telah melebihi periode rotasi yang Anda tentukan, fungsi IAM-access-key-auto-rotation Lambda membuat kunci baru dan memutar kunci yang ada.

  8. Fungsi Lambda menyimpan kunci lama di Secrets Manager dan membatasi izin kepada pengguna yang kunci aksesnya menyimpang dari standar keamanan. Fungsi Lambda juga membuat kebijakan berbasis sumber daya yang memungkinkan hanya prinsipal IAM yang ditentukan untuk mengakses dan mengambil rahasia.

  9. Fungsi IAM-access-key-rotation Lambda memanggil fungsi LambdaNotification.

  10. Fungsi Notification Lambda menanyakan bucket S3 untuk template email dan secara dinamis menghasilkan pesan email dengan metadata aktivitas yang relevan.

  11. Fungsi Notification Lambda memanggil Amazon SES untuk tindakan lebih lanjut.

  12.  Amazon SES mengirimkan email ke alamat email pemilik akun dengan informasi yang relevan.

Alat

Layanan AWS

  • 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. Patern ini membutuhkan peran dan izin IAM.

  • AWS Lambda adalah 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.

  • AWS Secrets Manager membantu Anda mengganti kredensi hardcode dalam kode Anda, termasuk kata sandi, dengan panggilan API ke Secrets Manager untuk mengambil rahasia secara terprogram.

  • Amazon Simple Email Service (Amazon SES) membantu Anda mengirim dan menerima email dengan menggunakan alamat email dan domain Anda sendiri.

Alat-alat lainnya

  • Terraform adalah alat infrastruktur sebagai kode (IAc) HashiCorp yang membantu Anda membuat dan mengelola sumber daya cloud dan lokal.

Repositori kode

Instruksi dan kode untuk pola ini tersedia di repositori rotasi kunci akses GitHub IAM. Anda dapat menerapkan kode di akun penerapan pusat AWS Control Tower untuk mengelola rotasi kunci dari lokasi pusat.

Praktik terbaik

Epik

TugasDeskripsiKeterampilan yang dibutuhkan

Kloning repositori.

  1. Kloning repositori rotasi GitHub kunci akses IAM:

    $ git clone https://github.com/aws-samples/centralized-iam-key-management-aws-organizations-terraform.git
  2. Konfirmasikan bahwa salinan lokal repositori Anda berisi tiga folder:

    $ cd Iam-Access-keys-Rotation $ ls org-account-customization global-account-customization account-customization
DevOps insinyur
TugasDeskripsiKeterampilan yang dibutuhkan

Konfigurasikan akun bootstrap.

Sebagai bagian dari proses bootstrap AFT, Anda harus memiliki folder yang dipanggil aft-bootstrap di mesin lokal Anda.

  1. Salin semua file Terraform secara manual dari GitHub org-account-customizationfolder lokal Anda ke folder Andaaft-bootstrap.

  2. Jalankan perintah Terraform untuk mengonfigurasi peran lintas akun global di akun manajemen AWS Control Tower:

    $ cd aft-bootstrap $ terraform init $ terraform apply —auto-approve
DevOps insinyur

Konfigurasikan penyesuaian global.

Sebagai bagian dari pengaturan folder AFT, Anda harus memiliki folder yang dipanggil aft-global-customizations di mesin lokal Anda.

  1. Salin semua file Terraform secara manual dari GitHub global-account-customizationfolder lokal Anda ke folder Andaaft-global-customizations/terraform.

  2. Dorong kode ke AWS CodeCommit:

    $ git add * $ git commit -m "message" $ git push
DevOps insinyur

Konfigurasikan kustomisasi akun.

Sebagai bagian dari pengaturan folder AFT, Anda telah menjadi folder yang dipanggil aft-account-customizations di mesin lokal Anda.

  1. Buat folder dengan nomor akun penjual Anda.

  2. Salin manual semua file Terraform secara manual dari folder GitHub kustomisasi akun lokal Anda ke folder Anda. aft-account-customizations/<vended account>/terraform

  3. Dorong kode ke AWS CodeCommit:

    $ git add * $ git commit -m "message" $ git push
DevOps insinyur
TugasDeskripsiKeterampilan yang dibutuhkan

Sesuaikan parameter pipeline kode non-Terraform untuk semua akun.

Buat file yang disebut input.auto.tfvars di aft-global-customizations/terraform/ folder dan berikan data input yang diperlukan. Lihat file di GitHub repositori untuk nilai default.

DevOps insinyur

Sesuaikan parameter pipeline kode untuk akun penerapan.

Buat file yang dipanggil input.auto.tfvars di aft-account-customizations/<AccountName>/terraform/ folder dan dorong kode ke AWS CodeCommit. Mendorong kode ke AWS CodeCommit secara otomatis memulai pipeline kode.

Tentukan nilai untuk parameter berdasarkan persyaratan organisasi Anda, termasuk yang berikut ini (lihat file di repositori Github untuk nilai default):

  • s3_bucket_name— Nama ember unik untuk template email.

  • s3_bucket_prefix— Nama folder di dalam ember S3.

  • admin_email_address— Alamat email untuk administrator yang harus menerima pemberitahuan.

  • org_list_account— Nomor akun akun manajemen.

  • rotation_period— Jumlah hari setelah itu kunci harus diputar dari aktif ke tidak aktif.

  • inactive_period— Jumlah hari setelah tombol yang diputar harus dinonaktifkan. Nilai ini harus lebih besar dari nilairotation_period.

  • inactive_buffer— Masa tenggang antara rotasi dan penonaktifan kunci.

  • recovery_grace_period— Masa tenggang antara penonaktifan dan penghapusan kunci.

  • dry_run_flag— Setel ke true jika Anda ingin mengirim pemberitahuan ke administrator untuk tujuan pengujian, tanpa memutar kunci.

  • store_secrets_in_central_account— Setel ke true jika Anda ingin menyimpan rahasia di akun penerapan. Jika variabel diatur ke false (default), rahasia akan disimpan di akun anggota.

  • credential_replication_region— Wilayah AWS tempat Anda ingin menerapkan fungsi Lambda dan bucket S3 untuk template email.

  • run_lambda_in_vpc— Setel ke true untuk menjalankan fungsi Lambda di dalam VPC.

  • vpc_id— ID VPC dari akun penerapan, jika Anda ingin menjalankan fungsi Lambda di dalam VPC.

  • vpc_cidr— Rentang CIDR untuk akun penerapan.

  • subnet_id— Subnet IDs untuk akun penyebaran.

  • create_smtp_endpoint— Setel ke true jika Anda ingin mengaktifkan titik akhir email.

DevOps insinyur
TugasDeskripsiKeterampilan yang dibutuhkan

Validasi solusinya.

  1. Dari AWS Management Console, masuk ke akun penerapan.

  2. Buka konsol IAM dan periksa apakah kredensil pengguna (kunci akses IDs dan kunci rahasia) sedang diputar seperti yang ditentukan.

  3. Setelah kunci IAM diputar, konfirmasikan hal berikut:

    • Nilai lama disimpan di AWS Secrets Manager.

    • Nama rahasianya ada dalam formatAccount_<account ID>_User_<username>_AccessKey.

    • Pengguna yang Anda tentukan dalam admin_email_address parameter menerima pemberitahuan email tentang rotasi kunci.

DevOps insinyur
TugasDeskripsiKeterampilan yang dibutuhkan

Sesuaikan tanggal pemberitahuan email.

Jika Anda ingin mengirim notifikasi email pada hari tertentu sebelum menonaktifkan tombol akses, Anda dapat memperbarui fungsi IAM-access-key-auto-rotation Lambda dengan perubahan tersebut:

  1. Tentukan variabel yang disebutnotify-period.

  2. Tambahkan if kondisi main.py sebelum Anda menonaktifkan kunci:

    If (keyage>rotation-period-notify-period){ send_to_notifier(context, aws_account_id, account_name, resource_owner, resource_actions[resource_owner], dryrun, config.emailTemplateAudit) }
DevOps insinyur

Pemecahan Masalah

IsuSolusi

Pekerjaan account-inventory Lambda gagal AccessDenied saat mendaftar akun.

Jika mengalami masalah ini, Anda harus memvalidasi izin:

  1. Masuk ke akun yang baru dijual, buka CloudWatch konsol Amazon, lalu lihat grup CloudWatch /aws/lambda/account-inventory-lambda log.

  2. Di CloudWatch log terbaru, identifikasi nomor akun yang menyebabkan masalah akses ditolak.

  3. Masuk ke akun manajemen AWS Control Tower dan konfirmasikan bahwa peran tersebut allow-list-account telah dibuat.

  4. Jika peran tidak ada, jalankan kembali kode Terraform dengan menggunakan perintah. terraform apply

  5. Pilih tab Akun Tepercaya dan validasi bahwa akun yang sama dipercaya.

Sumber daya terkait