Putar kunci akses pengguna IAM secara otomatis sesuai skala dengan AWS Organizations dan AWS Secrets Manager - AWS Prescriptive Guidance

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

Putar kunci akses pengguna IAM secara otomatis sesuai skala dengan AWS Organizations dan AWS Secrets Manager

Tracy Hickey, Michael Davie, Arvind Patel, Laura Seletos, dan Gaurav Verma, Amazon Web Services

Ringkasan

Penting: Sebagai praktik terbaik, AWS merekomendasikan agar Anda menggunakan peran AWS Identity and Access Management (IAM) alih-alih pengguna IAM dengan kredensi jangka panjang seperti kunci akses. Pendekatan yang didokumentasikan dalam pola ini hanya ditujukan untuk implementasi lama yang memerlukan kredensil AWS API yang berumur panjang. Untuk implementasi ini, kami tetap menyarankan Anda mempertimbangkan opsi untuk menggunakan kredensil jangka pendek, seperti menggunakan profil instans Amazon Elastic Compute Cloud (Amazon EC2) atau IAM Roles Anywhere. Pendekatan dalam artikel ini hanya untuk kasus-kasus di mana Anda tidak dapat mengubah menggunakan kredensi jangka pendek segera, dan Anda memerlukan kredensi jangka panjang untuk diputar sesuai jadwal. Dengan pendekatan ini, Anda bertanggung jawab untuk memperbarui kode atau konfigurasi aplikasi lama Anda secara berkala untuk menggunakan kredensil API yang diputar.

Kunci akses adalah kredensil jangka panjang untuk pengguna IAM. Memutar kredensil IAM Anda secara teratur membantu mencegah sekumpulan kunci akses IAM yang disusupi mengakses komponen di akun AWS Anda. Memutar kredensil IAM juga merupakan bagian penting dari praktik terbaik keamanan di IAM.

Pola ini membantu Anda memutar kunci akses IAM secara otomatis dengan menggunakan CloudFormation templat AWS, yang disediakan dalam repositori rotasi kunci GitHub IAM.

Pola ini mendukung penerapan dalam satu akun atau beberapa akun. Jika Anda menggunakan AWS Organizations, solusi ini mengidentifikasi semua akun AWS IDs dalam organisasi Anda dan menskalakan secara dinamis saat akun dihapus atau akun baru dibuat. Fungsi AWS Lambda terpusat menggunakan peran IAM yang diasumsikan untuk menjalankan fungsi rotasi secara lokal di beberapa akun yang Anda pilih.

  • Kunci akses IAM baru dihasilkan ketika kunci akses yang ada berusia 90 hari. 

  • Kunci akses baru disimpan sebagai rahasia di AWS Secrets Manager. Kebijakan berbasis sumber daya hanya mengizinkan prinsipal IAM yang ditentukan untuk mengakses dan mengambil rahasia. Jika Anda memilih untuk menyimpan kunci di akun manajemen, kunci untuk semua akun disimpan di akun manajemen.

  • Alamat email yang ditetapkan untuk pemilik akun AWS tempat kunci akses baru dibuat menerima pemberitahuan.

  • Kunci akses sebelumnya dinonaktifkan pada usia 100 hari, dan kemudian dihapus pada usia 110 hari.

  • Pemberitahuan email terpusat dikirim ke pemilik akun AWS.

Fungsi Lambda dan Amazon CloudWatch secara otomatis melakukan tindakan ini. Anda kemudian dapat mengambil access key pair baru dan menggantinya dalam kode atau aplikasi Anda. Periode rotasi, penghapusan, dan penonaktifan dapat disesuaikan.

Prasyarat dan batasan

  • Setidaknya satu akun AWS aktif.

  • AWS Organizations, dikonfigurasi dan diatur (lihat tutorial).

  • Izin untuk menanyakan AWS Organizations dari akun manajemen Anda. Untuk informasi selengkapnya, lihat AWS Organizations dan peran terkait layanan dalam dokumentasi AWS Organizations.

  • Prinsipal IAM yang memiliki izin untuk meluncurkan CloudFormation template AWS dan sumber daya terkait. Untuk informasi selengkapnya, lihat Memberikan izin yang dikelola sendiri dalam dokumentasi CloudFormation AWS.

  • Bucket Amazon Simple Storage Service (Amazon S3) yang sudah ada untuk menyebarkan sumber daya.

  • Amazon Simple Email Service (Amazon SES) dipindahkan dari kotak pasir. Untuk informasi selengkapnya, lihat Keluar dari kotak pasir Amazon SES di dokumentasi Amazon SES.

  • Jika Anda memilih untuk menjalankan Lambda di virtual private cloud (VPC), sumber daya berikut, yang harus dibuat sebelum Anda menjalankan template utama: CloudFormation

    • SEBUAH VPC.

    • Sebuah subnet.

    • Titik akhir untuk Amazon SES, AWS Systems Manager, AWS Security Token Service (AWS STS), Amazon S3, dan AWS Secrets Manager. (Anda dapat menjalankan template titik akhir yang disediakan di repositori rotasi kunci GitHub IAM untuk membuat titik akhir ini.)

  • Pengguna dan kata sandi Simple Mail Transfer Protocol (SMTP) yang disimpan dalam parameter AWS Systems Manager (parameter SSM). Parameter harus sesuai dengan parameter CloudFormation template utama.

Arsitektur

Tumpukan teknologi

  • Amazon CloudWatch

  • Amazon EventBridge

  • IAM

  • AWS Lambda

  • AWS Organizations 

  • Amazon S3

Arsitektur

Diagram berikut menunjukkan komponen dan alur kerja untuk pola ini. Solusinya mendukung dua skenario untuk menyimpan kredensil: di akun anggota dan di akun manajemen.

Opsi 1: Simpan kredensialnya di akun anggota

Menyimpan kredensi IAM di akun anggota

Opsi 2: Simpan kredensil di akun manajemen

Menyimpan kredensi IAM di akun manajemen

Diagram menunjukkan alur kerja berikut:

  1. Sebuah EventBridge acara memulai fungsi account_inventory Lambda setiap 24 jam.

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

  3. Fungsi account_inventory Lambda memulai fungsi access_key_auto_rotation Lambda untuk setiap ID akun AWS dan meneruskan metadata ke sana untuk pemrosesan tambahan.

  4. Fungsi access_key_auto_rotation Lambda menggunakan peran IAM yang diasumsikan untuk mengakses ID akun AWS. Skrip Lambda menjalankan audit terhadap semua pengguna dan kunci akses IAM mereka di akun. 

  5. Jika usia kunci akses IAM belum melebihi ambang praktik terbaik, fungsi Lambda tidak mengambil tindakan lebih lanjut.

  6. Jika usia kunci akses IAM telah melampaui ambang praktik terbaik, fungsi access_key_auto_rotation Lambda menentukan tindakan rotasi mana yang harus dilakukan.

  7. Ketika tindakan diperlukan, fungsi access_key_auto_rotation Lambda membuat dan memperbarui rahasia di AWS Secrets Manager jika kunci baru dibuat. Kebijakan berbasis sumber daya juga dibuat yang memungkinkan hanya prinsipal IAM yang ditentukan untuk mengakses dan mengambil rahasia. Dalam kasus opsi 1, kredensil disimpan di Secrets Manager di akun masing-masing. Dalam kasus opsi 2 (jika StoreSecretsInCentralAccount bendera disetel ke True), kredensialnya disimpan di Secrets Manager di akun manajemen. 

  8. Fungsi notifier Lambda dimulai untuk memberi tahu pemilik akun tentang aktivitas rotasi. Fungsi ini menerima ID akun AWS, nama akun, email akun, dan tindakan rotasi yang dilakukan. 

  9. Fungsi notifier Lambda menanyakan bucket S3 penerapan untuk template email dan memperbaruinya secara dinamis dengan metadata aktivitas yang relevan. Email tersebut kemudian dikirim ke alamat email pemilik akun.

Catatan:

  • Solusi ini mendukung ketahanan di beberapa Availability Zone. Namun, itu tidak mendukung ketahanan di beberapa Wilayah AWS. Untuk dukungan di beberapa Wilayah, Anda dapat menerapkan solusi di Wilayah kedua dan menonaktifkan EventBridge aturan rotasi kunci. Anda kemudian dapat mengaktifkan aturan ketika Anda ingin menjalankan solusi di Wilayah kedua.

  • Anda dapat menjalankan solusi ini dalam mode audit. Dalam mode audit, kunci akses IAM tidak dimodifikasi, tetapi email dikirim untuk memberi tahu pengguna. Untuk menjalankan solusi dalam mode audit, setel DryRunFlag flag ke True saat Anda menjalankan template rotasi kunci atau dalam variabel lingkungan untuk fungsi access_key_auto_rotation Lambda.

Otomatisasi dan skala

CloudFormation Template yang mengotomatiskan solusi ini disediakan di repositori rotasi kunci GitHub IAM dan tercantum di bagian Kode. Di AWS Organizations, Anda dapat menggunakan CloudFormation StackSetsuntuk menerapkan ASA-iam-key-auto-rotation-iam-assumed-roles.yaml CloudFormation template di beberapa akun alih-alih menerapkan solusi satu per satu ke setiap akun anggota. 

Alat

Layanan AWS

  • Amazon CloudWatch membantu Anda memantau metrik sumber daya AWS Anda dan aplikasi yang Anda jalankan di AWS secara real time.

  • 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 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 Organizations adalah layanan manajemen akun yang membantu Anda mengkonsolidasikan beberapa akun AWS ke dalam organisasi yang Anda buat dan kelola secara terpusat.

  • 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 Storage Service (Amazon S3) adalah layanan penyimpanan objek berbasis cloud yang membantu Anda menyimpan, melindungi, dan mengambil sejumlah data.

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

  • Amazon Simple Notification Service (Amazon SNS) membantu Anda mengoordinasikan dan mengelola pertukaran pesan antara penayang dan klien, termasuk server web dan alamat email.

  • Amazon Virtual Private Cloud (Amazon VPC) membantu Anda meluncurkan sumber daya AWS ke jaringan virtual yang telah Anda tentukan. Jaringan virtual ini menyerupai jaringan tradisional yang akan Anda operasikan di pusat data Anda sendiri, dengan manfaat menggunakan infrastruktur AWS yang dapat diskalakan. 

  • Titik akhir Amazon VPC menyediakan antarmuka untuk terhubung ke layanan yang didukung oleh AWS PrivateLink, termasuk banyak layanan AWS. Untuk setiap subnet yang Anda tentukan dari VPC Anda, antarmuka jaringan endpoint dibuat di subnet dan diberi alamat IP pribadi dari rentang alamat subnet. 

Kode

CloudFormation Template AWS yang diperlukan, skrip Python, dan dokumentasi runbook tersedia di repositori rotasi kunci GitHub IAM. Template digunakan sebagai berikut.

Templat

Terapkan di

Catatan

ASA-iam-key-auto-rotation-and-notifier-solution.yaml

Akun penyebaran

Ini adalah template utama untuk solusinya.

ASA-iam-key-auto-rotation-iam-assumed-roles.yaml

Akun anggota tunggal atau beberapa tempat Anda ingin memutar kredensialnya

Anda dapat menggunakan set CloudFormation tumpukan untuk menyebarkan template ini di beberapa akun.

ASA-iam-key-auto-rotation-list-accounts-role.yaml

Akun pusat/manajemen

Gunakan template ini untuk menyimpan inventaris akun di AWS Organizations.

ASA-iam-key-auto-rotation-vpc-endpoints.yaml

Akun penyebaran

Gunakan template ini untuk mengotomatiskan pembuatan titik akhir hanya jika Anda ingin menjalankan fungsi Lambda di VPC (atur RunLambdaInVPC parameter ke True di template utama).

Epik

TugasDeskripsiKeterampilan yang dibutuhkan

Pilih bucket S3 penerapan Anda.

Masuk ke AWS Management Console untuk akun Anda, buka konsol Amazon S3, lalu pilih bucket S3 untuk penerapan Anda. Jika Anda ingin menerapkan solusi untuk beberapa akun di AWS Organizations, masuk ke akun manajemen untuk organisasi Anda.

Arsitek awan

Kloning repositori.

Kloning repositori rotasi kunci GitHub IAM ke desktop lokal Anda.

Arsitek awan

Unggah file ke bucket S3.

Unggah file yang dikloning ke bucket S3 Anda. Gunakan struktur folder default berikut untuk menyalin dan menempelkan semua file dan direktori yang dikloning: asa/asa-iam-rotation

catatan

Anda dapat menyesuaikan struktur folder ini di CloudFormation template.

Arsitek awan

Ubah template email.

Ubah template iam-auto-key-rotation-enforcement.html email (terletak di template folder) sesuai dengan kebutuhan Anda. Ganti [Department Name Here] di akhir template dengan nama departemen Anda.

Arsitek awan
TugasDeskripsiKeterampilan yang dibutuhkan

Luncurkan CloudFormation template untuk rotasi kunci.

  1. Luncurkan ASA-iam-key-auto-rotation-and-notifier-solution.yaml template di akun penerapan. Untuk informasi selengkapnya, lihat Memilih template tumpukan dalam CloudFormation dokumentasi.

  2. Tentukan nilai untuk parameter, termasuk:

    • CloudFormation S3 Bucket Name (S3BucketName) — Nama bucket S3 penerapan yang berisi kode Lambda Anda.

    • CloudFormation S3 Bucket Prefix (S3BucketPrefix) — Awalan bucket S3.

    • Diasumsikan IAM Role Name (IAMRoleName) - Nama peran yang akan diasumsikan oleh fungsi key-rotation Lambda untuk memutar tombol.

    • IAM Execution Role Name (ExecutionRoleName) — Nama peran eksekusi IAM yang digunakan oleh fungsi Lambdakey-rotation.

    • Inventory Execution Role Name (InventoryExecutionRoleName) — Nama peran eksekusi IAM yang digunakan oleh fungsi account_inventory Lambda.

    • Bendera Jalankan Kering (Mode AuditDryRunFlag) () - Setel ke True untuk mengaktifkan mode audit (default). Setel ke False untuk mengaktifkan mode penegakan.

    • Akun untuk Daftar Akun Organisasi (OrgListAccount) — ID akun central/management akun yang akan digunakan untuk membuat daftar akun di organisasi.

    • Daftar Akun Nama Peran (OrgListRole) — Nama peran yang akan digunakan untuk mencantumkan akun di organisasi.

    • Secrets Store flag for central account (StoreSecretsInCentralAccount) — Setel ke True untuk menyimpan rahasia di akun pusat. Setel ke False untuk menyimpan rahasia di akun masing-masing.

    • Regions untuk mereplikasi credentials (CredentialReplicationRegions) — Wilayah AWS tempat Anda ingin mereplikasi kredensialnya (Secrets Manager), dipisahkan dengan koma; misalnya,. us-east-2,us-west-1,us-west-2 Lewati Wilayah tempat Anda membuat tumpukan.

    • Jalankan Lambda di VPC (RunLambdaInVpc) - Setel ke True untuk menjalankan fungsi Lambda di VPC tertentu. Anda harus memiliki titik akhir VPC yang dibuat dan melampirkan gateway NAT ke subnet yang berisi fungsi Lambda. Untuk informasi selengkapnya, lihat artikel re:Post yang mencakup opsi ini.

    • Id VPC untuk fungsi Lambda ()VpcId, VPC CIDR untuk Aturan Grup Keamanan ()VpcCidr, dan Id Subnet untuk fungsi Lambda () SubnetId - Berikan informasi tentang VPC, CIDR, dan subnet jika Anda menyetel ke True. RunLambdaInVpc

    • Alamat Email Admin (AdminEmailAddress) — Alamat email yang valid untuk mengirim pemberitahuan ke.

    • AWS Organization ID (AWSOrgID) — ID unik organisasi Anda. ID ini dimulai dengan o- dan diikuti oleh 10-32 huruf kecil atau digit.

    • Email Template Nama file [Audit Mode] (EmailTemplateAudit) dan [Enforce Mode] (EmailTemplateEnforce) - Nama file template HTML email yang akan dikirim oleh notifier modul untuk mode audit dan mode penegakan.

    • Nama Parameter SSM Pengguna SMTP (SMTPUserParamName) dan Kata Sandi SMTP Nama Parameter SSM (SMTPPasswordParamName) — Informasi pengguna dan kata sandi untuk Simple Mail Transfer Protocol (SMTP). 

Arsitek awan

Luncurkan CloudFormation template untuk peran yang diasumsikan.

  1. Di CloudFormation konsol AWS, luncurkan ASA-iam-key-auto-rotation-iam-assumed-roles.yaml template untuk setiap akun tempat Anda ingin memutar kunci. Jika Anda memiliki lebih dari satu akun, Anda dapat menerapkan CloudFormation template utama di akun manajemen Anda sebagai tumpukan dan menyebarkan ASA-iam-key-auto-rotation-iam-assumed-roles.yaml template dengan kumpulan CloudFormation tumpukan ke semua akun yang diperlukan. Untuk informasi selengkapnya, lihat Bekerja dengan AWS CloudFormation StackSets dalam CloudFormation dokumentasi.

  2. Tentukan nilai untuk parameter berikut:

    • Diasumsikan IAM Role Name (IAMRoleName) — nama peran IAM yang akan diasumsikan oleh fungsi Lambda. access_key_auto_rotation Anda dapat menyimpan nilai default.

    • Nama Peran Eksekusi IAM (ExecutionRoleName) — Peran IAM yang akan mengambil peran sub-akun untuk menjalankan fungsi Lambda.

    • ID Akun AWS Utama (PrimaryAccountID) — ID akun AWS tempat templat utama akan digunakan. 

    • IAM Exemption Group (IAMExemptionGroup) - Nama grup IAM yang digunakan untuk memfasilitasi akun IAM yang ingin Anda kecualikan dari rotasi kunci otomatis.

Arsitek awan

Luncurkan CloudFormation template untuk inventaris akun.

  1. Luncurkan ASA-iam-key-auto-rotation-list-accounts-role.yaml template di management/central akun

  2. Tentukan nilai untuk parameter berikut:

    • Diasumsikan IAM Role Name (IAMRoleName) — nama peran IAM yang akan diasumsikan oleh fungsi Lambdaaccess_key_auto_rotation.

    • Nama Peran Eksekusi IAM untuk Akun Lambda AccountExecutionRoleName () — Nama peran IAM yang akan diasumsikan oleh fungsi Lambdanotifier.

    • Nama Peran Eksekusi IAM untuk rotasi Lambda RotationExecutionRoleName () — Nama peran IAM yang akan diasumsikan oleh fungsi Lambdaaccess_key_auto_rotation.

    • ID Akun AWS Utama (PrimaryAccountID) — ID akun AWS tempat templat utama akan digunakan.

Arsitek awan

Luncurkan CloudFormation template untuk titik akhir VPC.

Tugas ini opsional.

  1. Luncurkan ASA-iam-key-auto-rotation-vpc-endpoints.yaml template di akun penerapan. 

  2. Tentukan nilai untuk parameter berikut:

    • VPC ID (pVpcId), Subnet Id (pSubnetId), dan rentang CIDR untuk VPC (pVPCCidr) — Berikan informasi tentang VPC, CIDR, dan subnet.

    • Atur parameter untuk setiap titik akhir VPC ke True. Jika Anda sudah memiliki endpoint, Anda dapat memilih False.

Arsitek awan

Sumber daya terkait