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.
-
Untuk pengenalan lingkungan, lihatLingkungan untuk AWS CDK.
-
Untuk pengantar bootstrap, lihat. AWS CDK bootstrap
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 bootstrap
perintah 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 AWSconfig
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 berisicdk.json
file. Jika Anda tidak menyediakan lingkungan sebagai argumen, CDK CLI akan memperoleh informasi lingkungan dari sumber default, seperticredentials
file Andaconfig
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
fileconfig
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 bootstrapcdk 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:
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:
Untuk informasi tentang penggunaan CloudFormation StackSets untuk mem-bootstrap beberapa lingkungan, lihat Bootstrapping multiple Akun AWS untuk AWS CDK digunakan CloudFormation StackSets di Blog
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
-
Jika Anda belum melakukannya, gunakan tumpukan CDK bootstrap menggunakan
cdk bootstrap
perintah. -
Jika Anda belum melakukannya, buat dan terapkan CDK Pipeline. Untuk instruksi, lihatIntegrasi dan pengiriman berkelanjutan (CI/CD) menggunakan CDK Pipelines.
-
Dapatkan AWS KMS kunci ember ARN CodePipeline artefak. Sumber daya ini dibuat selama pembuatan pipa.
-
Dapatkan salinan template CDK bootstrap untuk memodifikasinya. Berikut ini adalah contoh, menggunakan AWS CDK CLI:
$
cdk bootstrap --show-template > bootstrap-template.yaml
-
Ubah template dengan mengganti
Resource: *
PipelineCrossAccountArtifactsKey
pernyataan dengan ARN nilai Anda. -
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
-
Dapatkan salinan template CDK bootstrap untuk memodifikasinya. Berikut ini adalah contoh, menggunakan CDK CLI:
$
cdk bootstrap --show-template > bootstrap-template.yaml
-
Hapus
PipelineCrossAccountArtifactsKey
pernyataanPipelineCrossAccountArtifactsBucket
dan dari template. -
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