

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

# Membuat pemberian izin
<a name="create-grant-overview"></a>

Sebelum membuat pemberian izin, pelajari tentang opsi untuk menyesuaikan pemberian izin Anda. Anda dapat menggunakan *batas pemberian izin* untuk membatasi izin dalam pemberian izin. Selain itu, pelajari tentang pemberian izin `CreateGrant`. Perwakilan yang mendapatkan izin untuk membuat pemberian izin dari pemberian izin terbatas dalam pemberian izin yang dapat dibuat.

**Topics**
+ [Membuat pemberian izin](#grant-create)
+ [Pemberian izin CreateGrant](#grant-creategrant)

## Membuat pemberian izin
<a name="grant-create"></a>

Untuk membuat hibah, hubungi [CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html)operasi. [Tentukan kunci KMS, [pokok penerima hibah](grants.md#terms-grantee-principal), dan daftar operasi hibah yang diizinkan.](grants.md#terms-grant-operations) Anda juga dapat menetapkan [perwakilan penghentian](grants.md#terms-retiring-principal) opsional. Untuk menyesuaikan pemberian izin, gunakan parameter `Constraints` opsional untuk menentukan [batas pemberian izin](https://docs.aws.amazon.com/kms/latest/APIReference/API_GrantConstraints.html).

Saat Anda membuat, menghentikan, atau mencabut pemberian izin, akan ada penundaan singkat, biasanya kurang dari lima menit, sebelum perubahan tersedia di seluruh AWS KMS. Untuk informasi lebih lanjut, lihat [Konsistensi akhir (untuk hibah](grants.md#terms-eventual-consistency)).

Misalnya, `CreateGrant` perintah berikut membuat hibah yang memungkinkan pengguna yang berwenang untuk mengambil `keyUserRole` peran untuk memanggil operasi [Dekripsi pada kunci](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) KMS [simetris](symm-asymm-choose-key-spec.md#symmetric-cmks) yang ditentukan. Pemberian izin akan menggunakan parameter `RetiringPrincipal` untuk menunjuk perwakilan yang dapat menghentikan pemberian izin. Ini juga mencakup batas pemberian izin yang memberikan izin hanya saat [konteks enkripsi](encrypt_context.md) dalam permintaan berisi `"Department": "IT"`.

```
$  aws kms create-grant \
    --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \
    --grantee-principal arn:aws:iam::111122223333:role/keyUserRole \
    --operations Decrypt \
    --retiring-principal arn:aws:iam::111122223333:role/adminRole \
    --constraints EncryptionContextSubset={Department=IT}
```

Jika kode Anda mencoba lagi operasi `CreateGrant`, atau menggunakan SDK [AWS yang secara otomatis mencoba lagi permintaan](https://docs.aws.amazon.com/general/latest/gr/api-retries.html), gunakan parameter [Nama](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html#KMS-CreateGrant-request-Name) opsional untuk mencegah agar duplikat pemberian izin tidak dibuat. Jika AWS KMS mendapat `CreateGrant` permintaan untuk hibah dengan properti yang sama dengan hibah yang ada, termasuk nama, ia mengakui permintaan sebagai percobaan ulang, dan tidak membuat hibah baru. Anda tidak dapat menggunakan nilai `Name` untuk mengidentifikasi pemberian izin dalam setiap operasi AWS KMS .

**penting**  
Jangan sertakan informasi rahasia atau sensitif dalam nama hibah. Ini mungkin muncul dalam teks biasa di CloudTrail log dan output lainnya.

```
$ aws kms create-grant \
    --name IT-1234abcd-keyUserRole-decrypt \
    --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \
    --grantee-principal arn:aws:iam::111122223333:role/keyUserRole \
    --operations Decrypt \
    --retiring-principal arn:aws:iam::111122223333:role/adminRole \
    --constraints EncryptionContextSubset={Department=IT}
```

Untuk contoh kode yang menunjukkan cara membuat hibah dalam beberapa bahasa pemrograman, lihat[Gunakan `CreateGrant` dengan AWS SDK atau CLI](example_kms_CreateGrant_section.md).

### Menggunakan batas pemberian izin
<a name="grant-constraints"></a>

[Kendala hibah](https://docs.aws.amazon.com/kms/latest/APIReference/API_GrantConstraints.html) menetapkan ketentuan pada izin yang diberikan hibah kepada prinsipal penerima hibah. Batas pemberian izin menggantikan [kunci syarat](policy-conditions.md) dalam [kebijakan kunci](key-policies.md) atau [kebijakan IAM](iam-policies.md). Setiap nilai batasan hibah dapat mencakup hingga 8 pasangan konteks enkripsi. Nilai konteks enkripsi di setiap batasan hibah tidak dapat melebihi 384 karakter.

**penting**  
Jangan sertakan informasi rahasia atau sensitif di bidang ini. Bidang ini dapat ditampilkan dalam plaintext di CloudTrail log dan output lainnya.

AWS KMS mendukung dua kendala hibah, `EncryptionContextEquals` dan`EncryptionContextSubset`, keduanya menetapkan persyaratan untuk [konteks enkripsi](encrypt_context.md) dalam permintaan untuk operasi kriptografi. 

Kendala hibah konteks enkripsi dirancang untuk digunakan dengan [operasi hibah](grants.md#terms-grant-operations) yang memiliki parameter konteks enkripsi. 
+ Kendala konteks enkripsi hanya valid dalam hibah untuk kunci KMS enkripsi simetris. Operasi kriptografi dengan kunci KMS lainnya tidak mendukung konteks enkripsi.
+ Kendala konteks enkripsi diabaikan untuk `DescribeKey` dan `RetireGrant` operasi. `DescribeKey`dan `RetireGrant` tidak memiliki parameter konteks enkripsi, tetapi Anda dapat menyertakan operasi ini dalam hibah yang memiliki batasan konteks enkripsi.
+ Anda dapat menggunakan kendala konteks enkripsi dalam hibah untuk operasi. `CreateGrant` Batasan konteks enkripsi mengharuskan setiap hibah yang dibuat dengan `CreateGrant` izin memiliki batasan konteks enkripsi yang sama ketat atau lebih ketat.

AWS KMS mendukung batasan hibah konteks enkripsi berikut.

**EncryptionContextEquals**  
Gunakan `EncryptionContextEquals` untuk menentukan konteks enkripsi yang tepat untuk permintaan yang diizinkan.   
`EncryptionContextEquals`mengharuskan pasangan konteks enkripsi dalam permintaan adalah kecocokan yang tepat dan peka huruf besar/kecil untuk pasangan konteks enkripsi dalam batasan hibah. Pasangan ini dapat muncul dalam urutan apa pun, tetapi kunci dan nilai dalam setiap pasangan tidak dapat bervariasi.   
Misalnya, jika batasan `EncryptionContextEquals` hibah memerlukan pasangan konteks `"Department": "IT"` enkripsi, hibah mengizinkan permintaan dari jenis yang ditentukan hanya jika konteks enkripsi dalam permintaan persis. `"Department": "IT"`

**EncryptionContextSubset**  
Gunakan `EncryptionContextSubset` untuk mewajibkan permintaan tersebut menyertakan pasangan konteks enkripsi tertentu.  
`EncryptionContextSubset`mengharuskan permintaan tersebut menyertakan semua pasangan konteks enkripsi dalam batasan hibah (kecocokan yang tepat dan peka huruf besar/kecil), tetapi permintaan tersebut juga dapat memiliki pasangan konteks enkripsi tambahan. Pasangan ini dapat muncul dalam urutan apa pun, tetapi kunci dan nilai dalam setiap pasangan tidak dapat bervariasi.   
Misalnya, jika batasan `EncryptionContextSubset` hibah memerlukan pasangan konteks `Department=IT` enkripsi, hibah mengizinkan permintaan dari jenis yang ditentukan saat konteks enkripsi dalam permintaan tersebut`"Department": "IT"`, atau disertakan `"Department": "IT"` bersama dengan pasangan konteks enkripsi lainnya, seperti. `"Department": "IT","Purpose": "Test"`

Untuk menentukan batasan konteks enkripsi dalam hibah untuk kunci KMS enkripsi simetris, gunakan `Constraints` parameter dalam operasi. [CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html) Hibah yang dibuat perintah ini memberi pengguna yang berwenang untuk mengambil izin `keyUserRole` peran untuk memanggil operasi [Dekripsi](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html). Tetapi izin itu hanya efektif ketika konteks enkripsi dalam `Decrypt` permintaan adalah pasangan konteks `"Department": "IT"` enkripsi.

```
$ aws kms create-grant \
    --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \
    --grantee-principal arn:aws:iam::111122223333:role/keyUserRole \
    --operations Decrypt \
    --retiring-principal arn:aws:iam::111122223333:role/adminRole \
    --constraints EncryptionContextEquals={Department=IT}
```

Pemberian izin yang dihasilkan akan terlihat seperti berikut. Perhatikan bahwa izin yang diberikan untuk `keyUserRole` peran hanya efektif jika `Decrypt` permintaan menggunakan pasangan konteks enkripsi yang sama yang ditentukan dalam batasan hibah. Untuk menemukan hibah pada kunci KMS, gunakan operasi. [ListGrants](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListGrants.html)

```
$ aws kms list-grants --key-id 1234abcd-12ab-34cd-56ef-1234567890ab
{
    "Grants": [
        {
            "Name": "",
            "IssuingAccount": "arn:aws:iam::111122223333:root",
            "GrantId": "abcde1237f76e4ba7987489ac329fbfba6ad343d6f7075dbd1ef191f0120514a",
            "Operations": [
                "Decrypt"
            ],
            "GranteePrincipal": "arn:aws:iam::111122223333:role/keyUserRole",
            "Constraints": {
                "EncryptionContextEquals": {
                    "Department": "IT"
                }
            },
            "CreationDate": 1568565290.0,
            "KeyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
            "RetiringPrincipal": "arn:aws:iam::111122223333:role/adminRole"
        }
    ]
}
```

Untuk memenuhi batasan `EncryptionContextEquals` hibah, konteks enkripsi dalam permintaan `Decrypt` operasi harus `"Department": "IT"` berpasangan. Permintaan seperti berikut dari kepala sekolah penerima hibah akan memenuhi batasan `EncryptionContextEquals` hibah.

```
$ aws kms decrypt \
    --key-id arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab\
    --ciphertext-blob fileb://encrypted_msg \
    --encryption-context Department=IT
```

Ketika batasan hibah`EncryptionContextSubset`, pasangan konteks enkripsi dalam permintaan harus menyertakan pasangan konteks enkripsi dalam batasan hibah, tetapi permintaan juga dapat menyertakan pasangan konteks enkripsi lainnya. Batasan hibah berikut mengharuskan salah satu pasangan konteks enkripsi dalam permintaan tersebut adalah. `"Deparment": "IT"`

```
"Constraints": {
   "EncryptionContextSubset": {
       "Department": "IT"
   }
}
```

Permintaan berikut dari kepala sekolah penerima hibah akan memenuhi kendala `EncryptionContextEqual` dan `EncryptionContextSubset` hibah dalam contoh ini.

```
$ aws kms decrypt \
    --key-id arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab \
    --ciphertext-blob fileb://encrypted_msg \
    --encryption-context Department=IT
```

Namun, permintaan seperti berikut dari prinsipal penerima hibah akan memenuhi batasan `EncryptionContextSubset` hibah, tetapi itu akan gagal dalam kendala hibah. `EncryptionContextEquals`

```
$ aws kms decrypt \
    --key-id arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab \
    --ciphertext-blob fileb://encrypted_msg \
    --encryption-context Department=IT,Purpose=Test
```

AWS layanan sering menggunakan kendala konteks enkripsi dalam hibah yang memberi mereka izin untuk menggunakan kunci KMS di Anda. Akun AWS Misalnya, Amazon DynamoDB menggunakan hibah seperti berikut ini untuk mendapatkan izin menggunakan [Kunci yang dikelola AWS](concepts.md#aws-managed-key)for DynamoDB di akun Anda. Batas pemberian izin `EncryptionContextSubset` dalam pemberian izin ini membuat izin dalam pemberian izin hanya efektif jika konteks enkripsi dalam permintaan menyertakan pasangan `"subscriberID": "111122223333"` dan `"tableName": "Services"`. Batasan hibah ini berarti bahwa hibah memungkinkan DynamoDB untuk menggunakan kunci KMS yang ditentukan hanya untuk tabel tertentu di tabel Anda. Akun AWS

Untuk mendapatkan output ini, jalankan [ListGrants](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListGrants.html)operasi pada Kunci yang dikelola AWS for DynamoDB di akun Anda.

```
$ aws kms list-grants --key-id 0987dcba-09fe-87dc-65ba-ab0987654321

{
    "Grants": [
        {
            "Operations": [
                "Decrypt",
                "Encrypt",
                "GenerateDataKey",
                "ReEncryptFrom",
                "ReEncryptTo",
                "RetireGrant",
                "DescribeKey"
            ],
            "IssuingAccount": "arn:aws:iam::111122223333:root",
            "Constraints": {
                "EncryptionContextSubset": {
                    "aws:dynamodb:tableName": "Services",
                    "aws:dynamodb:subscriberId": "111122223333"
                }
            },
            "CreationDate": 1518567315.0,
            "KeyId": "arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321",
            "GranteePrincipal": "dynamodb.us-west-2.amazonaws.com",
            "RetiringPrincipal": "dynamodb.us-west-2.amazonaws.com",
            "Name": "8276b9a6-6cf0-46f1-b2f0-7993a7f8c89a",
            "GrantId": "1667b97d27cf748cf05b487217dd4179526c949d14fb3903858e25193253fe59"
        }
    ]
}
```

## Pemberian izin CreateGrant
<a name="grant-creategrant"></a>

Pemberian izin dapat menyertakan izin untuk memanggil operasi `CreateGrant`. Namun saat [perwakilan penerima](grants.md#terms-grantee-principal) mendapat izin untuk menelepon `CreateGrant` dari pemberian izin, bukan dari kebijakan, maka izin zintersebut dibatasi. 
+ Perwakilan penerima hanya dapat membuat pemberian izin yang mengizinkan beberapa atau semua operasi dalam pemberian izin induk.
+ [Batas pemberian izin](#grant-constraints) dalam pemberian izin yang dibuat harus setidaknya seketat batas dalam pemberian izin induk.

Batasan ini tidak berlaku untuk perwakilan yang mendapatkan izin `CreateGrant` dari kebijakan, meskipun izinnya dapat dibatasi oleh [ketentuan kebijakan](grant-authorization.md).

Sebagai contoh, pertimbangkan pemberian izin yang memungkinkan perwakilan penerima memanggil operasi `GenerateDataKey`, `Decrypt`, dan `CreateGrant`. Kami memanggil pemberian izin yang memberi izin `CreateGrant` pada *pemberian izin induk*.

```
# The original grant in a ListGrants response.
{
    "Grants": [
        {
            "KeyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
            "CreationDate": 1572216195.0,
            "GrantId": "abcde1237f76e4ba7987489ac329fbfba6ad343d6f7075dbd1ef191f0120514a",
            "Operations": [
                "GenerateDataKey",
                "Decrypt",
                "CreateGrant
            ]
            "RetiringPrincipal": "arn:aws:iam::111122223333:role/adminRole",
            "Name": "",
            "IssuingAccount": "arn:aws:iam::111122223333:root",
            "GranteePrincipal": "arn:aws:iam::111122223333:role/keyUserRole",
            "Constraints": {
                "EncryptionContextSubset": {
                    "Department": "IT"
                }
            },
        }
    ]
}
```

Perwakilan penerima, exampleUser, dapat menggunakan izin ini untuk membuat pemberian izin yang menyertakan setiap subset operasi yang ditentukan dalam pemberian izin asli, seperti `CreateGrant` dan `Decrypt`. *Pemberian izin anak*tidak dapat menyertakan operasi lain, seperti `ScheduleKeyDeletion` atau `ReEncrypt`.

Selain itu, [batas pemberian izin](https://docs.aws.amazon.com/kms/latest/APIReference/API_GrantConstraints.html) dalam pemberian izin anak harus seketat atau lebih ketat dari batas dalam pemberian izin induk. Misalnya, pemberian izin anak dapat menambahkan pasangan ke batas `EncryptionContextSubset` dalam pemberian izin induk, tetapi tidak dapat menghapusnya. Pemberian izin anak dapat mengubah batas `EncryptionContextSubset` ke batas `EncryptionContextEquals`, tapi tidak sebaliknya.

Praktik terbaik IAM mencegah penggunaan pengguna IAM dengan kredensi jangka panjang. Bila memungkinkan, gunakan peran IAM, yang menyediakan kredensi sementara. Untuk detailnya, lihat [Praktik terbaik keamanan di IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) di *Panduan Pengguna IAM*.

Misalnya, perwakilan penerima dapat menggunakan izin `CreateGrant` yang didapat dari pemberian izin induk untuk membuat pemberian izin anak berikut. Operasi dalam pemberian izin anak adalah subset operasi dalam pemberian izin induk dan batas pemberian izin menjadi lebih ketat.

```
# The child grant in a ListGrants response.
{
    "Grants": [
        {
            "KeyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
            "CreationDate": 1572249600.0,
            "GrantId": "fedcba9999c1e2e9876abcde6e9d6c9b6a1987650000abcee009abcdef40183f",
            "Operations": [
                "CreateGrant"
                "Decrypt"
            ]
            "RetiringPrincipal": "arn:aws:iam::111122223333:user/exampleUser",
            "Name": "",
            "IssuingAccount": "arn:aws:iam::111122223333:root",
            "GranteePrincipal": "arn:aws:iam::111122223333:user/anotherUser",
            "Constraints": {
                "EncryptionContextEquals": {
                    "Department": "IT"
                }
            },
        }
    ]
}
```

Perwakilan penerima dalam pemberian izin anak, `anotherUser`, dapat menggunakan izin `CreateGrant` untuk membuat pemberian izin. Namun, pemberian izin yang dibuat `anotherUser` harus menyertakan operasi dalam pemberian izin induknya atau subset, dan batas pemberian izin harus sama atau lebih ketat. 