

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

# Berikan izin IAM untuk Hooks CloudFormation
<a name="grant-iam-permissions-for-hooks"></a>

Secara default, pengguna baru di Anda Akun AWS tidak memiliki izin untuk mengelola Hooks menggunakan Konsol Manajemen AWS, AWS Command Line Interface (AWS CLI), atau AWS API. Untuk memberikan izin kepada pengguna, administrator IAM dapat membuat kebijakan IAM. Administrator kemudian dapat menambahkan kebijakan IAM ke peran, dan pengguna dapat mengambil peran.

Gunakan contoh kebijakan dalam topik ini untuk membuat kebijakan IAM kustom Anda sendiri guna memberikan izin kepada pengguna untuk bekerja dengan Hooks. 

*Untuk mempelajari cara membuat kebijakan berbasis identitas IAM menggunakan contoh dokumen kebijakan JSON ini, lihat [Menentukan izin IAM kustom dengan kebijakan yang dikelola pelanggan di Panduan Pengguna IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html).*

Topik ini mencakup izin yang diperlukan untuk melakukan hal berikut:
+ **Kelola Hooks** — Buat, modifikasi, dan nonaktifkan Hooks di akun Anda.
+ **Publikasikan Hooks secara publik** — Daftarkan, uji, dan publikasikan Hooks kustom Anda untuk membuatnya tersedia untuk umum di registri. CloudFormation
+ **Lihat hasil pemanggilan** — Akses dan kueri hasil pemanggilan Hook di akun Anda.
+ **Lihat detail untuk hasil pemanggilan** — Akses informasi terperinci dan panduan remediasi untuk hasil pemanggilan Hook tertentu di akun Anda.

Saat membuat kebijakan IAM, Anda dapat menemukan dokumentasi untuk semua tindakan, sumber daya, dan kunci kondisi yang terkait dengan awalan `cloudformation` layanan di [kunci Tindakan, sumber daya, dan kondisi untuk CloudFormation](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awscloudformation.html) bagian Referensi *Otorisasi Layanan*.

**Topics**
+ [Izinkan pengguna untuk mengelola Hooks](#iam-permissions-to-manage-hooks)
+ [Izinkan pengguna untuk mempublikasikan Hooks kustom secara publik](#iam-permissions-for-public-hook-publishing)
+ [Izinkan pengguna untuk melihat hasil pemanggilan Hook](#iam-permissions-to-request-invocation-results)
+ [Izinkan pengguna untuk melihat hasil pemanggilan Hook yang terperinci](#get-detailed-hook-invocation-results)
+ [AWS KMS kebijakan kunci dan izin untuk mengenkripsi hasil CloudFormation Hooks saat istirahat](hooks-kms-key-policy.md)

## Izinkan pengguna untuk mengelola Hooks
<a name="iam-permissions-to-manage-hooks"></a>

Jika Anda perlu mengizinkan pengguna untuk mengelola ekstensi, termasuk Hooks, tanpa kemampuan untuk membuatnya publik di CloudFormation registri, Anda dapat menggunakan contoh berikut kebijakan IAM.

**penting**  
Panggilan `SetTypeConfiguration` API `ActivateType` dan bekerja sama untuk membuat Hooks di akun Anda. Saat Anda memberikan izin kepada pengguna untuk memanggil `SetTypeConfiguration` API, Anda secara otomatis memberi mereka kemampuan untuk memodifikasi dan menonaktifkan Hooks yang ada. Anda tidak dapat menggunakan izin tingkat sumber daya untuk membatasi akses ke panggilan API ini. Oleh karena itu, pastikan bahwa Anda memberikan izin ini hanya kepada pengguna yang berwenang di akun Anda.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "cloudformation:ActivateType",
                "cloudformation:DescribeType",
                "cloudformation:ListTypes",
                "cloudformation:SetTypeConfiguration"
            ],
            "Resource": "*"
        }
    ]
}
```

------

Pengguna yang mengelola Hooks mungkin memerlukan beberapa izin terkait, misalnya: 
+ Untuk melihat kontrol proaktif dari Katalog Kontrol di CloudFormation konsol, pengguna harus memiliki `controlcatalog:ListControls` izin dalam kebijakan IAM. 
+ Untuk mendaftarkan Hooks kustom sebagai ekstensi pribadi di CloudFormation registri, pengguna harus memiliki `cloudformation:RegisterType` izin dalam kebijakan IAM.

## Izinkan pengguna untuk mempublikasikan Hooks kustom secara publik
<a name="iam-permissions-for-public-hook-publishing"></a>

Contoh berikut kebijakan IAM berfokus secara khusus pada kemampuan penerbitan. Gunakan kebijakan ini jika Anda perlu mengizinkan pengguna membuat ekstensi, termasuk Hooks, tersedia untuk umum di registri. CloudFormation 

**penting**  
Publishing Hooks secara publik membuatnya tersedia untuk orang lain. Akun AWS Pastikan bahwa hanya pengguna yang berwenang yang memiliki izin ini dan ekstensi yang dipublikasikan memenuhi standar kualitas dan keamanan organisasi Anda.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "cloudformation:DescribePublisher",
                "cloudformation:DescribeTypeRegistration",
                "cloudformation:ListTypes",
                "cloudformation:ListTypeVersions",
                "cloudformation:PublishType",
                "cloudformation:RegisterPublisher",
                "cloudformation:RegisterType",
                "cloudformation:TestType"
            ],
            "Resource": "*"
        }
    ]
}
```

------

## Izinkan pengguna untuk melihat hasil pemanggilan Hook
<a name="iam-permissions-to-request-invocation-results"></a>

Izin IAM yang diperlukan untuk melihat hasil pemanggilan Hook berubah tergantung pada jenis informasi yang diminta.

### Daftar hasil pemanggilan Hook
<a name="list-hook-invocation-results"></a>

Untuk mencantumkan hasil pemanggilan Hook, pengguna memerlukan izin yang berbeda tergantung pada permintaan API yang dibuat.
+ Untuk memberikan izin untuk meminta semua hasil Hook, hasil untuk Hook tertentu, atau hasil untuk status Hook dan pemanggilan tertentu, Anda harus memberikan akses ke tindakan tersebut. `cloudformation:ListAllHookResults`
+ Untuk memberikan izin untuk meminta hasil dengan menentukan target Hook, Anda harus memberikan akses ke tindakan. `cloudformation:ListHookResults` Izin ini memungkinkan pemanggil API untuk menentukan `TargetType` dan `TargetId` parameter saat memanggil`ListHookResults`.

Berikut ini menunjukkan contoh kebijakan izin dasar untuk mencantumkan hasil pemanggilan Hook. Identitas IAM (pengguna atau peran) dengan kebijakan ini memiliki izin untuk meminta semua hasil pemanggilan menggunakan semua kombinasi parameter yang tersedia.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "cloudformation:ListAllHookResults",
                "cloudformation:ListHookResults"
            ],
            "Resource": "*"
        }
    ]
}
```

------

#### Kontrol set perubahan mana yang dapat ditentukan
<a name="control-which-change-sets"></a>

Contoh berikut kebijakan IAM memberikan izin untuk `cloudformation:ListHookResults` tindakan untuk meminta hasil dengan menentukan target Hook. Namun, itu juga menyangkal tindakan jika target adalah set perubahan bernama`example-changeset`.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "cloudformation:ListHookResults"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Deny",
            "Action": [
                "cloudformation:ListHookResults"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "cloudformation:ChangeSetName": "example-changeset"
                }
            }
        }
    ]
}
```

------

#### Kontrol Hooks mana yang dapat ditentukan
<a name="control-which-hooks"></a>

Contoh berikut kebijakan IAM memberikan izin untuk `cloudformation:ListAllHookResults` tindakan untuk meminta hasil pemanggilan hanya jika ARN Hook disediakan dalam permintaan. Ini menyangkal tindakan untuk Hook ARN tertentu.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "cloudformation:ListAllHookResults"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Deny",
            "Action": [
                "cloudformation:ListAllHookResults"
            ],
            "Resource": "*",
            "Condition": {
                "Null": {
                    "cloudformation:TypeArn": "true"
                }
            }
        },
        {
            "Effect": "Deny",
            "Action": [
                "cloudformation:ListAllHookResults"
            ],
            "Resource": "*",
            "Condition": {
                "ArnEquals": {
                    "cloudformation:TypeArn": "arn:aws:cloudformation:us-east-1:123456789012:type/hook/MyCompany-MyHook"
                }
            }
        }
    ]
}
```

------

## Izinkan pengguna untuk melihat hasil pemanggilan Hook yang terperinci
<a name="get-detailed-hook-invocation-results"></a>

Untuk memberikan izin untuk melihat hasil rinci dari pemanggilan Hook tertentu, Anda harus memberikan akses ke tindakan tersebut. `cloudformation:GetHookResult` Izin ini memungkinkan pengguna untuk mengambil informasi rinci dan panduan remediasi untuk hasil pemanggilan Hook tertentu. Untuk informasi selengkapnya, lihat [GetHookResult](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_GetHookResult.html) di dalam *Referensi API AWS CloudFormation *. 

Contoh berikut kebijakan IAM memberikan izin untuk tindakan tersebut. `cloudformation:GetHookResult`

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
       "Action": [
         "cloudformation:GetHookResult"
      ],
      "Resource": "*"
    }
  ]
}
```

------

**catatan**  
Anda dapat mengonfigurasi Hooks untuk mengenkripsi hasil pemanggilan terperinci yang disimpan di cloud dengan kunci Anda sendiri. AWS KMS Untuk informasi tentang cara menyiapkan kebijakan kunci dan izin IAM yang Anda perlukan saat menggunakan kunci terkelola pelanggan untuk enkripsi, lihat. [AWS KMS kebijakan kunci dan izin untuk mengenkripsi hasil CloudFormation Hooks saat istirahat](hooks-kms-key-policy.md) 

# AWS KMS kebijakan kunci dan izin untuk mengenkripsi hasil CloudFormation Hooks saat istirahat
<a name="hooks-kms-key-policy"></a>

Topik ini menjelaskan cara menyiapkan kebijakan AWS KMS kunci dan izin yang Anda perlukan saat menentukan kunci terkelola pelanggan untuk mengenkripsi data anotasi Hooks yang tersedia dari API. [GetHookResult](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_GetHookResult.html) 

**catatan**  
CloudFormation Hooks tidak memerlukan otorisasi tambahan untuk menggunakan default Kunci milik AWS untuk mengenkripsi data anotasi di akun Anda.

**Topics**
+ [Ikhtisar](#hooks-kms-overview)
+ [Menggunakan konteks enkripsi untuk mengontrol akses ke kunci terkelola pelanggan Anda](#hooks-encryption-context-security)
+ [Kebijakan kunci KMS yang dikelola pelanggan](#hooks-policy-example-cmk-access)
+ [Izin KMS untuk API `SetTypeConfiguration`](#hooks-policy-example-settypeconfiguration-permissions)
+ [Izin KMS untuk API `GetHookResult`](#hooks-policy-example-gethookresult-permissions)

## Ikhtisar
<a name="hooks-kms-overview"></a>

Berikut ini AWS KMS keys dapat digunakan untuk mengenkripsi data anotasi Hook:
+ [Kunci milik AWS](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-owned-cmk)— Secara default, CloudFormation menggunakan Kunci milik AWS untuk mengenkripsi data. Anda tidak dapat melihat, mengelola, atau menggunakan Kunci milik AWS, atau mengaudit penggunaannya. Namun, Anda tidak perlu melakukan konfigurasi eksplisit untuk melindungi kunci yang digunakan untuk mengenkripsi data Anda. Kunci milik AWS disediakan secara gratis (tidak ada biaya bulanan atau biaya penggunaan). Kecuali Anda diminta untuk mengaudit atau mengontrol kunci enkripsi yang melindungi data anotasi Anda, a Kunci milik AWS adalah pilihan yang baik.
+ [Kunci terkelola pelanggan](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk) — CloudFormation mendukung penggunaan kunci terkelola pelanggan simetris yang Anda buat, miliki, dan kelola untuk menambahkan lapisan enkripsi kedua di atas yang ada Kunci milik AWS. AWS KMS dikenakan biaya. Untuk informasi selengkapnya, lihat [Membuat kunci](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html) di *Panduan AWS Key Management Service Pengembang*. Untuk mengelola kunci Anda, gunakan AWS Key Management Service (AWS KMS) di [AWS KMS konsol](https://console.aws.amazon.com/kms), the AWS CLI, atau AWS KMS API. Lihat informasi selengkapnya di [Panduan Developer AWS Key Management Service](https://docs.aws.amazon.com/kms/latest/developerguide/).

Anda dapat mengonfigurasi kunci yang dikelola pelanggan saat membuat dan memperbarui Hooks. Saat Anda memberikan kunci terkelola pelanggan Anda, CloudFormation gunakan kunci ini untuk mengenkripsi data anotasi sebelum menyimpannya. Ketika data anotasi kemudian diakses selama operasi `GetHookResult` API, CloudFormation secara otomatis mendekripsi data tersebut. Untuk informasi tentang mengonfigurasi kunci enkripsi untuk Hooks, lihat. [Referensi sintaks skema konfigurasi hook](hook-configuration-schema.md)

**penting**  
Perhatikan bahwa `KmsKeyId` opsi untuk menentukan kunci yang dikelola pelanggan saat ini hanya tersedia saat Anda menggunakan tombol AWS CLI untuk mengonfigurasi Hook Anda.

## Menggunakan konteks enkripsi untuk mengontrol akses ke kunci terkelola pelanggan Anda
<a name="hooks-encryption-context-security"></a>

CloudFormation Hooks secara otomatis menyertakan konteks enkripsi dengan setiap penyimpanan anotasi dan operasi pengambilan. Ini memungkinkan Anda menyetel kondisi konteks enkripsi dalam kebijakan kunci untuk memastikan kunci hanya dapat digunakan untuk Hook tertentu:
+ `kms:EncryptionContext:aws:cloudformation:hooks:service`— Memastikan kunci hanya digunakan oleh layanan CloudFormation Hooks.
+ `kms:EncryptionContext:aws:cloudformation:account-id`— Mencegah penggunaan kunci lintas akun dengan mencocokkan Akun AWS ID Anda.
+ `kms:EncryptionContext:aws:cloudformation:arn`— Batasi penggunaan untuk Hooks tertentu menggunakan pola ARN.

Kondisi ini memberikan perlindungan tambahan terhadap serangan wakil yang membingungkan dengan mengikat data terenkripsi secara kriptografis ke konteks Hook tertentu.

## Kebijakan kunci KMS yang dikelola pelanggan
<a name="hooks-policy-example-cmk-access"></a>

Saat membuat kunci terkelola pelanggan Anda, Anda harus menentukan kebijakan utamanya untuk memungkinkan layanan CloudFormation Hooks melakukan AWS KMS operasi. Untuk menggunakan kebijakan kunci berikut, ganti *placeholder values* dengan informasi Anda sendiri.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "EnableIAMUserDescribeKey",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::123456789012:role/ExampleRole"
      },
      "Action": "kms:DescribeKey",
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "kms:ViaService": "cloudformation.us-east-1.amazonaws.com"
        }
      }
    },
    {
      "Sid": "EnableIAMUserGenerateDataKey",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::123456789012:role/ExampleRole"
      },
      "Action": "kms:GenerateDataKey",
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "kms:ViaService": "cloudformation.us-east-1.amazonaws.com",
          "kms:EncryptionContext:aws:cloudformation:hooks:service": "hooks.cloudformation.amazonaws.com",
          "kms:EncryptionContext:aws:cloudformation:123456789012": "123456789012"
        },
        "ArnLike": {
          "kms:EncryptionContext:aws:cloudformation:arn": "arn:aws:cloudformation:*:123456789012:hook/*"
        }
      }
    },
    {
      "Sid": "EnableIAMUserDecrypt",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::123456789012:role/ExampleRole"
      },
      "Action": "kms:Decrypt",
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "kms:ViaService": "cloudformation.us-east-1.amazonaws.com"
        }
      }
    },
    {
      "Sid": "AllowHooksServiceDescribeKey",
      "Effect": "Allow",
      "Principal": {
        "Service": "hooks.cloudformation.amazonaws.com"
      },
      "Action": "kms:DescribeKey",
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "aws:SourceAccount": "123456789012"
        },
        "ArnLike": {
          "aws:SourceArn": "arn:aws:cloudformation:*:123456789012:hook/*"
        }
      }
    },
    {
      "Sid": "AllowHooksService",
      "Effect": "Allow",
      "Principal": {
        "Service": "hooks.cloudformation.amazonaws.com"
      },
      "Action": [
        "kms:Decrypt",
        "kms:GenerateDataKey"
      ],
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "aws:SourceAccount": "123456789012",
          "kms:EncryptionContext:aws:cloudformation:hooks:service": "hooks.cloudformation.amazonaws.com",
          "kms:EncryptionContext:aws:cloudformation:123456789012": "123456789012"
        },
        "ArnLike": {
          "aws:SourceArn": "arn:aws:cloudformation:*:123456789012:hook/*",
          "kms:EncryptionContext:aws:cloudformation:arn": "arn:aws:cloudformation:*:123456789012:hook/*"
        }
      }
    }
  ]
}
```

------

Kebijakan ini memberikan izin untuk peran IAM (tiga pernyataan pertama) dan layanan CloudFormation Hooks (dua pernyataan terakhir). Kunci `kms:ViaService` kondisi memastikan kunci KMS hanya dapat digunakan CloudFormation, mencegah panggilan API KMS langsung. Operasi kuncinya adalah:
+ `kms:DescribeKey`— Memvalidasi properti utama dan metadata. Operasi ini dalam pernyataan terpisah karena tidak dapat digunakan dengan kondisi konteks enkripsi.
+ `kms:GenerateDataKey`— Menghasilkan kunci enkripsi data untuk mengenkripsi anotasi sebelum penyimpanan. Operasi ini mencakup kondisi konteks enkripsi untuk kontrol akses cakupan.
+ `kms:Decrypt`— Mendekripsi data anotasi yang sebelumnya dienkripsi. Untuk peran IAM, ini termasuk `kms:ViaService` kondisi. Untuk prinsipal layanan, ini termasuk kondisi konteks enkripsi.

Kunci `aws:SourceAccount` dan `aws:SourceArn` kondisi memberikan perlindungan utama terhadap serangan wakil yang membingungkan. Kondisi konteks enkripsi menyediakan lapisan validasi tambahan. Untuk informasi selengkapnya, lihat [Menggunakan aws:SourceArn atau aws:SourceAccount mengkondisikan kunci](https://docs.aws.amazon.com/kms/latest/developerguide/least-privilege.html#least-privilege-source-arn) di *Panduan AWS Key Management Service Pengembang*.

**penting**  
Peran eksekusi hook tidak memerlukan AWS KMS izin. Prinsipal layanan CloudFormation Hooks melakukan semua AWS KMS operasi.

## Izin KMS untuk API `SetTypeConfiguration`
<a name="hooks-policy-example-settypeconfiguration-permissions"></a>

Selama panggilan [SetTypeConfiguration](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_SetTypeConfiguration.html)API, CloudFormation memvalidasi izin pengguna untuk mengenkripsi data anotasi dengan kunci yang ditentukan. AWS KMS Tambahkan kebijakan IAM berikut ke pengguna atau peran yang akan mengonfigurasi enkripsi menggunakan `SetTypeConfiguration` API. Ganti *placeholder values* dengan informasi Anda sendiri.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "cloudformation:SetTypeConfiguration",
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": "kms:DescribeKey",
      "Resource": "arn:aws:kms:us-east-1:123456789012:key/abc-123"
    },
    {
      "Effect": "Allow",
      "Action": "kms:GenerateDataKey",
      "Resource": "arn:aws:kms:us-east-1:123456789012:key/abc-123",
      "Condition": {
        "StringEquals": {
          "kms:EncryptionContext:aws:cloudformation:hooks:service": "hooks.cloudformation.amazonaws.com",
          "kms:EncryptionContext:aws:cloudformation:123456789012": "123456789012"
        },
        "ArnLike": {
          "kms:EncryptionContext:aws:cloudformation:arn": "arn:aws:cloudformation:*:123456789012:hook/*"
        }
      }
    }
  ]
}
```

------

## Izin KMS untuk API `GetHookResult`
<a name="hooks-policy-example-gethookresult-permissions"></a>

[GetHookResult](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_GetHookResult.html)Untuk memanggil Hooks yang menggunakan kunci terkelola pelanggan Anda, pengguna harus memiliki `kms:Decrypt` izin untuk kunci tersebut. Tambahkan kebijakan IAM berikut ke pengguna atau peran yang akan memanggil`GetHookResult`. Ganti `arn:aws:kms:us-east-1:123456789012:key/abc-123` dengan ARN kunci yang dikelola pelanggan Anda.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "cloudformation:GetHookResult",
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": "kms:Decrypt",
      "Resource": "arn:aws:kms:us-east-1:123456789012:key/abc-123"
    }
  ]
}
```

------