Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Menyediakan peran IAM dengan hak istimewa paling sedikit dengan menerapkan solusi mesin penjual otomatis peran
Benjamin Morris, Nima Fotouhi, Aman Kaur Gandhi, dan Cad Moon, Amazon Web Services
Ringkasan
Izin peran over-scoped AWS Identity and Access Management (IAM) untuk jaringan pipa dapat menimbulkan risiko yang tidak perlu bagi organisasi. Pengembang terkadang memberikan izin luas selama pengembangan tetapi mengabaikan untuk mengurangi izin setelah memecahkan masalah kode mereka. Hal ini menyebabkan masalah di mana peran yang kuat hadir tanpa kebutuhan bisnis dan mungkin tidak pernah ditinjau oleh insinyur keamanan.
Pola ini menawarkan solusi untuk masalah ini: mesin penjual otomatis peran (RVM). Menggunakan model penyebaran yang aman dan terpusat, RVM mendemonstrasikan cara menyediakan peran IAM dengan hak istimewa paling sedikit untuk saluran pipa repositori individu dengan sedikit usaha dari pengembang. GitHub Karena RVM adalah solusi utama, Anda dapat mengonfigurasi tim keamanan Anda sebagai pengulas yang diperlukan untuk menyetujui perubahan. Pendekatan ini memungkinkan keamanan untuk menolak permintaan peran pipeline yang memiliki izin berlebih.
RVM mengambil kode Terraform sebagai input dan menghasilkan peran IAM siap pipeline sebagai output. Input yang diperlukan adalah Akun AWS ID, nama GitHub repositori, dan kebijakan izin. RVM menggunakan input ini untuk membuat kebijakan kepercayaan dan kebijakan izin peran. Kebijakan kepercayaan yang dihasilkan memungkinkan GitHub repositori yang ditentukan untuk mengambil peran dan menggunakannya untuk operasi pipa.
RVM menggunakan peran IAM (dikonfigurasi selama bootstrap). Peran ini memiliki izin untuk mengasumsikan a role-provisioning-role di setiap akun di organisasi. Peran dikonfigurasi melalui AWS Control Tower Account Factory for Terraform (AFT) atau. AWS CloudFormation StackSets Itu role-provisioning-roles adalah peran yang benar-benar menciptakan peran pipeline untuk pengembang.
Prasyarat dan batasan
Prasyarat
Aktif Akun AWS.
Sebuah GitHub organisasi yang digunakan untuk menyebarkan infrastruktur sebagai kode (IAc) melalui GitHub Actions. (GitHub Enterprise/Premium/Ultimatetidak diperlukan.)
AWS Lingkungan multi-akun. Lingkungan ini tidak perlu menjadi bagian dari AWS Organizations.
Mekanisme untuk menerapkan peran IAM di semua Akun AWS (misalnya, AFT atau CloudFormation StackSets).
Terraform versi 1.3 atau yang terakhir diinstal dan
dikonfigurasi. AWS Penyedia Terraform versi 4 atau yang lebih baru diinstal
dan dikonfigurasi.
Batasan
Kode pola ini khusus untuk GitHub Actions dan Terraform. Namun, konsep umum pola dapat digunakan kembali dalam kerangka kerja integrasi dan pengiriman berkelanjutan (CI/CD) lainnya.
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 menggambarkan alur kerja untuk pola ini.

Alur kerja untuk penggunaan tipikal mesin penjual otomatis peran terdiri dari langkah-langkah berikut:
Pengembang mendorong kode yang berisi kode Terraform untuk peran IAM yang baru diminta ke repositori RVM. GitHub Tindakan ini memicu pipeline Tindakan RVM GitHub .
Pipeline menggunakan kebijakan kepercayaan OpenID Connect (OIDC) untuk mengasumsikan peran asumsi peran RVM.
Saat pipeline RVM berjalan, ia mengasumsikan peran alur kerja RVM di akun tempat ia menyediakan peran IAM baru pengembang. (Peran alur kerja RVM disediakan dengan menggunakan AFT atau.) CloudFormation StackSets
RVM menciptakan peran IAM pengembang dengan izin dan kepercayaan yang sesuai, sehingga peran tersebut dapat diasumsikan oleh pipeline aplikasi lain.
Pengembang aplikasi dapat mengonfigurasi pipeline aplikasi mereka untuk mengambil peran yang disediakan RVM ini.
Peran yang dibuat mencakup izin yang diminta oleh pengembang dan ReadOnlyAccess kebijakan. Peran ini hanya dapat diasumsikan oleh pipeline yang berjalan melawan main cabang repositori yang ditentukan pengembang. Pendekatan ini membantu memastikan bahwa perlindungan dan tinjauan cabang dapat diperlukan untuk menggunakan peran tersebut.
Otomatisasi dan skala
Izin hak istimewa paling sedikit memerlukan perhatian terhadap detail untuk setiap peran yang disediakan. Model ini mengurangi kompleksitas yang diperlukan untuk membuat peran ini, memungkinkan pengembang untuk membuat peran yang mereka butuhkan tanpa banyak pembelajaran atau usaha tambahan.
Alat
Layanan 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 Organizationsadalah layanan manajemen akun yang membantu Anda mengkonsolidasikan beberapa Akun AWS ke dalam organisasi yang Anda buat dan kelola secara terpusat.
Alat-alat lainnya
Git
adalah sistem kontrol versi terdistribusi open source. Ini termasuk kemampuan untuk membuat akun organisasi . GitHub Actions
adalah platform integrasi berkelanjutan dan pengiriman berkelanjutan (CI/CD) yang terintegrasi erat dengan GitHub repositori. Anda dapat menggunakan GitHub Actions untuk mengotomatiskan pipeline build, test, dan deployment. 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 GitHub role-vending-machine
Praktik terbaik
Buat jalan yang benar mudah dan cara yang salah sulit — Buatlah mudah untuk melakukan hal yang benar. Jika pengembang berjuang dengan proses penyediaan RVM, mereka mungkin mencoba membuat peran melalui cara lain, yang merusak sifat sentral RVM. Pastikan tim keamanan Anda memberikan panduan yang jelas tentang cara menggunakan RVM dengan aman dan efektif.
Anda juga harus menyulitkan pengembang untuk melakukan hal yang salah. Gunakan kebijakan kontrol layanan (SCPs) atau batas izin untuk membatasi peran apa yang dapat membuat peran lain. Pendekatan ini dapat membantu membatasi pembuatan peran hanya untuk RVM dan sumber tepercaya lainnya.
Berikan contoh yang baik - Tidak dapat dihindari, beberapa pengembang akan mengadaptasi peran yang ada di repositori RVM sebagai templat informal untuk memberikan izin untuk peran baru mereka. Jika Anda memiliki contoh izin paling sedikit yang dapat disalin, hal itu dapat mengurangi risiko pengembang meminta izin yang luas dan berat wildcard. Jika Anda memulai dengan peran yang sangat diizinkan dengan banyak wildcard, masalah itu dapat berlipat ganda seiring berjalannya waktu.
Gunakan konvensi dan ketentuan penamaan — Bahkan jika pengembang tidak mengetahui semua nama sumber daya yang akan dibuat aplikasi mereka, mereka tetap harus membatasi izin peran dengan menggunakan konvensi penamaan. Misalnya, jika mereka membuat bucket Amazon S3, nilai kunci sumber daya mereka mungkin terlihat seperti
arn:aws:s3:::myorg-myapp-dev-*sehingga peran mereka tidak memiliki izin di luar bucket yang cocok dengan nama itu. Menegakkan konvensi penamaan melalui kebijakan IAM memiliki manfaat tambahan untuk meningkatkan kepatuhan terhadap konvensi penamaan. Peningkatan ini terjadi karena sumber daya yang tidak cocok tidak akan diizinkan untuk dibuat.Required pull request (PR) review — Nilai solusi RVM adalah menciptakan lokasi pusat di mana peran pipeline baru dapat ditinjau. Namun, desain ini hanya berguna jika ada pagar pembatas yang membantu memastikan keamanan, kode berkualitas tinggi berkomitmen untuk RVM. Lindungi cabang yang digunakan untuk menyebarkan kode (misalnya,
main) dari dorongan langsung dan memerlukan persetujuan untuk setiap permintaan gabungan yang menargetkannya.Konfigurasikan peran hanya-baca — Secara default, RVM menyediakan
readonlyversi dari setiap peran yang diminta. Peran ini dapat digunakan dalam CI/CD pipeline yang tidak menulis data, seperti alur kerjaterraform planpipeline. Pendekatan ini membantu mencegah perubahan yang tidak diinginkan jika alur kerja hanya-baca berperilaku buruk.Secara default,
ReadOnlyAccesskebijakan AWS terkelola dilampirkan ke peran hanya-baca dan peran baca-tulis. Kebijakan ini mengurangi kebutuhan iterasi saat menentukan izin yang diperlukan, tetapi mungkin terlalu permisif untuk beberapa organisasi. Jika mau, Anda dapat menghapus kebijakan dari kode Terraform.Berikan izin minimum - Ikuti prinsip hak istimewa paling sedikit 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
| Tugas | Deskripsi | Keterampilan yang dibutuhkan |
|---|---|---|
Salin repositori sampel ke organisasi Anda GitHub . | Kloning
| DevOps insinyur |
Tentukan Akun AWS untuk RVM. | Tentukan penyebaran infrastruktur mana yang Akun AWS akan digunakan untuk RVM. Jangan gunakan akun manajemen atau root. | Arsitek awan |
(Opsional) Izinkan jaringan pipa organisasi untuk dibuat PRs. | catatanLangkah ini hanya diperlukan jika Anda ingin mengizinkan Untuk memungkinkan pipeline organisasi Anda dibuat PRs, gunakan langkah-langkah berikut:
Untuk informasi selengkapnya, lihat Mengelola setelan GitHub Tindakan untuk repositori | DevOps insinyur |
Berikan izin hanya-baca ke akun RVM. | Buat kebijakan delegasi di akun manajemen Anda yang memberikan izin hanya-baca akun RVM Anda. Ini memungkinkan GitHub alur kerja RVM Anda menarik daftar akun AWS organisasi secara dinamis saat skrip berjalan. Gunakan kode berikut dan ganti
| Administrator awan |
Perbarui nilai default dari repo sampel. | Untuk mengonfigurasi RVM agar beroperasi di lingkungan spesifik Anda dan Wilayah AWS, lakukan hal berikut:
| DevOps insinyur |
| Tugas | Deskripsi | Keterampilan yang dibutuhkan |
|---|---|---|
Bootstrap repo RVM. | Langkah ini diperlukan untuk menciptakan kepercayaan OIDC dan peran IAM yang digunakan oleh pipa RVM itu sendiri, sehingga dapat mulai beroperasi dan menjual peran lain. Dalam konteks akun RVM Anda, jalankan | DevOps insinyur |
| Tugas | Deskripsi | Keterampilan yang dibutuhkan |
|---|---|---|
Menyebarkan | Pilih metode penerapan yang selaras dengan praktik organisasi Anda, seperti AFT atau. StackSets Gunakan metode tersebut untuk menerapkan dua peran IAM dalam Peran IAM ini memiliki kebijakan kepercayaan yang memungkinkan peran asumsi peran akun RVM (atau yang setara) untuk mengasumsikannya | Administrator AWS |
Jalankan | Untuk mengonfigurasi RVM Anda sehingga siap untuk membuat peran pipeline, lakukan hal berikut:
Setelah alur kerja selesai, RVM siap untuk:
| DevOps insinyur |
Pemecahan Masalah
| Isu | Solusi |
|---|---|
Saya membuat peran dengan menggunakan RVM, tetapi GitHub tidak dapat mengasumsikan itu. | Verifikasi bahwa nama GitHub repositori cocok dengan nama yang diberikan ke modul. Demikian pula, verifikasi bahwa cabang yang digunakan dalam GitHub pipeline cocok dengan nama cabang yang disediakan untuk |
Peran hanya-baca saya gagal menjalankan pipeline karena tidak memiliki izin untuk membaca sumber daya tertentu. | Meskipun Anda dapat menambahkan izin tindakan tertentu dengan menggunakan |
Sumber daya terkait
Informasi tambahan
Menggunakan GitHub lingkungan
GitHub lingkungan adalah pendekatan alternatif untuk pembatasan berbasis cabang untuk akses peran. Jika Anda lebih suka menggunakan GitHub lingkungan, berikut adalah contoh sintaks untuk kondisi tambahan dalam kebijakan kepercayaan IAM. Sintaks ini menetapkan bahwa peran hanya dapat digunakan ketika GitHub tindakan berjalan di Production lingkungan.
"StringLike": { "token.actions.githubusercontent.com:sub": "repo:octo-org/octo-repo:environment:Production" }
Contoh sintaks menggunakan nilai placeholder berikut:
octo-orgadalah nama GitHub organisasi.octo-repoadalah nama repositori.Productionadalah nama GitHub lingkungan yang spesifik.