

Ini adalah Panduan Pengembang AWS CDK v2. CDK v1 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
<a name="bootstrapping-env"></a>

Bootstrap AWS lingkungan Anda untuk mempersiapkannya untuk penyebaran tumpukan AWS Cloud Development Kit (AWS CDK).
+ Untuk pengenalan lingkungan, lihat [Lingkungan untuk AWS CDK](environments.md).
+ [Untuk pengantar bootstrap, lihat AWS Bootstrapping CDK.](bootstrapping.md)

## Cara bootstrap lingkungan Anda
<a name="bootstrapping-howto"></a>

Anda dapat menggunakan AWS CDK Command Line Interface (AWS CDK CLI) atau alat AWS CloudFormation penyebaran pilihan Anda untuk bootstrap lingkungan Anda.<a name="bootstrapping-howto-cli"></a>

 **Gunakan CDK CLI**   
Anda dapat menggunakan perintah CDK `cdk bootstrap` CLI untuk mem-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 ini adalah contohnya:  

```
$ cdk bootstrap <aws://123456789012/us-east-1>
```
Jika Anda tidak memiliki nomor AWS akun, Anda bisa mendapatkannya dari AWS Management Console. Anda juga dapat menggunakan perintah AWS CLI 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 ini 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 proyek CDK**   
Anda dapat menjalankan `cdk bootstrap` dari direktori induk proyek CDK yang berisi `cdk.json` file. Jika Anda tidak menyediakan lingkungan sebagai argumen, CDK CLI akan memperoleh informasi lingkungan dari sumber default, seperti file `credentials` dan `config` Anda atau informasi lingkungan apa pun yang ditentukan untuk tumpukan CDK Anda.  
Saat Anda mem-bootstrap dari direktori induk proyek CDK, 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, lihat [cdk bootstrap](ref-cli-cmd-bootstrap.md).<a name="bootstrapping-howto-cfn"></a>

 **Gunakan AWS CloudFormation alat apa saja**   
Anda dapat menyalin [template bootstrap](https://github.com/aws/aws-cdk-cli/blob/main/packages/aws-cdk/lib/api/bootstrap/bootstrap-template.yaml) dari *aws-cdk-cli GitHub repositori* atau mendapatkan 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 antarmuka baris AWS perintah (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:  

**Example**  

```
$ cdk bootstrap --show-template > bootstrap-template.yaml
```
Pada Windows, PowerShell harus digunakan untuk melestarikan pengkodean template.  

```
powershell "cdk bootstrap --show-template | Out-File -encoding utf8 bootstrap-template.yaml"
```
Jika pemberitahuan CDK muncul di output AWS CloudFormation template Anda, berikan `--no-notices` opsi dengan perintah Anda.
Untuk menerapkan template ini menggunakan CDK CLI, Anda dapat menjalankan yang berikut:  

```
$ cdk bootstrap --template <bootstrap-template.yaml>
```
Berikut ini adalah contoh penggunaan AWS CLI untuk menyebarkan template:  

**Example**  

```
aws cloudformation create-stack \
  --stack-name CDKToolkit \
  --template-body file://<path/to/>bootstrap-template.yaml \
  --capabilities CAPABILITY_NAMED_IAM \
  --region <us-west-1>
```

```
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 beberapa AWS akun untuk AWS CDK yang digunakan CloudFormation StackSets](https://aws.amazon.com/blogs/mt/bootstrapping-multiple-aws-accounts-for-aws-cdk-using-cloudformation-stacksets/) di Blog *Operasi & Migrasi AWS Cloud*.

## Kapan harus bootstrap lingkungan Anda
<a name="bootstrapping-env-when"></a>

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 aplikasi CDK ke lingkungan. Dengan mem-bootstrap lingkungan secara proaktif, Anda mencegah potensi masalah masa depan seperti konflik nama bucket Amazon S3 atau menerapkan aplikasi CDK 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 tumpukan CDK 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)
```<a name="bootstrapping-env-when-update"></a>

 **Perbarui tumpukan bootstrap Anda**   
Secara berkala, tim CDK 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](#bootstrap-template-history).

## Sumber daya default dibuat selama bootstrap
<a name="bootstrapping-env-default"></a><a name="bootstrapping-env-roles"></a>

 **Peran IAM dibuat selama bootstrap**   
Secara default, bootstrap menyediakan peran AWS Identity and Access Management (IAM) berikut di lingkungan Anda:  
+  `CloudFormationExecutionRole` 
+  `DeploymentActionRole` 
+  `FilePublishingRole` 
+  `ImagePublishingRole` 
+  `LookupRole` <a name="bootstrapping-env-roles-cfn"></a>  
 `CloudFormationExecutionRole`   
Peran IAM ini adalah peran CloudFormation layanan yang memberikan CloudFormation izin untuk melakukan penerapan tumpukan atas nama Anda. Peran ini memberikan CloudFormation izin untuk melakukan panggilan AWS API 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 dengan CDK CLI akan menentukan CloudFormation apa yang diizinkan untuk dilakukan.  
 `DeploymentActionRole`   
Peran IAM ini memberikan izin untuk melakukan penerapan ke lingkungan Anda. 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`   
Peran IAM ini memberikan izin untuk melakukan tindakan terhadap bucket Amazon Simple Storage Service (Amazon S3) yang di-bootstrap, termasuk mengunggah dan menghapus aset. Ini diasumsikan oleh CDK CLI selama penerapan.  
 `ImagePublishingRole`   
Peran IAM ini memberikan izin untuk melakukan tindakan terhadap repositori Amazon Elastic Container Registry (Amazon ECR) bootstrapped. Ini diasumsikan oleh CDK CLI selama penerapan.  
 `LookupRole`   
Peran IAM ini memberikan `readOnly` izin untuk mencari [nilai konteks](context.md) dari lingkungan. AWS Hal ini diasumsikan oleh CDK CLI saat melakukan tugas-tugas seperti sintesis template dan penerapan.<a name="bootstrapping-env-default-id"></a>

 **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 sebenarnya tidak memiliki signifikansi.
+  **Deskripsi** — Deskripsi singkat tentang sumber daya. Misalnya, `container-assets`.
+  **ID Akun** — ID AWS akun lingkungan.
+  **Wilayah** — AWS Wilayah lingkungan.
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
<a name="bootstrapping-env-permissions"></a>

Saat melakukan bootstrap AWS lingkungan, identitas IAM 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.

## Sesuaikan bootstrap
<a name="bootstrapping-env-customize"></a>

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 Menyesuaikan bootstrap CDK. AWS](bootstrapping-customizing.md)

## Bootstrapping dengan CDK Pipelines
<a name="bootstrapping-env-pipelines"></a>

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 peran IAM yang sesuai tidak ada di lingkungan lain. Penyebab yang paling mungkin adalah bahwa lingkungan belum di-bootstrap. Bootstrap lingkungan dan coba lagi.<a name="bootstrapping-env-pipelines-protect"></a>

 **Melindungi tumpukan bootstrap Anda dari penghapusan**   
Jika tumpukan bootstrap dihapus, AWS sumber daya yang awalnya disediakan di lingkungan untuk mendukung penerapan CDK 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](bootstrapping-customizing.md#bootstrapping-customizing-cli-protection).

## Riwayat versi template bootstrap
<a name="bootstrap-template-history"></a>

Template bootstrap berversi dan berkembang seiring waktu dengan CDK itu AWS sendiri. 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 fitur CDK.

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

Bagian ini berisi daftar perubahan yang dibuat di setiap versi.


| Versi template |  AWS Versi CDK | 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 Izin KMS sekarang implisit melalui Amazon S3 dan tidak lagi diperlukan. `FileAssetKeyArn` Tambahkan parameter `CdkBootstrapVersion` SSM sehingga versi stack bootstrap dapat diverifikasi tanpa mengetahui nama tumpukan.  | 
|   **5**   |  1.87.0  |  Peran penyebaran dapat membaca parameter SSM.  | 
|   **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 SCP enkripsi yang biasa direferensikan.  | 
|   **10**   |  2.4.0  |  Amazon ECR sekarang ScanOnPush diaktifkan secara default.  | 
|   **11**   |  2.18.0  |  Menambahkan kebijakan yang memungkinkan Lambda menarik dari repo ECR Amazon sehingga bertahan dari bootstrap ulang.  | 
|   **12**   |  2.20.0  |  Menambahkan dukungan untuk eksperimental`cdk import`.  | 
|   **13**   |  2.25.0  |  Membuat gambar kontainer di repositori Amazon ECR yang dibuat bootstrap tidak dapat diubah.  | 
|   **14**   |  2.34.0  |  Mematikan pemindaian gambar Amazon ECR di tingkat repositori secara default untuk memungkinkan bootstrapping Wilayah yang tidak mendukung pemindaian gambar.  | 
|   **15**   |  2.60.0  |  Kunci KMS tidak dapat ditandai.  | 
|   **16**   |  2.69.0  |  Alamat Security Hub menemukan [KMS.2](https://docs.aws.amazon.com/securityhub/latest/userguide/kms-controls.html#kms-2).  | 
|   **17**   |  2.72.0  |  Alamat Security Hub menemukan [ECR.3](https://docs.aws.amazon.com/securityhub/latest/userguide/ecr-controls.html#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. ([\$127964](https://github.com/aws/aws-cdk/issues/27964))  | 
|   **20**   |  2.119.0  |  Tambahkan `ssm:GetParameters` tindakan ke peran IAM AWS CloudFormation penerapan. Untuk informasi selengkapnya, lihat [\$128336](https://github.com/aws/aws-cdk/pull/28336/files#diff-4fdac38426c4747aa17d515b01af4994d3d2f12c34f7b6655f24328259beb7bf).  | 
|   **21**   |  2.149.0  |  Tambahkan kondisi ke peran penerbitan file.  | 
|   **22**   |  2.160.0  |  Tambahkan `sts:TagSession` izin ke kebijakan kepercayaan peran IAM bootstrap.  | 
|   **23**   |  2.161.0  |  Tambahkan `cloudformation:RollbackStack` dan `cloudformation:ContinueUpdateRollback` izin ke kebijakan kepercayaan peran IAM penerapan. Ini memberikan izin untuk `cdk rollback` perintah.  | 
|   **24**   |  2.165.0  |  Ubah durasi hari dimana objek noncurrent dalam bucket bootstrap akan dipertahankan, dari 365 menjadi 30 hari. Karena `cdk gc` perintah baru memperkenalkan kemampuan untuk menghapus objek di bucket bootstrap, perilaku baru ini memastikan bahwa objek yang dihapus tetap berada di bucket bootstrap selama 30 hari, bukan 365 hari. Untuk informasi lebih lanjut tentang perubahan ini, lihat `aws-cdk` PR [\$131949](https://github.com/aws/aws-cdk/pull/31949).  | 
|   **25**   |  2.165.0  |  Tambahkan dukungan ke bucket bootstrap untuk menghapus unggahan multibagian yang tidak lengkap. Unggahan multipart yang tidak lengkap akan dihapus setelah 1 hari. Untuk informasi lebih lanjut tentang perubahan ini, lihat `aws-cdk` PR [\$131956](https://github.com/aws/aws-cdk/pull/31956).  | 
|   **26**   |  2.1002.0  |  Tambahkan dua kebijakan terkait penghapusan (`UpdateReplacePolicy`dan `DeletionPolicy` ke) sumber daya. `FileAssetsBucketEncryptionKey` Kebijakan ini memastikan bahwa sumber daya kunci AWS KMS lama akan dihapus dengan benar ketika tumpukan bootstrap diperbarui atau dihapus. Untuk informasi lebih lanjut tentang perubahan ini, lihat `aws-cdk-cli` PR [\$1100](https://github.com/aws/aws-cdk-cli/pull/100).  | 
|   **27**   |  2.1003.0  |  Tambahkan kebijakan sumber daya Amazon ECR baru untuk memberikan izin khusus Amazon EMR Tanpa Server untuk mengambil gambar kontainer. Untuk informasi lebih lanjut tentang perubahan ini, lihat `aws-cdk-cli` PR [\$1112](https://github.com/aws/aws-cdk-cli/pull/112).  | 
|   **28**   |  2.1015.0  |  Tambahkan izin untuk melakukan tindakan Stack Refactoring ke peran penerapan, dan TagSession izin ke semua peran. Untuk informasi lebih lanjut tentang perubahan ini, lihat `aws-cdk-cli` PR [\$1471](https://github.com/aws/aws-cdk-cli/pull/471).  | 
|   **29**   |  2.1026.0  |  Semua AssumeRole panggilan yang menyediakan ExternalId akan ditolak secara default, kecuali dinonaktifkan. Untuk informasi lebih lanjut tentang perubahan ini, lihat `aws-cdk-cli` PR [\$1811](https://github.com/aws/aws-cdk-cli/pull/811).  | 
|   **30**   |  2.1034.0  |  Tambahkan izin untuk menjelaskan peristiwa tumpukan ke peran penerapan, agar dapat menampilkan kesalahan Validasi CloudFormation Awal secara akurat. Untuk informasi lebih lanjut tentang perubahan ini, lihat `aws-cdk-cli` PR [\$1970](https://github.com/aws/aws-cdk-cli/pull/970).  | 

## Tingkatkan dari template bootstrap lama ke modern
<a name="bootstrapping-template"></a>

 AWS CDK v1 mendukung dua template bootstrap, legacy dan modern. CDK v2 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 aplikasi AWS CDK dapat memerlukan versi minimum  | 
|   **Sumber Daya\$1**   |  Buket Amazon S3  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/cdk/v2/guide/bootstrapping-env.html)  | 
|   ** AWS Kunci KMS**   |  Peran IAM  |  Repositori Amazon ECR  | 
|   **Penamaan sumber daya**   |  Dihasilkan secara otomatis  |  Deterministik  | 
|   **Enkripsi ember**   |  Kunci default  |   AWS kunci yang dikelola 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 CDK v2 dengan melakukan bootstrapping ulang. Terapkan ulang semua aplikasi AWS CDK di lingkungan setidaknya sekali sebelum menghapus bucket lama.

## Alamat Temuan Security Hub
<a name="bootstrapping-securityhub"></a>

Jika Anda menggunakan AWS Security Hub, Anda mungkin melihat temuan yang dilaporkan pada beberapa sumber daya yang dibuat oleh proses AWS bootstrapping CDK. 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.<a name="bootstrapping-securityhub-kms2"></a>

 **[KMS.2] Prinsipal IAM tidak boleh memiliki kebijakan inline IAM yang memungkinkan tindakan dekripsi pada semua kunci KMS**   
*Deploy role* (`DeploymentActionRole`) memberikan izin untuk membaca data terenkripsi, yang diperlukan untuk penerapan lintas akun dengan CDK Pipelines. 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
              ...
```<a name="bootstrapping-securityhub-kms2-why"></a>  
 **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, kunci AWS KMS 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 akun kunci AWS KMS yang sama. Permintaan ini harus berasal dari Amazon S3 di AWS Wilayah yang sama dengan kunci AWS KMS.  
 **Apakah saya perlu memperbaiki temuan ini?**   
Selama Anda belum memodifikasi kunci AWS KMS 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 bootstrap CDK menggunakan perintah. `cdk bootstrap`

1. Jika Anda belum melakukannya, buat dan terapkan Pipeline CDK Anda. Untuk petunjuk, lihat [Integrasi dan pengiriman berkelanjutan (CI/CD) menggunakan CDK Pipelines](cdk-pipeline.md).

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

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

   ```
   $ cdk bootstrap --show-template > bootstrap-template.yaml
   ```

1. Ubah template dengan mengganti `Resource: *` `PipelineCrossAccountArtifactsKey` pernyataan dengan nilai ARN Anda.

1. 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 bootstrap CDK untuk memodifikasinya. Berikut ini adalah contoh, menggunakan CDK CLI:

   ```
   $ cdk bootstrap --show-template > bootstrap-template.yaml
   ```

1. Hapus `PipelineCrossAccountArtifactsKey` pernyataan `PipelineCrossAccountArtifactsBucket` dan dari template.

1. 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-pertimbangan
<a name="bootstrapping-env-considerations"></a>

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

# Sesuaikan AWS bootstrapping CDK
<a name="bootstrapping-customizing"></a>

Anda dapat menyesuaikan bootstrap AWS Cloud Development Kit (AWS CDK) dengan menggunakan CDK Command Line Interface ( AWS CDK AWS CLI) atau dengan memodifikasi dan menerapkan template bootstrap. AWS CloudFormation 

[Untuk pengantar bootstrap, lihat AWS Bootstrapping CDK.](bootstrapping.md)

## Gunakan CDK CLI untuk menyesuaikan bootstrap
<a name="bootstrapping-customizing-cli"></a>

Berikut ini adalah beberapa contoh bagaimana Anda dapat menyesuaikan bootstrap dengan menggunakan CDK CLI. Untuk daftar semua `cdk bootstrap` opsi, lihat [cdk bootstrap](ref-cli-cmd-bootstrap.md).<a name="bootstrapping-customizing-cli-s3-name"></a>

 **Ganti nama bucket Amazon S3**   
Gunakan `--bootstrap-bucket-name` opsi untuk mengganti nama bucket Amazon S3 default. Ini mungkin mengharuskan Anda memodifikasi sintesis template. Untuk informasi selengkapnya, lihat [Menyesuaikan sintesis tumpukan CDK](configure-synth.md#bootstrapping-custom-synth).<a name="bootstrapping-customizing-keys"></a>

 **Ubah kunci enkripsi sisi server untuk bucket Amazon S3**   
Secara default, bucket Amazon S3 di stack bootstrap dikonfigurasi untuk menggunakan kunci AWS terkelola untuk enkripsi sisi server. Untuk menggunakan kunci yang dikelola pelanggan yang ada, gunakan `--bootstrap-kms-key-id` opsi dan berikan nilai untuk AWS kunci Key Management Service (AWS KMS) untuk digunakan. Jika Anda ingin lebih mengontrol kunci enkripsi, sediakan `--bootstrap-customer-key` untuk menggunakan kunci yang dikelola pelanggan.<a name="bootstrapping-customizing-cli-deploy-role"></a>

 **Lampirkan kebijakan terkelola ke peran penerapan yang diasumsikan oleh AWS CloudFormation**   
Secara default, tumpukan disebarkan dengan izin administrator penuh menggunakan kebijakan. `AdministratorAccess` Untuk menggunakan kebijakan terkelola Anda sendiri, gunakan `--cloudformation-execution-policies` opsi dan berikan kebijakan ARNs terkelola untuk dilampirkan ke peran penerapan.  
Untuk memberikan beberapa kebijakan, berikan satu string, dipisahkan dengan koma:  

```
$ cdk bootstrap --cloudformation-execution-policies "arn:aws:iam::aws:policy/AWSLambda_FullAccess,arn:aws:iam::aws:policy/AWSCodeDeployFullAccess"
```
Untuk menghindari kegagalan penerapan, pastikan bahwa kebijakan yang Anda tentukan cukup untuk penerapan apa pun yang akan Anda lakukan ke lingkungan yang di-bootstrap.

 **Ubah kualifikasi yang ditambahkan ke nama sumber daya di tumpukan bootstrap Anda**   
Secara default, `hnb659fds` qualifier ditambahkan ke ID fisik sumber daya di tumpukan bootstrap Anda. Untuk mengubah nilai ini, gunakan `--qualifier` opsi.  
Modifikasi ini berguna saat menyediakan beberapa tumpukan bootstrap di lingkungan yang sama untuk menghindari bentrokan nama.  
Mengubah kualifikasi dimaksudkan untuk isolasi nama antara pengujian otomatis CDK itu sendiri. Kecuali Anda dapat dengan tepat mencakup izin IAM yang diberikan ke peran CloudFormation eksekusi, tidak ada manfaat isolasi izin untuk memiliki dua tumpukan bootstrap yang berbeda dalam satu akun. Oleh karena itu, biasanya tidak perlu mengubah nilai ini.  
Saat Anda mengubah qualifier, aplikasi CDK Anda harus meneruskan nilai yang diubah ke stack synthesizer. Untuk informasi selengkapnya, lihat [Menyesuaikan sintesis tumpukan CDK](configure-synth.md#bootstrapping-custom-synth).

 **Tambahkan tag ke tumpukan bootstrap**   
Gunakan `--tags` opsi dalam format `KEY=VALUE` untuk menambahkan CloudFormation tag ke tumpukan bootstrap Anda.

 **Tentukan AWS akun tambahan yang dapat diterapkan ke lingkungan yang sedang di-bootstrap**   
Gunakan `--trust` opsi untuk menyediakan AWS akun tambahan yang diizinkan untuk diterapkan ke lingkungan yang sedang di-bootstrap. Secara default, akun yang melakukan bootstrap akan selalu dipercaya.  
Opsi ini berguna ketika Anda melakukan bootstrap lingkungan yang CDK Pipeline dari lingkungan lain akan disebarkan ke.  
Ketika Anda menggunakan opsi ini, Anda juga harus menyediakan`--cloudformation-execution-policies`.  
Untuk menambahkan akun tepercaya ke tumpukan bootstrap yang ada, Anda harus menentukan semua akun yang akan dipercaya, termasuk yang mungkin telah Anda sediakan sebelumnya. Jika Anda hanya memberikan akun baru untuk dipercaya, akun tepercaya sebelumnya akan dihapus.  
Berikut ini adalah contoh yang mempercayai dua akun:  

```
$ cdk bootstrap aws://123456789012/us-west-2 --trust 234567890123 --trust 987654321098 --cloudformation-execution-policies arn:aws:iam::aws:policy/AdministratorAccess
 ⏳  Bootstrapping environment aws://123456789012/us-west-2...
Trusted accounts for deployment: 234567890123, 987654321098
Trusted accounts for lookup: (none)
Execution policies: arn:aws:iam::aws:policy/AdministratorAccess
CDKToolkit: creating CloudFormation changeset...
 ✅  Environment aws://123456789012/us-west-2 bootstrapped.
```<a name="bootstrapping-customizing-cli-accounts-lookup"></a>

 **Tentukan AWS akun tambahan yang dapat mencari informasi di lingkungan yang sedang di-bootstrap**   
Gunakan `--trust-for-lookup` opsi untuk menentukan AWS akun yang diizinkan untuk mencari informasi konteks dari lingkungan yang di-bootstrap. Opsi ini berguna untuk memberikan izin akun untuk mensintesis tumpukan yang akan diterapkan ke lingkungan, tanpa benar-benar memberi mereka izin untuk menyebarkan tumpukan tersebut secara langsung.<a name="bootstrapping-customizing-cli-protection"></a>

 **Aktifkan perlindungan terminasi untuk tumpukan bootstrap**   
Jika tumpukan bootstrap dihapus, AWS sumber daya yang awalnya disediakan di lingkungan juga akan dihapus. Setelah lingkungan Anda di-bootstrap, kami menyarankan Anda untuk tidak menghapus dan membuat ulang tumpukan bootstrap lingkungan, kecuali jika Anda sengaja melakukannya. Sebagai gantinya, coba perbarui tumpukan bootstrap ke versi baru dengan menjalankan `cdk bootstrap` perintah lagi.  
Gunakan `--termination-protection` opsi untuk mengelola pengaturan perlindungan terminasi untuk tumpukan bootstrap. Dengan mengaktifkan perlindungan terminasi, Anda mencegah tumpukan bootstrap dan sumber dayanya terhapus secara tidak sengaja. Ini sangat penting jika Anda menggunakan CDK Pipelines karena tidak ada opsi pemulihan umum jika Anda secara tidak sengaja menghapus tumpukan bootstrap.  
Setelah mengaktifkan perlindungan penghentian, Anda dapat menggunakan AWS CLI AWS CloudFormation atau konsol untuk memverifikasi.    
 **Untuk mengaktifkan perlindungan terminasi**   

1. Jalankan perintah berikut untuk mengaktifkan perlindungan terminasi pada tumpukan bootstrap baru atau yang sudah ada:

   ```
   $ cdk bootstrap --termination-protection
   ```

1. Gunakan AWS CLI atau CloudFormation konsol untuk memverifikasi. Berikut ini adalah contoh, menggunakan AWS CLI. Jika Anda memodifikasi nama stack bootstrap Anda, ganti `CDKToolkit` dengan nama tumpukan Anda:

   ```
   $ aws cloudformation describe-stacks --stack-name <CDKToolkit> --query "Stacks[0].EnableTerminationProtection"
   true
   ```

## Ubah template bootstrap default
<a name="bootstrapping-customizing-template"></a>

Ketika Anda membutuhkan lebih banyak penyesuaian daripada yang dapat disediakan CDK CLI, Anda dapat memodifikasi template bootstrap sesuai kebutuhan. Kemudian, gunakan template untuk bootstrap lingkungan Anda.

 **Untuk memodifikasi dan menyebarkan template bootstrap default**   

1. Dapatkan template bootstrap default menggunakan `--show-template` opsi. Secara default, CDK CLI akan menampilkan template di jendela terminal Anda. Anda dapat memodifikasi perintah CDK CLI untuk menyimpan template ke mesin lokal Anda. Berikut ini adalah contohnya:

   ```
   $ cdk bootstrap --show-template > <my-bootstrap-template.yaml>
   ```

1. Ubah template bootstrap sesuai kebutuhan. Setiap perubahan yang Anda buat harus mematuhi kontrak template bootstrap. Untuk informasi lebih lanjut tentang kontrak template bootstrap, lihat [Ikuti kontrak bootstrap.](#bootstrapping-contract)

   Untuk memastikan bahwa kustomisasi Anda tidak sengaja ditimpa nantinya oleh seseorang yang menjalankan `cdk bootstrap` menggunakan templat default, ubah nilai default parameter template. `BootstrapVariant` CDK CLI hanya akan mengizinkan penimpaan tumpukan bootstrap dengan template yang memiliki versi yang `BootstrapVariant` sama dan sama atau lebih tinggi dari template yang saat ini digunakan.

1. Terapkan templat yang dimodifikasi menggunakan metode AWS CloudFormation penerapan pilihan Anda. Berikut ini adalah contoh yang menggunakan CDK CLI:

   ```
   $ cdk bootstrap --template <my-bootstrap-template.yaml>
   ```

## Ikuti kontrak bootstrap
<a name="bootstrapping-contract"></a>

Agar aplikasi CDK Anda dapat diterapkan dengan benar, CloudFormation templat yang dihasilkan selama sintesis harus menentukan sumber daya yang dibuat dengan benar selama bootstrap. Sumber daya ini biasanya disebut sebagai *sumber daya bootstrap*. Bootstrapping menciptakan sumber daya di AWS lingkungan Anda yang digunakan oleh AWS CDK untuk melakukan penerapan dan mengelola aset aplikasi. Sintesis menghasilkan CloudFormation template dari setiap tumpukan CDK dalam aplikasi Anda. Template ini tidak hanya menentukan AWS sumber daya yang akan disediakan dari aplikasi Anda. Mereka juga menentukan sumber daya bootstrap untuk digunakan selama penerapan.

Selama sintesis, CDK CLI tidak tahu secara spesifik bagaimana lingkungan AWS Anda telah di-bootstrap. Sebagai gantinya, CDK CLI CloudFormation menghasilkan template berdasarkan synthesizer yang Anda konfigurasikan. Oleh karena itu, ketika Anda menyesuaikan bootstrap, Anda mungkin perlu menyesuaikan sintesis. Untuk petunjuk tentang menyesuaikan sintesis, lihat [Menyesuaikan sintesis tumpukan CDK](configure-synth.md#bootstrapping-custom-synth). Tujuannya adalah untuk memastikan bahwa CloudFormation template yang disintesis Anda kompatibel dengan lingkungan bootstrap Anda. Kompatibilitas ini disebut sebagai *kontrak bootstrap*.

Metode paling sederhana untuk menyesuaikan sintesis tumpukan adalah dengan memodifikasi `DefaultStackSynthesizer` kelas dalam `Stack` instance Anda. Jika Anda memerlukan penyesuaian di luar apa yang dapat ditawarkan kelas ini, Anda dapat menulis synthesizer Anda sendiri sebagai kelas yang mengimplementasikan ` [IStackSynthesizer](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.IStackSynthesizer.html) ` (mungkin berasal dari). `DefaultStackSynthesizer`

Saat Anda menyesuaikan bootstrap, ikuti kontrak template bootstrap agar tetap kompatibel dengannya. `DefaultStackSynthesizer` Jika Anda memodifikasi bootstrap di luar kontrak template bootstrap, Anda harus menulis synthesizer Anda sendiri.

### Penentuan versi
<a name="bootstrapping-contract-versioning"></a>

Template bootstrap harus berisi sumber daya untuk membuat parameter Amazon EC2 Systems Manager (SSM) dengan nama terkenal dan output untuk mencerminkan versi template:

```
Resources:
  CdkBootstrapVersion:
    Type: AWS::SSM::Parameter
    Properties:
      Type: String
      Name:
        Fn::Sub: '/cdk-bootstrap/${Qualifier}/version'
      Value: 4
Outputs:
  BootstrapVersion:
    Value:
      Fn::GetAtt: [CdkBootstrapVersion, Value]
```

### Peran
<a name="bootstrapping-contract-roles"></a>

`DefaultStackSynthesizer`Dibutuhkan lima peran IAM untuk lima tujuan berbeda. Jika Anda tidak menggunakan peran default, Anda harus menentukan peran IAM Anda ARNs dalam `DefaultStackSynthesizer` objek Anda. Perannya adalah sebagai berikut:
+ *Peran penyebaran* diasumsikan oleh CDK CLI dan oleh AWS CodePipeline untuk menyebarkan ke lingkungan. `AssumeRolePolicy`Kontrolnya yang dapat menyebarkan ke lingkungan. Di template, Anda dapat melihat izin yang dibutuhkan peran ini.
+ *Peran pencarian* diasumsikan oleh CDK CLI untuk melakukan pencarian konteks di suatu lingkungan. `AssumeRolePolicy`Kontrolnya yang dapat menyebarkan ke lingkungan. Izin yang dibutuhkan peran ini dapat dilihat di template.
+ *Peran penerbitan file dan peran* *penerbitan gambar* diasumsikan oleh CDK CLI dan AWS CodeBuild oleh proyek untuk mempublikasikan aset ke dalam lingkungan. Mereka digunakan untuk menulis ke bucket Amazon S3 dan repositori Amazon ECR, masing-masing. Peran ini memerlukan akses tulis ke sumber daya ini.
+  *Peran AWS CloudFormation eksekusi* diteruskan ke AWS CloudFormation untuk melakukan penyebaran yang sebenarnya. Izinnya adalah izin yang akan dijalankan oleh penerapan. Izin diteruskan ke tumpukan sebagai parameter yang mencantumkan kebijakan ARNs terkelola.

### Output
<a name="bootstrapping-contract-outputs"></a>

CDK CLI mengharuskan output CloudFormation berikut ada di tumpukan bootstrap:
+  `BucketName`— Nama ember aset file.
+  `BucketDomainName`— Bucket aset file dalam format nama domain.
+  `BootstrapVersion`— Versi saat ini dari tumpukan bootstrap.

### Riwayat template
<a name="bootstrapping-contract-history"></a>

Template bootstrap berversi dan berkembang seiring waktu dengan CDK itu AWS sendiri. 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 fitur CDK. Untuk informasi selengkapnya, lihat [Riwayat versi template Bootstrap](bootstrapping-env.md#bootstrap-template-history).

# Membuat dan menerapkan batas izin untuk CDK AWS
<a name="customize-permissions-boundaries"></a>

*Batas izin* adalah fitur lanjutan AWS Identity and Access Management (IAM) and Access Management (IAM) yang dapat Anda gunakan untuk mengatur izin maksimum yang dapat dimiliki entitas IAM, seperti pengguna atau peran. Anda dapat menggunakan batas izin untuk membatasi tindakan yang dapat dilakukan entitas IAM saat menggunakan AWS Cloud Development Kit (AWS CDK).

Untuk mempelajari lebih lanjut tentang batas izin, lihat [Batas izin untuk entitas IAM di Panduan Pengguna](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_boundaries.html) *IAM*.

## Kapan menggunakan batas izin dengan CDK AWS
<a name="customize-permissions-boundaries-when"></a>

Pertimbangkan untuk menerapkan batasan izin saat Anda perlu membatasi pengembang di organisasi Anda untuk melakukan tindakan tertentu dengan CDK AWS . Misalnya, jika ada sumber daya tertentu di AWS lingkungan Anda yang tidak ingin diubah oleh pengembang, Anda dapat membuat dan menerapkan batas izin.

## Cara menerapkan batas izin dengan CDK AWS
<a name="customize-permissions-boundaries-how"></a>

### Buat batas izin
<a name="customize-permissions-boundaries-how-create"></a>

Pertama, Anda membuat batas izin, menggunakan kebijakan AWS terkelola atau kebijakan yang dikelola pelanggan untuk menetapkan batas entitas IAM (pengguna atau peran). Kebijakan ini membatasi izin maksimum untuk pengguna atau peran. Untuk petunjuk cara membuat batas izin, lihat Batas [izin untuk entitas IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_boundaries.html) di Panduan Pengguna *IAM*.

Batas izin menetapkan izin maksimum yang dapat dimiliki entitas IAM, tetapi tidak memberikan izin sendiri. Anda harus menggunakan batasan izin dengan kebijakan IAM untuk secara efektif membatasi dan memberikan izin yang tepat untuk organisasi Anda. Anda juga harus mencegah entitas IAM agar tidak dapat melarikan diri dari batas-batas yang Anda tetapkan. Sebagai contoh, lihat [Mendelegasikan tanggung jawab kepada orang lain menggunakan batas izin](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_boundaries.html#access_policies_boundaries-delegate) di Panduan Pengguna *IAM*.

### Terapkan batas izin selama bootstrap
<a name="customize-permissions-boundaries-how-apply"></a>

Setelah membuat batas izin, Anda dapat menegakkannya untuk AWS CDK dengan menerapkannya selama bootstrap.

Gunakan [`--custom-permissions-boundary`](ref-cli-cmd-bootstrap.md#ref-cli-cmd-bootstrap-options-custom-permissions-boundary)opsi dan tentukan nama batas izin untuk diterapkan. Berikut ini adalah contoh yang menerapkan batas izin bernama: `cdk-permissions-boundary`

```
$ cdk bootstrap --custom-permissions-boundary <cdk-permissions-boundary>
```

Secara default, CDK menggunakan peran `CloudFormationExecutionRole` IAM, yang didefinisikan dalam template bootstrap, untuk menerima izin untuk melakukan penerapan. Dengan menerapkan batas izin khusus selama bootstrap, batas izin dilampirkan ke peran ini. Batas izin kemudian akan menetapkan izin maksimum yang dapat dilakukan oleh pengembang di organisasi Anda saat menggunakan CDK. AWS Untuk mempelajari lebih lanjut tentang peran ini, lihat [peran IAM yang dibuat selama bootstrap](bootstrapping-env.md#bootstrapping-env-roles).

Ketika Anda menerapkan batas izin dengan cara ini, mereka diterapkan ke lingkungan tertentu yang Anda bootstrap. Untuk menggunakan batas izin yang sama di beberapa lingkungan, Anda harus menerapkan batas izin untuk setiap lingkungan selama bootstrap. Anda juga dapat menerapkan batas izin yang berbeda untuk lingkungan yang berbeda.

## Pelajari selengkapnya
<a name="customize-permissions-boundaries-learn"></a>

*Untuk informasi selengkapnya tentang batas izin, lihat [Kapan dan tempat menggunakan batas izin IAM di Blog](https://aws.amazon.com/blogs/security/when-and-where-to-use-iam-permissions-boundaries/) Keamanan. AWS *

# Memecahkan masalah bootstrapping AWS CDK
<a name="bootstrapping-troubleshoot"></a>

Memecahkan masalah umum saat mem-bootstrap lingkungan Anda dengan AWS Cloud Development Kit (CDK).AWS 
+ [Untuk pengantar bootstrap, lihat AWS Bootstrapping CDK.](bootstrapping.md)
+ Untuk petunjuk tentang bootstrap, lihat [Bootstrap lingkungan Anda untuk digunakan dengan](bootstrapping-env.md) CDK. AWS 

## Saat melakukan bootstrap menggunakan templat default, Anda mendapatkan kesalahan 'CREATE\$1FAILED' untuk bucket Amazon S3
<a name="bootstrapping-troubleshoot-s3-bucket-name"></a>

Saat melakukan bootstrap menggunakan perintah AWS CDK Command Line Interface (CDK CLI) `cdk bootstrap` dengan template bootstrap default, Anda menerima kesalahan berikut:

```
CREATE_FAILED | AWS::S3::Bucket | <BucketName> already exists
```

Sebelum memecahkan masalah, pastikan Anda menggunakan CDK CLI versi terbaru.
+ Untuk memeriksa versi Anda, jalankan`cdk --version`.
+ Untuk menginstal versi terbaru, jalankan`npm install -g aws-cdk`.

Setelah menginstal versi terbaru, coba bootstrapping lingkungan Anda lagi. Jika Anda masih menerima kesalahan yang sama, lanjutkan dengan pemecahan masalah.

### Penyebab umum
<a name="bootstrapping-troubleshoot-s3-bucket-name-causes"></a>

Saat Anda mem-bootstrap lingkungan Anda, AWS CDK menghasilkan fisik IDs untuk sumber daya bootstrap Anda. Untuk informasi selengkapnya, lihat [Sumber daya IDs yang dibuat selama bootstrap](bootstrapping-env.md#bootstrapping-env-default-id).

Tidak seperti sumber daya bootstrap lainnya, nama bucket Amazon S3 bersifat global. Ini berarti bahwa setiap nama bucket harus unik di semua AWS akun di semua AWS Wilayah dalam partisi. Untuk informasi selengkapnya, lihat [ikhtisar Bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingBucket.html) di Panduan *Pengguna Amazon S3*. Oleh karena itu, penyebab paling umum dari kesalahan ini adalah ID fisik yang dihasilkan sebagai nama bucket Anda sudah ada di suatu tempat di dalam partisi. Ini bisa di akun Anda atau akun lain.

Berikut ini adalah contoh nama bucket:`cdk-hnb659fds-assets-012345678910-us-west-1`. Meskipun tidak mungkin, karena kualifikasi dan ID akun menjadi bagian dari nama, ada kemungkinan bahwa nama untuk bucket Amazon S3 ini digunakan oleh AWS akun lain. Karena nama bucket dicakup secara global, nama bucket tidak dapat digunakan oleh Anda jika digunakan oleh akun lain di partisi yang sama. Kemungkinan besar, ember dengan nama yang sama ada di suatu tempat di akun Anda. Ini bisa di Wilayah yang Anda coba bootstrap, atau Wilayah lain.

Umumnya, resolusinya adalah menemukan bucket ini di akun Anda dan menentukan apa yang harus dilakukan dengannya, atau menyesuaikan bootstrap untuk membuat sumber daya bootstrap dengan nama yang berbeda.

### Resolusi
<a name="bootstrapping-troubleshoot-s3-bucket-name-resolution"></a>

Pertama, tentukan apakah ada bucket dengan nama yang sama di AWS akun Anda. Menggunakan AWS identitas dengan izin yang valid untuk mencari bucket Amazon S3 di akun Anda, Anda dapat melakukannya dengan cara berikut:
+ Gunakan AWS perintah Command Line Interface (AWS CLI) `aws s3 ls` untuk melihat daftar semua bucket Anda.
+ Cari nama bucket untuk setiap Wilayah di akun Anda menggunakan konsol [Amazon S3](https://console.aws.amazon.com/s3).

Jika ember dengan nama yang sama ada, tentukan apakah itu sedang digunakan. Jika tidak digunakan, pertimbangkan untuk menghapus bucket dan mencoba mem-bootstrap lingkungan Anda lagi.

Jika ada bucket dengan nama yang sama dan Anda tidak ingin menghapusnya, tentukan apakah bucket tersebut sudah dikaitkan dengan tumpukan bootstrap di akun Anda. Anda mungkin harus memeriksa beberapa Wilayah. Wilayah dalam nama bucket Amazon S3 tidak selalu berarti bahwa bucket ada di Wilayah itu. Untuk memeriksa apakah itu terkait dengan tumpukan `CDKToolkit` bootstrap, Anda dapat melakukan salah satu hal berikut untuk setiap Wilayah:
+ Gunakan `aws cloudformation describe-stack-resources --stack-name <CDKToolkit> --region <Region>` perintah AWS CLI untuk melihat sumber daya di tumpukan bootstrap Anda dan periksa apakah bucket terdaftar.
+ Di [AWS CloudFormation konsol](https://console.aws.amazon.com/cloudformation), cari `CDKToolkit` tumpukan. Kemudian, pada tab **Resources**, periksa apakah bucket ada.

Jika bucket dikaitkan dengan tumpukan bootstrap, tentukan apakah tumpukan bootstrap berada di Wilayah yang sama dengan yang Anda coba bootstrap. Jika ya, lingkungan Anda sudah di-bootstrap dan Anda harus dapat mulai menggunakan CDK untuk menyebarkan aplikasi ke lingkungan Anda. Jika bucket Amazon S3 dikaitkan dengan tumpukan bootstrap di Wilayah yang berbeda, Anda harus menentukan apa yang harus dilakukan. Resolusi yang mungkin termasuk mengganti nama bucket Amazon S3 yang ada, menghapus bucket Amazon S3 saat ini jika tidak digunakan, atau menggunakan nama baru untuk bucket Amazon S3 yang Anda coba buat.

Jika Anda tidak dapat menemukan bucket Amazon S3 dengan nama yang sama di akun Anda, itu mungkin ada di akun lain. Untuk mengatasi ini, Anda harus menyesuaikan bootstrap untuk membuat nama baru untuk semua sumber daya bootstrap Anda atau hanya untuk bucket Amazon S3 Anda. Untuk membuat nama baru untuk semua sumber daya bootstrap, Anda dapat memodifikasi qualifier. Untuk membuat nama baru hanya untuk bucket Amazon S3 Anda, Anda dapat memberikan nama bucket baru.

Untuk menyesuaikan bootstrap, Anda dapat menggunakan opsi dengan `cdk bootstrap` perintah CDK CLI atau dengan memodifikasi template bootstrap. Untuk petunjuknya, lihat [Menyesuaikan bootstrap AWS CDK](bootstrapping-customizing.md).

Jika Anda menyesuaikan bootstrap, Anda perlu menerapkan perubahan yang sama pada sintesis sebelum Anda dapat menerapkan aplikasi dengan benar. Untuk petunjuk, lihat [Menyesuaikan sintesis tumpukan CDK](configure-synth.md#bootstrapping-custom-synth).

Misalnya, Anda dapat memberikan kualifikasi baru dengan`cdk bootstrap`:

```
$ cdk bootstrap --qualifier <abcde0123>
```

Berikut ini adalah contoh nama bucket Amazon S3 yang akan dibuat dengan modifikasi ini:. `cdk-abcde0123-assets-012345678910-us-west-1` Semua sumber daya bootstrap yang dibuat selama bootstrap akan menggunakan kualifikasi ini.

Saat mengembangkan aplikasi CDK, Anda harus menentukan kualifikasi kustom di synthesizer Anda. Ini membantu CDK mengidentifikasi sumber daya bootstrap Anda selama sintesis dan penerapan. Berikut ini adalah contoh penyesuaian synthesizer default untuk instance stack Anda:

**Example**  

```
new MyStack(this, 'MyStack', {
  synthesizer: new DefaultStackSynthesizer({
    qualifier: 'abcde0123',
  }),
});
```

```
new MyStack(this, 'MyStack', {
  synthesizer: new DefaultStackSynthesizer({
    qualifier: 'abcde0123',
  }),
})
```

```
MyStack(self, "MyStack",
    synthesizer=DefaultStackSynthesizer(
        qualifier="abcde0123"
))
```

```
new MyStack(app, "MyStack", StackProps.builder()
  .synthesizer(DefaultStackSynthesizer.Builder.create()
    .qualifier("abcde0123")
    .build())
  .build();
)
```

```
new MyStack(app, "MyStack", new StackProps
{
    Synthesizer = new DefaultStackSynthesizer(new DefaultStackSynthesizerProps
    {
        Qualifier = "abcde0123"
    })
});
```

```
func NewMyStack(scope constructs.Construct, id string, props *MyStackProps) awscdk.Stack {
	var sprops awscdk.StackProps
	if props != nil {
		sprops = props.StackProps
	}
	stack := awscdk.NewStack(scope, &id, &sprops)

	synth := awscdk.NewDefaultStackSynthesizer(&awscdk.DefaultStackSynthesizerProps{
		Qualifier: jsii.String("abcde0123"),
	})

	stack.SetSynthesizer(synth)

	return stack
}
```
Anda juga dapat menentukan qualifier baru dalam `cdk.json` file proyek CDK Anda:  

```
{
  "app": "...",
  "context": {
    "@aws-cdk/core:bootstrapQualifier": "abcde0123"
  }
}
```
Untuk memodifikasi hanya nama bucket Amazon S3, Anda dapat menggunakan opsi ini` --bootstrap-bucket-name `. Berikut ini adalah contohnya:  

```
$ cdk bootstrap --bootstrap-bucket-name '<my-new-bucket-name>'
```

Saat mengembangkan aplikasi CDK, Anda harus menentukan nama bucket baru di synthesizer. Berikut ini adalah contoh penyesuaian synthesizer default untuk instance stack Anda:

**Example**  

```
new MyStack(this, 'MyStack', {
  synthesizer: new DefaultStackSynthesizer({
    fileAssetsBucketName: 'my-new-bucket-name',
  }),
});
```

```
new MyStack(this, 'MyStack', {
  synthesizer: new DefaultStackSynthesizer({
    fileAssetsBucketName: 'my-new-bucket-name',
  }),
})
```

```
MyStack(self, "MyStack",
    synthesizer=DefaultStackSynthesizer(
        file_assets_bucket_name='my-new-bucket-name'
))
```

```
new MyStack(app, "MyStack", StackProps.builder()
  .synthesizer(DefaultStackSynthesizer.Builder.create()
    .fileAssetsBucketName("my-new-bucket-name")
    .build())
  .build();
)
```

```
new MyStack(app, "MyStack", new StackProps
{
    Synthesizer = new DefaultStackSynthesizer(new DefaultStackSynthesizerProps
    {
        FileAssetsBucketName = "my-new-bucket-name"
    })
});
```

```
func NewMyStack(scope constructs.Construct, id string, props *MyStackProps) awscdk.Stack {
	var sprops awscdk.StackProps
	if props != nil {
		sprops = props.StackProps
	}
	stack := awscdk.NewStack(scope, &id, &sprops)

	synth := awscdk.NewDefaultStackSynthesizer(&awscdk.DefaultStackSynthesizerProps{
		FileAssetsBucketName: jsii.String("my-new-bucket-name"),
	})

	stack.SetSynthesizer(synth)

	return stack
}
```

### Pencegahan
<a name="bootstrapping-troubleshoot-s3-bucket-name-prevention"></a>

Kami menyarankan Anda secara proaktif mem-bootstrap setiap AWS lingkungan yang Anda rencanakan untuk digunakan. Untuk informasi selengkapnya, lihat [Kapan harus mem-bootstrap lingkungan Anda](bootstrapping-env.md#bootstrapping-env-when). Khusus untuk masalah penamaan bucket Amazon S3, ini akan membuat bucket Amazon S3 di AWS setiap lingkungan dan mencegah orang lain menggunakan nama bucket Amazon S3 Anda.