Kelola set AWS izin secara dinamis 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.

Kelola set AWS izin secara dinamis dengan menggunakan Terraform

Vinicius Elias dan Marcos Vinicius Pinto Jordao, Amazon Web Services

Ringkasan

AWS IAM Identity Center meningkatkan AWS Identity and Access Management (IAM) dengan menyediakan hub terpusat untuk mengelola akses masuk tunggal ke dan aplikasi cloud. Akun AWS Namun, manajemen manual set izin Pusat Identitas IAM dapat menjadi semakin kompleks dan rawan kesalahan seiring pertumbuhan organisasi Anda. Kompleksitas ini dapat menyebabkan potensi kesenjangan keamanan dan overhead administratif.

Solusi ini memungkinkan Anda untuk mengelola set izin melalui infrastruktur sebagai kode (IAc) menggunakan pipeline continuous integration and continuous delivery (CI/CD) yang dibangun dengan native. Layanan AWS Ini memungkinkan integrasi tanpa batas dari mekanisme penetapan set izin dengan peristiwa AWS Control Tower siklus hidup atau lingkungan Account Factory for Terraform (AFT). Pendekatan ini menyediakan konfigurasi identitas dinamis untuk yang baru dan yang sudah ada Akun AWS.

EventBridge Aturan Amazon memantau Akun AWS pembuatan dan pembaruan, yang membantu konfigurasi identitas Anda tetap disinkronkan dengan struktur organisasi Anda. Setelah membuat atau memperbarui akun di AWS Control Tower atau AFT, pipeline dipicu. Ini mengevaluasi satu set file JSON dengan definisi set izin dan aturan penetapan. Kemudian pipeline berlaku dan menyinkronkan pengaturan di semua akun.

Pendekatan ini memberikan manfaat sebagai berikut:

  • Konsistensi - Menghilangkan penyimpangan konfigurasi manual di seluruh organisasi Anda AWS

  • Auditabilitas - Mempertahankan riwayat lengkap dari semua perubahan manajemen identitas

  • Skalabilitas - Secara otomatis menerapkan konfigurasi saat lingkungan Anda tumbuh AWS

  • Keamanan - Mengurangi kesalahan manusia dalam penugasan izin

  • Kepatuhan — Memfasilitasi memenuhi persyaratan peraturan melalui perubahan yang terdokumentasi dan aturan penugasan

Prasyarat dan batasan

  • Lingkungan multi-akun dengan AWS Control Tower dan AWS Organizations pengaturan. Secara opsional, Anda dapat menggunakan AFT dengan AWS Control Tower.

  • Administrator yang didelegasikan Pusat Identitas IAM Akun AWS untuk menerima solusinya. Untuk informasi selengkapnya, lihat Administrasi yang didelegasikan dalam dokumentasi Pusat Identitas IAM.

  • Sebuah sistem kontrol versi (VCS) repositori untuk menangani kode utama. Untuk sampel, lihat GitHub repositori solusi.

  • AWS Sumber daya yang diperlukan untuk manajemen backend Terraform, seperti bucket Amazon Simple Storage Service (Amazon S3) dan tabel Amazon DynamoDB.

Batasan

  • Pipeline menggunakan sumber daya AWS asli dan Terraform open source. Pipa tidak siap untuk melakukan panggilan ke ekosistem pihak ketiga.

  • Beberapa Layanan AWS tidak tersedia di semua Wilayah AWS. Untuk ketersediaan Wilayah, lihat AWS Layanan menurut Wilayah. Untuk titik akhir tertentu, lihat Titik akhir dan kuota layanan, dan pilih tautan untuk layanan.

Arsitektur

Diagram berikut menunjukkan komponen dan alur kerja untuk pola ini.

Komponen dan alur kerja untuk mengelola set izin AWS menggunakan Terraform.

AWS Control Tower aliran peristiwa

Solusinya dimulai dengan integrasi peristiwa yang berasal dari salah satu AWS Control Tower atau AFT. Pilihan antara satu atau layanan lainnya dibuat pada waktu implementasi melalui definisi variabel. Terlepas dari metode yang digunakan, pipeline dipicu setiap kali akun dibuat atau diperbarui. Pipeline merekonsiliasi kebijakan yang disimpan dalam repositori manajemen set izin.

Berikut ini adalah peristiwa AWS Control Tower siklus hidup:

  • CreateManagedAccount— Saat akun baru dibuat

  • UpdateManagedAccount— Saat akun yang ada diperbarui

Perutean acara

EventBridge berfungsi sebagai layanan pemrosesan acara pusat, menangkap peristiwa yang dihasilkan di AWS Control Tower akun. Ketika peristiwa terjadi, EventBridge secara cerdas mengarahkannya ke bus acara terpusat di akun solusi. AWS Control Tower peristiwa siklus hidup mengikuti pola perutean yang berbeda. Jika AFT didefinisikan sebagai sumber peristiwa, akun manajemen AFT menangani peristiwa alih-alih AWS Control Tower akun. Arsitektur berbasis peristiwa ini memungkinkan respons otomatis terhadap perubahan organisasi tanpa intervensi manual.

Proses integrasi AFT

Ketika peristiwa AWS Control Tower siklus hidup mencapai akun manajemen AFT, peristiwa tersebut secara otomatis memicu beberapa proses hilir yang intrinsik ke AFT. Setelah alur kerja kustomisasi akun AFT selesai, ia menerbitkan pesan ke topik Simple Notification Service aft-notifications Amazon (Amazon SNS) khusus. Topik itu memicu aft-new-account-forward-event AWS Lambda fungsi yang diterapkan oleh solusi ini. Fungsi Lambda mengirimkan acara ke bus acara akun solusi, di mana ia digunakan untuk memulai pipeline.

Infrastruktur sebagai pipa kode

Pipa solusi beroperasi sebagai mekanisme penyebaran yang sepenuhnya otomatis. AWS CodePipeline Layanan terus memantau repositori untuk perubahan. Setelah mendeteksi komit baru, secara otomatis memulai alur kerja penerapan dan memulai proses sekuensial yang mencakup fase validasi dan eksekusi. Sistem menjalankan plan operasi Terraform untuk mengidentifikasi perubahan yang diusulkan, diikuti oleh apply perintah Terraform untuk mengimplementasikan perubahan tersebut di lingkungan. AWS Khususnya, pipa berjalan tanpa gerbang persetujuan manual. Pendekatan ini memungkinkan penyebaran cepat perubahan infrastruktur sambil mempertahankan auditabilitas melalui log pipa dan file status Terraform.

Pipeline memanfaatkan AWS CodeBuild untuk menjalankan operasi Terraform di lingkungan yang terkendali dengan izin yang sesuai. Melalui pendekatan IAc ini, pipeline dapat melakukan operasi manajemen izin yang komprehensif termasuk:

  • Buat set izin baru.

  • Perbarui set izin yang ada.

  • Hapus set izin yang tidak perlu.

  • Kelola penetapan izin ini di seluruh akun dan grup dalam organisasi. AWS

Untuk menjaga konsistensi infrastruktur dan mencegah perubahan yang bertentangan, solusinya mengimplementasikan sistem manajemen status backend Terraform menggunakan bucket Amazon S3 dan tabel Amazon DynamoDB khusus. Pendekatan ini menyediakan lokasi penyimpanan persisten untuk file status Terraform dan mekanisme penguncian status untuk mencegah modifikasi bersamaan pada sumber daya yang sama.

Kode Terraform utama menggunakan modul AWS permission-sets Terraform resmi. Modul ini dapat secara dinamis mengelola set izin di IAM Identity Center, berdasarkan template set izin.

Manajemen kontrol sumber

Templat set izin (file JSON) berada di sistem kontrol versi eksternal, seperti GitHub, yang menyediakan repositori terpusat untuk konfigurasi manajemen identitas. Pendekatan ini menetapkan satu sumber kebenaran untuk definisi set izin, sambil memungkinkan pengembangan kolaboratif melalui praktik tinjauan kode standar. Pengguna yang berwenang dapat melakukan perubahan pada templat ini mengikuti proses manajemen perubahan organisasi. Komit ini berfungsi sebagai pemicu utama untuk pipeline penerapan otomatis, memulai proses pembaruan infrastruktur.

Untuk contoh cara mengonfigurasi set izin menggunakan file JSON di repositori, lihat Informasi tambahan.

Alat

Layanan AWS

  • AWS CodeBuildadalah layanan build terkelola penuh yang membantu Anda mengkompilasi kode sumber, menjalankan pengujian unit, dan menghasilkan artefak yang siap digunakan.

  • AWS CodeConnectionsmemungkinkan AWS sumber daya dan layanan, seperti CodePipeline, untuk terhubung ke repositori kode eksternal, seperti. GitHub

  • AWS CodePipelinemembantu Anda dengan cepat memodelkan dan mengkonfigurasi berbagai tahapan rilis perangkat lunak dan mengotomatiskan langkah-langkah yang diperlukan untuk merilis perubahan perangkat lunak secara terus menerus.

  • AWS Command Line Interface (AWS CLI) adalah alat open source yang membantu Anda berinteraksi Layanan AWS melalui perintah di shell baris perintah Anda.

  • AWS Control Towermembantu Anda mengatur dan mengatur lingkungan AWS multi-akun, mengikuti praktik terbaik preskriptif.

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

  • Amazon EventBridge adalah layanan bus acara tanpa server yang membantu Anda menghubungkan aplikasi Anda dengan data waktu nyata dari berbagai sumber. Misalnya, AWS Lambda fungsi, titik akhir pemanggilan HTTP menggunakan tujuan API, atau bus acara di tempat lain. Akun AWS

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

  • AWS IAM Identity Centermembantu Anda mengelola akses masuk tunggal (SSO) secara terpusat ke semua aplikasi Anda Akun AWS dan cloud.

  • 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.

  • AWS Organizationsadalah layanan manajemen akun yang membantu Anda mengkonsolidasikan beberapa Akun AWS ke dalam organisasi yang Anda buat dan kelola secara terpusat.

  • Amazon Simple Notification Service (Amazon SNS) membantu Anda mengoordinasikan dan mengelola pertukaran pesan antara penayang dan klien, termasuk server web dan alamat email. Ini memungkinkan pemberitahuan push untuk acara manajemen akun, memastikan bahwa pihak terkait diberitahu tentang perubahan atau tindakan penting dalam sistem.

  • Amazon Simple Storage Service (Amazon S3) adalah layanan penyimpanan objek berbasis cloud yang membantu Anda menyimpan, melindungi, dan mengambil sejumlah data.

Alat-alat lainnya

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

Repositori kode

Kode untuk pola ini tersedia di organisasi AWS Sampel di dalam GitHub repositori sample-terraform-aws-permission-sets-pipeline.

Praktik terbaik

  • Selalu sematkan versi modul dan penyedia Terraform yang digunakan untuk menjalankan kode dalam produksi.

  • Gunakan alat analisis kode statis, seperti Checkov, untuk memindai kode Anda dan kemudian memecahkan masalah keamanan.

  • Ikuti prinsip hak istimewa terkecil dan berikan izin minimum yang diperlukan untuk melakukan tugas. Untuk informasi selengkapnya, lihat Berikan hak istimewa terkecil dan praktik terbaik Keamanan dalam dokumentasi IAM.

Epik

TugasDeskripsiKeterampilan yang dibutuhkan

Buat sumber daya backend Terraform.

Jika Anda belum membuat AWS sumber daya backend Terraform, gunakan langkah-langkah berikut untuk membuat bucket () Amazon S3 s3-tf-backend-{ACCOUNT_ID} dan tabel DynamoDB (). ddb-tf-backend

  1. Masuk ke Akun AWS tempat Anda akan menggunakan solusi, dan buka AWS CloudShelldi AWS Control Tower rumah Wilayah AWS.

  2. Jalankan perintah berikut, ganti placeholder {ACCOUNT_ID} dengan ID Anda Akun AWS :

aws s3api create-bucket --bucket s3-tf-backend-{ACCOUNT_ID} aws s3api put-bucket-versioning --bucket s3-tf-backend-{ACCOUNT_ID} --versioning-configuration Status=Enabled aws dynamodb create-table --table-name ddb-tf-backend --attribute-definitions AttributeName=LockID,AttributeType=S --key-schema AttributeName=LockID,KeyType=HASH --provisioned-throughput ReadCapacityUnits=1,WriteCapacityUnits=1
Administrator AWS

Buat peran lintas akun.

Anda harus memberikan peran IAM lintas akun dalam konfigurasi penyedia event-source-account Terraform AWS . Jika Anda belum membuat peran ini, gunakan langkah-langkah berikut untuk membuatnya:

  1. Masuk ke Akun AWS yang akan menjadi sumber acara Anda (akun AWS Control Tower manajemen atau akun AFT), dan buka AWS CloudShell.

  2. Jalankan perintah berikut, ganti placeholder {ACCOUNT_ID} dengan Akun AWS ID yang Anda gunakan untuk solusi ini, bukan ID Anda saat ini Akun AWS :

aws iam create-role \ --role-name CrossAccountRole \ --assume-role-policy-document '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::{ACCOUNT_ID}:root" }, "Action": "sts:AssumeRole" } ] }'
  1. Periksa output perintah dan salin peran Amazon Resource Name (ARN) (misalnya,arn:aws:iam::111122223333:role/CrossAccountRole).

  2. Untuk melampirkan kebijakan IAM ke peran, jalankan perintah berikut:

aws iam attach-role-policy \ --role-name CrossAccountRole \ --policy-arn arn:aws:iam::aws:policy/AdministratorAccess

Contoh ini menggunakan kebijakan AdministratorAccessIAM AWS terkelola. Jika mau, Anda dapat menggunakan kebijakan yang lebih spesifik.

Administrator AWS
TugasDeskripsiKeterampilan yang dibutuhkan

Buat repositori khusus.

Tugas ini mengasumsikan bahwa Anda menggunakan GitHub. Buat repositori khusus untuk menyimpan kode Terraform utama dan file JSON template set izin.

DevOps insinyur

Siapkan kode set izin.

Untuk informasi tentang bagaimana Anda dapat menyusun file-file berikut, lihat contoh kode pada repositori solusi:

── utama.tf

── keluaran.tf

── penyedia.jinja

── templat

Salin konten, simpan providers.jinja nilainya, dan buat penyesuaian yang diperlukan untuk file lain. Misalnya, tambahkan izin set file template ke dalam templates atau pin versi aws-ia/permission-sets/aws modul dalam main.tf file.

DevOps insinyur

Komit perubahan Anda.

Komit dan dorong perubahan ke repositori yang Anda buat sebelumnya. Simpan nama repositori dan GitHub organisasinya, misalnya,. myorg/aws-ps-pipeline

DevOps insinyur
TugasDeskripsiKeterampilan yang dibutuhkan

Unduh kontennya.

Unduh (kloning) konten dari repositori solusi.

DevOps insinyur

Memenuhi variabel.

Buat terraform.tfvars file dan tambahkan variabel yang diperlukan berikut:

  • repository_name— Nama izin set repositori yang Anda buat sebelumnya

  • branch_name— Nama cabang repositori set izin

  • vcs_provider— Penyedia VCS Anda

  • account_lifecycle_events_source— Sumber peristiwa untuk memicu pipa (AWS Control Tower atau AFT)

repository_name = "myorg/aws-ps-pipeline" branch_name = "main" vcs_provider = "github" account_lifecycle_events_source = "CT"

Untuk informasi tentang opsi variabel tambahan, lihat file variabel.tf di repositori pola ini. GitHub

DevOps insinyur

Sesuaikan konfigurasi backend Terraform.

Dalam backend.tf file, ganti placeholder dengan nilai Anda sendiri. Gunakan AWS Control Tower home Wilayah AWS, dan berikan nama-nama bucket Amazon S3 dan tabel DynamoDB yang dibuat sebelumnya.

terraform { required_version = ">=1.6" backend "s3" { region = "{region}" bucket = "{bucket_name}" key = "terraform.tfstate" dynamodb_table = "{table_name}" encrypt = "true" } }

Jika mau, Anda dapat menggunakan konfigurasi backend Terraform Anda sendiri.

DevOps insinyur

Sesuaikan konfigurasi penyedia Terraform.

Dalam providers.tf file, ganti placeholder dengan informasi Anda sendiri. Gunakan Wilayah AWS Control Tower asal, dan berikan ARN dari peran IAM lintas akun yang dibuat sebelumnya untuk penyedia. event-source-account

provider "aws" { region = "{region}" } provider "aws" { alias = "event-source-account" region = "{region}" assume_role { role_arn = "{role_arn}" } }
DevOps insinyur
TugasDeskripsiKeterampilan yang dibutuhkan

Pilih Akun AWS.

Kami menyarankan Anda menerapkan solusi di akun administrator yang didelegasikan IAM Identity Center. Namun, Anda juga dapat menerapkannya di akun AWS Organizations manajemen.

Untuk masuk ke akun yang dipilih di Wilayah yang sama dengan instans Pusat Identitas IAM, gunakan. AWS CLI Pastikan bahwa peran IAM yang Anda gunakan memiliki izin untuk mengambil peran yang ditentukan untuk event-source-account penyedia di langkah sebelumnya. Selain itu, peran ini harus memiliki akses ke AWS sumber daya yang digunakan dalam konfigurasi backend Terraform.

Administrator AWS

Jalankan Terraform secara manual.

Untuk menginisialisasi, merencanakan, dan menerapkan konfigurasi, jalankan perintah Terraform berikut dalam urutan yang ditunjukkan:

  1. terraform init

  2. terraform plan

  3. terraform apply

DevOps insinyur

Periksa hasil penerapan.

Di akun administrator yang didelegasikan IAM Identity Center, periksa apakah aws-ps-pipeline pipeline telah dibuat. Periksa juga apakah ada AWS CodeConnections koneksi dengan status Tertunda.

AWS DevOps

Selesaikan CodeConnections konfigurasi.

Untuk menyelesaikan CodeConnections konfigurasi, gunakan langkah-langkah berikut:

  1. Buka CodeConnections, pilih koneksi yang dibuat, dan pilih Perbarui koneksi yang tertunda.

  2. Berikan GitHub kredensil Anda, instal GitHub Aplikasi baru, atau pilih yang sudah ada yang memiliki akses ke repositori set izin, dan pilih Connect.

Pipeline sekarang harus memiliki akses ke repositori set izin.

Untuk petunjuk mendetail, lihat Memperbarui sambungan yang tertunda di dokumentasi konsol Alat Pengembang.

AWS DevOps
TugasDeskripsiKeterampilan yang dibutuhkan

Jalankan pipeline oleh AWS Control Tower atau pembaruan AFT.

Setelah akun dibuat atau diubah dengan menggunakan AWS Control Tower atau AFT (tergantung pada jenis peristiwa siklus hidup yang Anda pilih), pipeline dimulai.

Administrator AWS

Jalankan pipeline dengan mengubah kode.

Setelah Anda mengubah kode dan mengkomitmennya ke main cabang, pipeline dimulai.

AWS DevOps

Jalankan pipa secara manual.

Untuk memulai pipeline secara manual, gunakan fitur Rilis perubahan di AWS CodePipeline.

AWS DevOps

Pemecahan Masalah

IsuSolusi

Akses ditolak

Verifikasi bahwa Anda memiliki izin yang diperlukan untuk menerapkan solusi.

CodeConnections masalah

  • Periksa apakah status koneksi Tersedia daripada Tertunda.

  • Verifikasi bahwa CodeConnections konfigurasi telah dilengkapi dengan GitHub kredensil dengan benar. Untuk informasi selengkapnya, lihat Memperbarui sambungan yang tertunda di dokumentasi konsol Alat Pengembang.

  • Pastikan GitHub aplikasi memiliki izin akses yang tepat ke repositori set izin.

Masalah eksekusi pipa

  • Periksa CloudWatch log Amazon untuk mengetahui kesalahan eksekusi pipeline.

  • Pastikan delegasi IAM Identity Center diatur dengan benar. Jika tidak, itu dapat menyebabkan kegagalan pipa saat membaca Akun AWS metadata.

Izin menetapkan masalah penerapan

  • Validasi bahwa sintaks JSON dalam file template set izin sudah benar.

  • Verifikasi bahwa kebijakan terkelola IAM yang direferensikan dalam templat ada.

  • Periksa apakah grup dan pengguna yang ditentukan dalam tugas ada di Pusat Identitas IAM.

Sumber daya terkait

Layanan AWS dokumentasi

Sumber daya lainnya

Informasi tambahan

File JSON dengan set izin sampel

Contoh berikut menunjukkan cara mengkonfigurasi set izin dengan menggunakan file JSON di repositori:

{ "Name": "ps-billing", // Permission set identifier "Comment": "Sample permission set for billing access", // Comment to document the purpose of the permission set "Description": "Billing access in AWS", // Detailed description "SessionDuration": "PT4H", // Session duration = 4 hours (ISO 8601 format) "ManagedPolicies": [ // List of AWS IAM managed policies "arn:aws:iam::aws:policy/job-function/Billing", "arn:aws:iam::aws:policy/job-function/SupportUser", "arn:aws:iam::aws:policy/AWSSupportAccess", "arn:aws:iam::aws:policy/job-function/ViewOnlyAccess" ], "CustomerPolicies": [], // References to IAM policies previously created "CustomPolicy": {}, // Inline IAM policy defined directly in the permission set "PermissionBoundary": { // AWS or customer managed IAM policy to be used as boundary "ManagedPolicy": "", "CustomerPolicy": "" }, "Assignments": [ // Define the assignment rules { "all_accounts": true, // Apply to ALL active AWS accounts in organization "principal": "G_BILLING_USERS", // Group/user name in Identity Center "type": "GROUP", // Can be "GROUP" or "USER" "account_id": [], // List of AWS account ID (empty since all_accounts=true) "account_ou": [], // List of AWS Organizational Unit IDs with target AWS accounts "account_tag": [] // List of tags (key:value) to match AWS Organization accounts tags } ] }

Untuk informasi selengkapnya, lihat skema JSON dalam dokumentasi modul Set AWS Izin di situs web Terraform.

Kiat

  • Anda dapat menggunakan blok impor Terraform untuk mengimpor izin yang ada yang disetel ke solusi.

  • Anda dapat menggunakan AFT untuk mengimplementasikan pipeline set AWS izin di akun yang didelegasikan. Untuk informasi lebih lanjut, lihat AFT Blueprints.