Secara otomatis melampirkan kebijakan terkelola AWS untuk Systems Manager ke profil EC2 instans menggunakan Cloud Custodian dan AWS CDK - AWS Prescriptive Guidance

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

Secara otomatis melampirkan kebijakan terkelola AWS untuk Systems Manager ke profil EC2 instans menggunakan Cloud Custodian dan AWS CDK

Ali Asfour dan Aaron Lennon, Amazon Web Services

Ringkasan

Anda dapat mengintegrasikan instans Amazon Elastic Compute Cloud (Amazon EC2) dengan AWS Systems Manager untuk mengotomatiskan tugas operasional serta memberikan lebih banyak visibilitas dan kontrol. Untuk berintegrasi dengan Systems Manager, EC2 instans harus memiliki Agen AWS Systems Manager (Agen SSM) yang diinstal dan kebijakan AmazonSSMManagedInstanceCore AWS Identity and Access Management (IAM) yang terpasang pada profil instans mereka. 

Namun, jika Anda ingin memastikan bahwa semua profil EC2 instans memiliki AmazonSSMManagedInstanceCore kebijakan yang dilampirkan, Anda dapat menghadapi tantangan dalam memperbarui EC2 instans baru yang tidak memiliki profil EC2 instans atau instance yang memiliki profil instans tetapi tidak memiliki kebijakan. AmazonSSMManagedInstanceCore Mungkin juga sulit untuk menambahkan kebijakan ini di beberapa akun Amazon Web Services (AWS) dan Wilayah AWS.

Pola ini membantu mengatasi tantangan ini dengan menerapkan tiga kebijakan Cloud Custodian di akun AWS Anda:

  • Kebijakan Cloud Custodian pertama memeriksa EC2 instans yang ada yang memiliki profil instans tetapi tidak memiliki kebijakan. AmazonSSMManagedInstanceCore AmazonSSMManagedInstanceCoreKebijakan tersebut kemudian dilampirkan. 

  • Kebijakan Cloud Custodian kedua memeriksa instans yang ada tanpa profil EC2 instans dan menambahkan profil instans default yang memiliki kebijakan yang dilampirkan. AmazonSSMManagedInstanceCore

  • Kebijakan Cloud Custodian ketiga membuat fungsi AWS Lambda di akun Anda untuk memantau pembuatan EC2 instans dan profil instans. Ini memastikan bahwa AmazonSSMManagedInstanceCore kebijakan dilampirkan secara otomatis saat EC2 instance dibuat.

Pola ini menggunakan DevOps alat AWS untuk mencapai penerapan kebijakan Cloud Custodian yang berkelanjutan dan berskala besar ke lingkungan multi-akun, tanpa menyediakan lingkungan komputasi terpisah. 

Prasyarat dan batasan

Prasyarat

  • Dua atau lebih akun AWS aktif. Satu akun adalah akun keamanan dan yang lainnya adalah akun anggota.

  • Izin untuk menyediakan sumber daya AWS di akun keamanan. Pola ini menggunakan izin administrator, tetapi Anda harus memberikan izin sesuai dengan persyaratan dan kebijakan organisasi Anda.

  • Kemampuan untuk mengambil peran IAM dari akun keamanan ke akun anggota dan membuat peran IAM yang diperlukan. Untuk informasi selengkapnya tentang hal ini, lihat Mendelegasikan akses di seluruh akun AWS menggunakan peran IAM dalam dokumentasi IAM.

  • penting

    AWS Command Line Interface (AWS CLI), diinstal dan dikonfigurasi. Untuk tujuan pengujian, Anda dapat mengonfigurasi AWS CLI dengan menggunakan aws configure perintah atau menyetel variabel lingkungan. : Ini tidak disarankan untuk lingkungan produksi dan kami menyarankan agar akun ini hanya diberikan akses hak istimewa paling sedikit. Untuk informasi lebih lanjut tentang ini, lihat Berikan hak istimewa paling sedikit dalam dokumentasi IAM.

  • devops-cdk-cloudcustodian.zipFile (terlampir), diunduh ke komputer lokal Anda.

  • Keakraban dengan Python

  • Alat yang diperlukan (Node.js, AWS Cloud Development Kit (AWS CDK), dan Git), diinstal dan dikonfigurasi. Anda dapat menggunakan install-prerequisites.sh file dalam devops-cdk-cloudcustodian.zip file untuk menginstal alat-alat ini. Pastikan Anda menjalankan file ini dengan hak akses root. 

Batasan

  • Meskipun pola ini dapat digunakan dalam lingkungan produksi, pastikan bahwa semua peran dan kebijakan IAM memenuhi persyaratan dan kebijakan organisasi Anda. 

Versi Package

  • Cloud Custodian versi 0.9 atau yang lebih baru

  • TypeScript versi 3.9.7 atau yang lebih baru

  • Node.js versi 14.15.4 atau yang lebih baru

  • npmversi 7.6.1 atau yang lebih baru

  • AWS CDK versi 1.96.0 atau yang lebih baru

Arsitektur

AWS CodePipeline workflow with CodeCommit, CodeBuild, and deployment to member accounts.

Diagram menunjukkan alur kerja berikut:

  1. Kebijakan Cloud Custodian didorong ke CodeCommit repositori AWS di akun keamanan. Aturan Amazon CloudWatch Events secara otomatis memulai CodePipeline pipeline AWS.

  2. Pipeline mengambil kode terbaru dari CodeCommit dan mengirimkannya ke bagian integrasi berkelanjutan dari pipeline integrasi berkelanjutan dan pengiriman berkelanjutan (CI/CD) yang ditangani oleh AWS. CodeBuild

  3. CodeBuild melakukan DevSecOps tindakan lengkap, termasuk validasi sintaks kebijakan pada kebijakan Cloud Custodian, dan menjalankan kebijakan ini dalam --dryrun mode untuk memeriksa sumber daya mana yang diidentifikasi.

  4. Jika tidak ada kesalahan, tugas berikutnya memberi tahu administrator untuk meninjau perubahan dan menyetujui penyebaran ke akun anggota.

Tumpukan teknologi

  • AWS CDK

  • CodeBuild

  • CodeCommit

  • CodePipeline

  • IAM

  • Penjaga Awan 

Otomatisasi dan skala

Modul pipeline AWS CDK menyediakan CI/CD pipeline yang digunakan CodePipeline untuk mengatur pembuatan dan pengujian kode sumber CodeBuild, selain penerapan sumber daya AWS dengan tumpukan AWS. CloudFormation Anda dapat menggunakan pola ini untuk semua akun anggota dan Wilayah di organisasi Anda. Anda juga dapat memperluas Roles creation tumpukan untuk menerapkan peran IAM lainnya di akun anggota Anda. 

Alat

  • AWS Cloud Development Kit (AWS CDK) adalah kerangka kerja pengembangan perangkat lunak untuk mendefinisikan infrastruktur cloud dalam kode dan menyediakannya melalui AWS. CloudFormation

  • AWS Command Line Interface (AWS CLI) adalah alat sumber terbuka yang memungkinkan Anda berinteraksi dengan layanan AWS menggunakan perintah di shell baris perintah Anda.

  • AWS CodeBuild adalah layanan build yang dikelola sepenuhnya di cloud.

  • AWS CodeCommit adalah layanan kontrol versi yang dapat Anda gunakan untuk menyimpan dan mengelola aset secara pribadi.

  • AWS CodePipeline adalah layanan pengiriman berkelanjutan yang dapat Anda gunakan untuk memodelkan, memvisualisasikan, dan mengotomatiskan langkah-langkah yang diperlukan untuk merilis perangkat lunak Anda.

  • AWS Identity and Access Management adalah layanan web yang membantu Anda mengontrol akses ke sumber daya AWS dengan aman.

  • Cloud Custodian adalah alat yang menyatukan lusinan alat dan skrip yang digunakan sebagian besar organisasi untuk mengelola akun cloud publik mereka menjadi satu alat sumber terbuka.

  • Node.js adalah JavaScript runtime yang dibangun di mesin V8 JavaScript Google Chrome.

Kode

Untuk daftar rinci modul, fungsi akun, file, dan perintah penerapan yang digunakan dalam pola ini, lihat README file dalam devops-cdk-cloudcustodian.zip file (terlampir).

Epik

TugasDeskripsiKeterampilan yang dibutuhkan

Siapkan CodeCommit repositori.

  1. Buka zip devops-cdk-cloudcustodian.zip file (terlampir) di direktori kerja di komputer lokal Anda.

  2. Masuk ke AWS Management Console untuk akun keamanan Anda, buka CodeCommit konsol, lalu buat devops-cdk-cloudcustodian repositori baru.

  3. Ubah ke direktori proyek dan atur CodeCommit repositori sebagai asal, komit perubahan, lalu dorong ke cabang asal dengan menjalankan perintah berikut:

  • cd devops-cdk-cloudcustodian 

  • git init --initial-branch=main

  • git add . git commit -m 'initial commit' 

  • git remote add origin https://git-codecommit.us-east-1.amazonaws.com/v1/devops-cdk-cloudcustodian 

  • git push origin main

Untuk informasi selengkapnya tentang ini, lihat Membuat CodeCommit repositori di dokumentasi CodeCommit AWS.

Developer

Instal alat yang diperlukan.

Gunakan install-prerequisites.sh file untuk menginstal semua alat yang diperlukan di Amazon Linux. Ini tidak termasuk AWS CLI karena sudah diinstal sebelumnya.

Untuk informasi selengkapnya tentang ini, lihat bagian Prasyarat Memulai AWS CDK dalam dokumentasi AWS CDK.

Developer

Instal paket AWS CDK yang diperlukan.

  1. Siapkan lingkungan virtual Anda dengan menjalankan perintah berikut di AWS CLI: $ python3 -m venv .env

  2. Aktifkan lingkungan virtual Anda dengan menjalankan perintah berikut: $ source .env/bin/activate

  3. Setelah lingkungan virtual diaktifkan, instal dependensi yang diperlukan dengan menjalankan perintah berikut: $ pip install -r requirements.txt

  4. Untuk menambahkan dependensi tambahan (misalnya, library AWS CDK lainnya), tambahkan dependensi tersebut ke requirements.txt file, lalu jalankan perintah berikut: pip install -r requirements.txt

Paket-paket berikut diperlukan oleh AWS CDK dan disertakan dalam requirements.txt file:

  • aws-cdk.aws-cloudwatch

  • aws-cdk.aws-codebuild

  • aws-cdk.aws-codecommit

  • aws-cdk.aws-codedeploy

  • aws-cdk.aws-codepipeline

  • aws-cdk.aws-codepipeline-actions

  • aws-cdk.aws-events

  • aws-cdk.aws-events-targets

  • aws-cdk.aws-iam

  • aws-cdk.aws-logs

  • aws-cdk.aws-s3

  • aws-cdk.aws-sns

  • aws-cdk.aws-sns-subscriptions

  • aws-cdk.aws-sqs

  • aws-cdk.core

Developer
TugasDeskripsiKeterampilan yang dibutuhkan

Perbarui variabel yang diperlukan.

Buka vars.py file di folder root CodeCommit repositori Anda dan perbarui variabel berikut:

  •  Perbarui var_deploy_region = ‘us-east-1’ dengan Wilayah AWS tempat Anda ingin pipeline diterapkan.

  •  Perbarui var_codecommit_repo_name = "cdk-cloudcustodian" dengan nama CodeCommit repositori Anda.

  •  Perbarui var_codecommit_branch_name = "main" dengan nama CodeCommit cabang.

  •  Perbarui var_adminEmail=notifyadmin@email.com’ dengan alamat email untuk administrator yang menyetujui perubahan.

  • Perbarui var_slackWebHookUrl = https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX 'dengan webhook Slack yang digunakan untuk mengirim pemberitahuan Cloud Custodian saat perubahan dilakukan.

  •  Perbarui var_orgId = ‘o-yyyyyyyyyy’ dengan ID organisasi Anda.

  • Perbarui security_account = ‘123456789011’ dengan ID akun AWS untuk akun tempat pipeline digunakan.

  • Perbarui member_accounts = [‘111111111111’,’111111111112’,’111111111113’] dengan akun anggota tempat Anda ingin mem-bootstrap tumpukan AWS CDK dan menerapkan peran IAM yang diperlukan.

  • Setel cdk_bootstrap_member_accounts = True ke True jika Anda ingin pipeline secara otomatis mem-bootstrap AWS CDK ke akun anggota Anda.  Jika disetel ke True ini juga memerlukan nama peran IAM yang ada di akun anggota yang dapat diasumsikan dari akun keamanan. Peran IAM ini juga harus memiliki izin yang diperlukan untuk mem-bootstrap AWS CDK.

  • catatan

    Perbarui cdk_bootstrap_role = ‘AWSControlTowerExecution’ dengan peran IAM yang ada di akun anggota yang dapat diasumsikan dari akun keamanan. Peran ini juga harus mengizinkan untuk mem-bootstrap AWS CDK. : Ini hanya berlaku jika cdk_bootstrap_member_accounts disetel keTrue.

Developer

Perbarui file account.ymldengan informasi akun anggota.

Untuk menjalankan alat Cloud Custodian c7n-org terhadap beberapa akun, Anda harus menempatkan file accounts.yml konfigurasi di root repositori. Berikut ini adalah contoh file konfigurasi Cloud Custodian untuk AWS:

accounts: - account_id: '123123123123' name: account-1 regions: - us-east-1 - us-west-2 role: arn:aws:iam::123123123123:role/CloudCustodian vars: charge_code: xyz tags: - type:prod - division:some division - partition:us - scope:pci
Developer
TugasDeskripsiKeterampilan yang dibutuhkan

Boostrap akun keamanan.

Bootstrap deploy_account dengan cloudcustodian_stack aplikasi dengan menjalankan perintah berikut:

cdk bootstrap -a 'python3 cloudcustodian/cloudcustodian_stack.py
Developer

Opsi 1 - Secara otomatis bootstrap akun anggota.

Jika cdk_bootstrap_member_accounts variabel diatur ke True dalam vars.py file, akun yang ditentukan dalam member_accounts variabel secara otomatis di-bootstrap oleh pipeline.

Jika diperlukan, Anda dapat memperbarui *cdk_bootstrap_role* dengan peran IAM yang dapat Anda asumsikan dari akun keamanan dan yang memiliki izin yang diperlukan untuk mem-bootstrap AWS CDK.

Akun baru yang ditambahkan ke member_accounts  variabel secara otomatis di-bootstrap oleh pipeline sehingga peran yang diperlukan dapat digunakan.

Developer

Opsi 2 - Bootstrap akun anggota secara manual.

Meskipun kami tidak menyarankan menggunakan pendekatan ini, Anda dapat mengatur nilai cdk_bootstrap_member_accounts to False dan melakukan langkah ini secara manual dengan menjalankan perintah berikut:

$ cdk bootstrap -a 'python3 cloudcustodian/member_account_roles_stack.py' \ --trust {security_account_id} \ --context assume-role-credentials:writeIamRoleName={role_name} \ --context assume-role-credentials:readIamRoleName={role_name} \ --mode=ForWriting \ --context bootstrap=true \ --cloudformation-execution-policies arn:aws:iam::aws:policy/AdministratorAccess
penting

Pastikan Anda memperbarui {security_account_id} dan {role_name} nilai dengan nama peran IAM yang dapat Anda asumsikan dari akun keamanan dan yang memiliki izin yang diperlukan untuk mem-bootstrap AWS CDK.

Anda juga dapat menggunakan pendekatan lain untuk mem-bootstrap akun anggota, misalnya, dengan AWS CloudFormation. Untuk informasi selengkapnya tentang ini, lihat Bootstrapping di dokumentasi AWS CDK.

Developer
TugasDeskripsiKeterampilan yang dibutuhkan

Buat peran IAM di akun anggota.

Jalankan perintah berikut untuk menyebarkan member_account_roles_stack tumpukan dan membuat peran IAM di akun anggota:

cdk deploy --all -a 'python3 cloudcustodian/member_account_roles_stack.py' --require-approval never
Developer

Terapkan tumpukan pipeline Cloud Custodian.

Jalankan perintah berikut untuk membuat cloudcustodian_stack.py pipeline Cloud Custodian yang disebarkan ke akun keamanan:

cdk deploy -a 'python3 cloudcustodian/cloudcustodian_stack.py'
Developer

Sumber daya terkait

Lampiran

Untuk mengakses konten tambahan yang terkait dengan dokumen ini, unzip file berikut: attachment.zip