Bootstrap lingkungan Anda untuk digunakan dengan AWS CDK - AWS Cloud Development Kit (AWS CDK) v2

Ini adalah Panduan Pengembang AWS CDK v2. CDKV1 yang lebih lama memasuki pemeliharaan pada 1 Juni 2022 dan mengakhiri dukungan pada 1 Juni 2023.

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

Bootstrap lingkungan Anda untuk digunakan dengan AWS CDK

Bootstrap AWS lingkungan Anda untuk mempersiapkannya untuk penerapan AWS Cloud Development Kit (AWS CDK) tumpukan.

Cara mem-bootstrap lingkungan Anda

Anda dapat menggunakan Antarmuka Baris AWS CDK Perintah (AWS CDK CLI) atau alat AWS CloudFormation penyebaran pilihan Anda untuk bootstrap lingkungan Anda.

Gunakan CDK CLI

Anda dapat menggunakan CDK CLI cdk bootstrapperintah untuk bootstrap lingkungan Anda. Ini adalah metode yang kami sarankan jika Anda tidak memerlukan modifikasi signifikan untuk bootstrap.

Bootstrap dari direktori kerja apa pun

Untuk bootstrap dari direktori kerja apa pun, sediakan lingkungan untuk bootstrap sebagai argumen baris perintah. Berikut adalah contohnya:

$ cdk bootstrap aws://123456789012/us-east-1
Tip

Jika Anda tidak memiliki nomor AWS akun Anda, Anda bisa mendapatkannya dari AWS Management Console. Anda juga dapat menggunakan AWS CLI perintah berikut untuk menampilkan informasi akun default Anda, termasuk nomor akun Anda:

$ aws sts get-caller-identity

Jika Anda telah menamai profil di credentials file AWS config dan Anda, gunakan --profile opsi untuk mengambil informasi akun untuk profil tertentu. Berikut adalah contohnya:

$ aws sts get-caller-identity --profile prod

Untuk menampilkan Region default, gunakan aws configure get perintah:

$ aws configure get region $ aws configure get region --profile prod

Saat memberikan argumen, aws:// awalan adalah opsional. Berikut ini valid:

$ cdk bootstrap 123456789012/us-east-1

Untuk mem-bootstrap beberapa lingkungan secara bersamaan, berikan beberapa argumen:

$ cdk bootstrap aws://123456789012/us-east-1 aws://123456789012/us-east-2
Bootstrap dari direktori induk CDK proyek

Anda dapat menjalankan cdk bootstrap dari direktori induk CDK proyek yang berisi cdk.json file. Jika Anda tidak menyediakan lingkungan sebagai argumen, CDK CLI akan memperoleh informasi lingkungan dari sumber default, seperti credentials file Anda config dan atau informasi lingkungan apa pun yang ditentukan untuk CDK tumpukan Anda.

Saat Anda mem-bootstrap dari direktori induk CDK proyek, lingkungan yang disediakan dari argumen baris perintah lebih diutamakan daripada sumber lain.

Untuk bootstrap lingkungan yang ditentukan dalam credentials file config dan Anda, gunakan --profile opsi:

$ cdk bootstrap --profile prod

Untuk informasi selengkapnya tentang cdk bootstrap perintah dan opsi yang didukung, lihatcdk bootstrap.

Gunakan AWS CloudFormation alat apa saja

Anda dapat menyalin template bootstrap dari aws-cdk GitHub repositori atau dapatkan template dengan perintah. cdk bootstrap --show-template Kemudian, gunakan AWS CloudFormation alat apa pun untuk menyebarkan template ke lingkungan Anda.

Dengan metode ini, Anda dapat menggunakan AWS CloudFormation StackSets atau AWS Control Tower. Anda juga dapat menggunakan AWS CloudFormation konsol atau AWS Command Line Interface (AWS CLI). Anda dapat membuat modifikasi pada template Anda sebelum Anda menerapkannya. Metode ini mungkin lebih fleksibel dan cocok untuk penyebaran skala besar.

Berikut ini adalah contoh penggunaan --show-template opsi untuk mengambil dan menyimpan template bootstrap ke mesin lokal Anda:

macOS/Linux
$ cdk bootstrap --show-template > bootstrap-template.yaml
Windows

Pada Windows, PowerShell harus digunakan untuk melestarikan pengkodean template.

powershell "cdk bootstrap --show-template | Out-File -encoding utf8 bootstrap-template.yaml"

Untuk menyebarkan template ini menggunakan CDK CLI, Anda dapat menjalankan yang berikut ini:

$ cdk bootstrap --template bootstrap-template.yaml

Berikut ini adalah contoh penggunaan AWS CLI untuk menyebarkan template:

macOS/Linux
aws cloudformation create-stack \ --stack-name CDKToolkit \ --template-body file://path/to/bootstrap-template.yaml \ --capabilities CAPABILITY_NAMED_IAM \ --region us-west-1
Windows
aws cloudformation create-stack ^ --stack-name CDKToolkit ^ --template-body file://path/to/bootstrap-template.yaml ^ --capabilities CAPABILITY_NAMED_IAM ^ --region us-west-1

Untuk informasi tentang penggunaan CloudFormation StackSets untuk mem-bootstrap beberapa lingkungan, lihat Bootstrapping multiple Akun AWS untuk AWS CDK digunakan CloudFormation StackSets di Blog Operasi & Migrasi AWS Cloud.

Kapan harus mem-bootstrap lingkungan Anda

Anda harus mem-bootstrap setiap AWS lingkungan sebelum Anda menyebarkan ke lingkungan. Kami menyarankan Anda secara proaktif mem-bootstrap setiap lingkungan yang Anda rencanakan untuk digunakan. Anda dapat melakukan ini sebelum Anda berencana untuk benar-benar menerapkan CDK aplikasi ke lingkungan. Dengan mem-bootstrap lingkungan secara proaktif, Anda mencegah potensi masalah masa depan seperti konflik nama bucket Amazon S3 atau menerapkan CDK aplikasi ke lingkungan yang belum di-bootstrap.

Tidak apa-apa untuk mem-bootstrap lingkungan lebih dari sekali. Jika lingkungan telah di-bootstrap, tumpukan bootstrap akan ditingkatkan jika perlu. Kalau tidak, tidak akan terjadi apa-apa.

Jika Anda mencoba menerapkan CDK tumpukan ke lingkungan yang belum di-bootstrap, Anda akan melihat kesalahan seperti berikut:

$ cdk deploy ✨ Synthesis time: 2.02s ❌ Deployment failed: Error: BootstrapExampleStack: SSM parameter /cdk-bootstrap/hnb659fds/version not found. Has the environment been bootstrapped? Please run 'cdk bootstrap' (see https://docs.aws.amazon.com/cdk/latest/guide/bootstrapping.html)

Perbarui tumpukan bootstrap Anda

Secara berkala, CDK tim akan memperbarui template bootstrap ke versi baru. Ketika ini terjadi, kami sarankan Anda memperbarui tumpukan bootstrap Anda. Jika Anda belum menyesuaikan proses bootstrap, Anda dapat memperbarui tumpukan bootstrap Anda dengan mengikuti langkah-langkah yang sama yang Anda ambil untuk mem-bootstrap lingkungan Anda. Untuk informasi selengkapnya, lihat Riwayat versi template bootstrap.

Sumber daya default dibuat selama bootstrap

IAMperan yang dibuat selama bootstrap

Secara default, bootstrap menyediakan peran AWS Identity and Access Management (IAM) berikut di lingkungan Anda:

  • CloudFormationExecutionRole

  • DeploymentActionRole

  • FilePublishingRole

  • ImagePublishingRole

  • LookupRole

CloudFormationExecutionRole

IAMPeran ini adalah peran CloudFormation layanan yang memberikan CloudFormation izin untuk melakukan penerapan tumpukan atas nama Anda. Peran ini memberikan CloudFormation izin untuk melakukan AWS API panggilan di akun Anda, termasuk menerapkan tumpukan.

Dengan menggunakan peran layanan, izin yang disediakan untuk peran layanan menentukan tindakan apa yang dapat dilakukan pada sumber daya Anda. CloudFormation Tanpa peran layanan ini, kredensi keamanan yang Anda berikan CDK CLI akan menentukan apa yang CloudFormation diperbolehkan untuk dilakukan.

DeploymentActionRole

IAMPeran ini memberikan izin untuk melakukan penerapan ke lingkungan Anda. Hal ini diasumsikan oleh CDK CLI selama penerapan.

Dengan menggunakan peran untuk penerapan, Anda dapat melakukan penerapan lintas akun karena peran tersebut dapat diasumsikan oleh AWS identitas di akun yang berbeda.

FilePublishingRole

IAMPeran ini memberikan izin untuk melakukan tindakan terhadap bucket Amazon Simple Storage Service (Amazon S3) yang di-bootstrap, termasuk mengunggah dan menghapus aset. Hal ini diasumsikan oleh CDK CLI selama penerapan.

ImagePublishingRole

IAMPeran ini memberikan izin untuk melakukan tindakan terhadap repositori Amazon Elastic Container Registry (AmazonECR) yang di-bootstrap. Hal ini diasumsikan oleh CDK CLI selama penerapan.

LookupRole

IAMPeran ini memberikan readOnly izin untuk mencari nilai konteks dari AWS lingkungan. Hal ini diasumsikan oleh CDK CLI saat melakukan tugas-tugas seperti sintesis template dan penerapan.

Sumber daya IDs dibuat selama bootstrap

Saat Anda menerapkan template bootstrap default, fisik IDs untuk sumber daya bootstrap dibuat menggunakan struktur berikut:cdk-qualifier-description-account-ID-Region.

  • Qualifier - Nilai string unik sembilan karakter dari. hnb659fds Nilai aktual tidak memiliki signifikansi.

  • Deskripsi — Deskripsi singkat tentang sumber daya. Misalnya, container-assets.

  • ID Akun — Akun AWS ID lingkungan.

  • Wilayah — Lingkungan. Wilayah AWS

Berikut ini adalah contoh ID fisik bucket pementasan Amazon S3 yang dibuat selama bootstrap:. cdk-hnb659fds-assets-012345678910-us-west-1

Izin untuk digunakan saat bootstrap lingkungan Anda

Saat melakukan bootstrap AWS lingkungan, IAM identitas yang melakukan bootstrap harus memiliki setidaknya izin berikut:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "cloudformation:*", "ecr:*", "ssm:*", "s3:*", "iam:*" ], "Resource": "*" } ] }

Seiring waktu, tumpukan bootstrap, termasuk sumber daya yang dibuat dan izin yang mereka butuhkan, dapat berubah. Dengan perubahan future, Anda mungkin perlu memodifikasi izin yang diperlukan untuk mem-bootstrap lingkungan.

Kustomisasi bootstrap

Jika template bootstrap default tidak sesuai dengan kebutuhan Anda, Anda dapat menyesuaikan bootstrap sumber daya ke lingkungan Anda dengan cara berikut:

  • Gunakan opsi baris perintah dengan cdk bootstrap perintah — Metode ini paling baik untuk membuat perubahan kecil dan spesifik yang didukung melalui opsi baris perintah.

  • Ubah template bootstrap default dan terapkan - Metode ini paling baik untuk membuat perubahan kompleks atau jika Anda ingin kontrol penuh atas konfigurasi sumber daya yang disediakan selama bootstrap.

Untuk informasi selengkapnya tentang menyesuaikan bootstrap, lihat. Sesuaikan AWS CDK bootstrap

Bootstrapping dengan Pipelines CDK

Jika Anda menggunakan CDK Pipelines untuk menyebarkan ke lingkungan akun lain, dan Anda menerima pesan seperti berikut:

Policy contains a statement with one or more invalid principals

Pesan kesalahan ini berarti bahwa IAM peran yang sesuai tidak ada di lingkungan lain. Penyebab yang paling mungkin adalah bahwa lingkungan belum di-bootstrap. Bootstrap lingkungan dan coba lagi.

Melindungi tumpukan bootstrap Anda dari penghapusan

Jika tumpukan bootstrap dihapus, AWS sumber daya yang awalnya disediakan di lingkungan untuk mendukung CDK penerapan juga akan dihapus. Ini akan menyebabkan pipa berhenti bekerja. Jika ini terjadi, tidak ada solusi umum untuk pemulihan.

Setelah lingkungan Anda di-bootstrap, jangan hapus dan buat ulang tumpukan bootstrap lingkungan. Sebagai gantinya, coba perbarui tumpukan bootstrap ke versi baru dengan menjalankan cdk bootstrap perintah lagi.

Untuk melindungi dari penghapusan tumpukan bootstrap Anda secara tidak sengaja, kami sarankan Anda memberikan --termination-protection opsi dengan cdk bootstrap perintah untuk mengaktifkan perlindungan terminasi. Anda dapat mengaktifkan perlindungan terminasi pada tumpukan bootstrap baru atau yang sudah ada. Untuk petunjuk tentang mengaktifkan perlindungan terminasi, lihat Mengaktifkan perlindungan terminasi untuk tumpukan bootstrap.

Riwayat versi template bootstrap

Template bootstrap berversi dan berkembang seiring waktu dengan dirinya sendiri. AWS CDK Jika Anda menyediakan template bootstrap Anda sendiri, tetap up to date dengan template default kanonik. Anda ingin memastikan bahwa template Anda terus bekerja dengan semua CDK fitur.

catatan

Versi sebelumnya dari template bootstrap membuat AWS KMS key di setiap lingkungan bootstrap secara default. Untuk menghindari biaya untuk KMS kunci, bootstrap ulang lingkungan ini menggunakan--no-bootstrap-customer-key. Default saat ini tidak ada KMS kunci, yang membantu menghindari biaya ini.

Bagian ini berisi daftar perubahan yang dibuat di setiap versi.

Versi template AWS CDK versi Perubahan
1 1.40.0 Versi awal template dengan Bucket, Key, Repository, dan Roles.
2 1.45.0 Pisahkan peran penerbitan aset menjadi peran penerbitan file dan gambar yang terpisah.
3 1.46.0 Tambahkan FileAssetKeyArn ekspor untuk dapat menambahkan izin dekripsi ke konsumen aset.
4 1.61.0 AWS KMS izin sekarang tersirat melalui Amazon S3 dan tidak lagi diperlukan. FileAsetKeyArn Tambahkan CdkBootstrapVersion SSM parameter sehingga versi stack bootstrap dapat diverifikasi tanpa mengetahui nama tumpukan.
5 1.87.0 Peran penyebaran dapat membaca SSM parameter.
6 1.108.0 Tambahkan peran pencarian terpisah dari peran penerapan.
6 1.109.0 Lampirkan aws-cdk:bootstrap-role tag ke peran penerapan, penerbitan file, dan penerbitan gambar.
7 1.110.0 Peran penyebaran tidak dapat lagi membaca Bucket di akun target secara langsung. (Namun, peran ini secara efektif adalah administrator, dan selalu dapat menggunakan AWS CloudFormation izinnya untuk membuat bucket dapat dibaca).
8 1.114.0 Peran pencarian memiliki izin hanya-baca penuh ke lingkungan target, dan memiliki aws-cdk:bootstrap-role tag juga.
9 2.1.0 Memperbaiki unggahan aset Amazon S3 agar tidak ditolak oleh enkripsi yang biasa direferensikan. SCP
10 2.4.0 Amazon sekarang ECR ScanOnPush diaktifkan secara default.
11 2.18.0 Menambahkan kebijakan yang memungkinkan Lambda menarik dari ECR repo Amazon sehingga bertahan dari bootstrap ulang.
12 2.20.0 Menambahkan dukungan untuk eksperimentalcdk import.
13 2.25.0 Membuat gambar kontainer di repositori ECR Amazon yang dibuat bootstrap tidak dapat diubah.
14 2.34.0 Mematikan pemindaian ECR gambar Amazon di tingkat repositori secara default untuk memungkinkan bootstrapping Wilayah yang tidak mendukung pemindaian gambar.
15 2.60.0 KMSkunci tidak dapat ditandai.
16 2.69.0 Alamat pencarian Security Hub KMS.2.
17 2.72.0 Alamat pencarian Security Hub ECR.3.
18 2.80.0 Perubahan yang dikembalikan dibuat untuk versi 16 karena tidak berfungsi di semua partisi dan tidak disarankan.
19 2.106.1 Perubahan yang dikembalikan dibuat ke versi 18 di mana AccessControl properti telah dihapus dari template. (#27964)
20 2.119.0 Tambahkan ssm:GetParameters tindakan ke IAM peran AWS CloudFormation penerapan. Untuk informasi selengkapnya, lihat #28336.
21 2.149.0 Tambahkan kondisi ke peran penerbitan file.
22 2.160.0 Tambahkan sts:TagSession izin ke kebijakan kepercayaan IAM peran bootstrap.
23 2.161.0 Tambahkan cloudformation:RollbackStack dan cloudformation:ContinueUpdateRollback izin ke kebijakan kepercayaan peran penerapanIAM. Ini memberikan izin untuk cdk rollback perintah.

Tingkatkan dari template bootstrap lama ke modern

AWS CDK V1 mendukung dua template bootstrap, warisan dan modern. CDKv2 hanya mendukung template modern. Sebagai referensi, berikut adalah perbedaan tingkat tinggi antara kedua templat ini.

Fitur Warisan (hanya v1) Modern (v1 dan v2)
Penerapan lintas akun Tidak diizinkan Diizinkan
AWS CloudFormation Izin Menyebarkan menggunakan izin pengguna saat ini (ditentukan oleh AWS profil, variabel lingkungan, dll.) Menerapkan menggunakan izin yang ditentukan saat tumpukan bootstrap disediakan (misalnya, dengan menggunakan) --trust
Pembuatan Versi Hanya satu versi stack bootstrap yang tersedia Bootstrap stack berversi; sumber daya baru dapat ditambahkan di versi future, dan AWS CDK aplikasi dapat memerlukan versi minimum
Sumber daya * Bucket Amazon S3 Bucket Amazon S3
AWS KMS key
IAMperan
ECRRepositori Amazon
SSMparameter untuk pembuatan versi
Penamaan sumber daya Dihasilkan secara otomatis Deterministik
Enkripsi ember Kunci default AWS kunci terkelola secara default. Anda dapat menyesuaikan untuk menggunakan kunci yang dikelola pelanggan.

* Kami akan menambahkan sumber daya tambahan ke template bootstrap sesuai kebutuhan.

Lingkungan yang di-bootstrap menggunakan template lama harus ditingkatkan untuk menggunakan template modern untuk v2 dengan melakukan bootstrapping ulang. CDK Terapkan ulang semua AWS CDK aplikasi di lingkungan setidaknya sekali sebelum menghapus bucket lama.

Alamat Temuan Security Hub

Jika Anda menggunakan AWS Security Hub, Anda mungkin melihat temuan yang dilaporkan pada beberapa sumber daya yang dibuat oleh proses AWS CDK bootstrap. Temuan Security Hub membantu Anda menemukan konfigurasi sumber daya yang harus Anda periksa ulang untuk akurasi dan keamanannya. Kami telah meninjau konfigurasi sumber daya khusus ini dengan AWS Keamanan dan yakin itu bukan merupakan masalah keamanan.

[KMS.2] IAM prinsipal tidak boleh memiliki kebijakan IAM sebaris yang memungkinkan tindakan dekripsi pada semua kunci KMS

Deploy role (DeploymentActionRole) memberikan izin untuk membaca data terenkripsi, yang diperlukan untuk penerapan lintas akun dengan Pipelines. CDK Kebijakan dalam peran ini tidak memberikan izin untuk semua data. Ini hanya memberikan izin untuk membaca data terenkripsi dari Amazon S3 dan AWS KMS, dan hanya jika sumber daya tersebut mengizinkannya melalui bucket atau kebijakan kunci mereka.

Berikut ini adalah cuplikan dari dua pernyataan ini dalam peran penerapan dari template bootstrap:

DeploymentActionRole: Type: AWS::IAM::Role Properties: ... Policies: - PolicyDocument: Statement: ... - Sid: PipelineCrossAccountArtifactsBucket Effect: Allow Action: - s3:GetObject* - s3:GetBucket* - s3:List* - s3:Abort* - s3:DeleteObject* - s3:PutObject* Resource: "*" Condition: StringNotEquals: s3:ResourceAccount: Ref: AWS::AccountId - Sid: PipelineCrossAccountArtifactsKey Effect: Allow Action: - kms:Decrypt - kms:DescribeKey - kms:Encrypt - kms:ReEncrypt* - kms:GenerateDataKey* Resource: "*" Condition: StringEquals: kms:ViaService: Fn::Sub: s3.${AWS::Region}.amazonaws.com ...

Mengapa Security Hub menandai ini?

Kebijakan berisi Resource: * gabungan dengan Condition klausa. Security Hub menandai * wildcard. Wildcard ini digunakan karena pada saat akun di-bootstrap, AWS KMS kunci yang dibuat oleh CDK Pipelines untuk bucket CodePipeline artefak belum ada, dan oleh karena itu, tidak dapat direferensikan pada template bootstrap oleh. ARN Selain itu, Security Hub tidak mempertimbangkan Condition klausa saat menaikkan bendera ini. Ini Condition membatasi permintaan Resource: * yang dibuat dari AWS KMS kunci Akun AWS yang sama. Permintaan ini harus berasal dari Amazon S3 Wilayah AWS sama dengan kuncinya. AWS KMS

Apakah saya perlu memperbaiki temuan ini?

Selama Anda belum memodifikasi AWS KMS kunci pada template bootstrap Anda menjadi terlalu permisif, peran penerapan tidak memungkinkan lebih banyak akses daripada yang dibutuhkan. Oleh karena itu, tidak perlu memperbaiki temuan ini.

Bagaimana jika saya ingin memperbaiki temuan ini?

Cara Anda memperbaiki temuan ini tergantung pada apakah Anda akan menggunakan CDK Pipelines untuk penerapan lintas akun atau tidak.

Untuk memperbaiki pencarian Security Hub dan menggunakan CDK Pipelines untuk penerapan lintas akun
  1. Jika Anda belum melakukannya, gunakan tumpukan CDK bootstrap menggunakan cdk bootstrap perintah.

  2. Jika Anda belum melakukannya, buat dan terapkan CDK Pipeline. Untuk instruksi, lihatIntegrasi dan pengiriman berkelanjutan (CI/CD) menggunakan CDK Pipelines.

  3. Dapatkan AWS KMS kunci ember ARN CodePipeline artefak. Sumber daya ini dibuat selama pembuatan pipa.

  4. Dapatkan salinan template CDK bootstrap untuk memodifikasinya. Berikut ini adalah contoh, menggunakan AWS CDK CLI:

    $ cdk bootstrap --show-template > bootstrap-template.yaml
  5. Ubah template dengan mengganti Resource: * PipelineCrossAccountArtifactsKey pernyataan dengan ARN nilai Anda.

  6. Terapkan template untuk memperbarui tumpukan bootstrap Anda. Berikut ini adalah contoh, menggunakan CDK CLI:

    $ cdk bootstrap aws://account-id/region --template bootstrap-template.yaml
Untuk memperbaiki temuan Security Hub jika Anda tidak menggunakan CDK Pipelines untuk penerapan lintas akun
  1. Dapatkan salinan template CDK bootstrap untuk memodifikasinya. Berikut ini adalah contoh, menggunakan CDK CLI:

    $ cdk bootstrap --show-template > bootstrap-template.yaml
  2. Hapus PipelineCrossAccountArtifactsKey pernyataan PipelineCrossAccountArtifactsBucket dan dari template.

  3. Terapkan template untuk memperbarui tumpukan bootstrap Anda. Berikut ini adalah contoh, menggunakan CDK CLI:

    $ cdk bootstrap aws://account-id/region --template bootstrap-template.yaml

Pertimbangan

Karena bootstrap menyediakan sumber daya di lingkungan Anda, Anda mungkin dikenakan AWS biaya ketika sumber daya tersebut digunakan dengan. AWS CDK