

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

# Gunakan ditandatangani URLs
<a name="private-content-signed-urls"></a>

URL yang ditandatangani mencakup informasi tambahan, misalnya, tanggal dan waktu kedaluwarsa, yang memberi Anda lebih banyak kendali atas akses ke konten Anda. Informasi tambahan ini muncul dalam pernyataan kebijakan, yang didasarkan pada kebijakan terekam atau kebijakan pabean. Perbedaan antara kebijakan terekam dan kustom dijelaskan dalam dua bagian berikutnya.

**catatan**  
Anda dapat membuat beberapa yang ditandatangani URLs menggunakan kebijakan kalengan dan membuat beberapa yang ditandatangani URLs menggunakan kebijakan khusus untuk distribusi yang sama.

**Topics**
+ [Memutuskan untuk menggunakan kebijakan kalengan atau kustom untuk ditandatangani URLs](#private-content-choosing-canned-custom-policy)
+ [Cara URLs kerja ditandatangani](#private-content-how-signed-urls-work)
+ [Tentukan berapa lama ditandatangani URLs valid](#private-content-overview-choosing-duration)
+ [Saat CloudFront memeriksa tanggal dan waktu kedaluwarsa di URL yang ditandatangani](#private-content-check-expiration)
+ [Kode contoh dan alat pihak ketiga](#private-content-overview-sample-code)
+ [Membuat URL yang ditandatangani menggunakan kebijakan kalengan](private-content-creating-signed-url-canned-policy.md)
+ [Membuat URL yang ditandatangani menggunakan kebijakan khusus](private-content-creating-signed-url-custom-policy.md)

## Memutuskan untuk menggunakan kebijakan kalengan atau kustom untuk ditandatangani URLs
<a name="private-content-choosing-canned-custom-policy"></a>

Saat Anda membuat URL yang ditandatangani, Anda menulis pernyataan kebijakan dalam format JSON yang menetapkan batasan pada URL yang ditandatangani, misalnya, berapa lama URL tersebut valid. Anda dapat menggunakan kebijakan terekam atau kebijakan bea cukai. Berikut ini adalah perbandingan kebijakan yang dapat disesuaikan dan disesuaikan:


****  

| Deskripsi | Kebijakan kalengan | Kebijakan khusus | 
| --- | --- | --- | 
| Anda dapat menggunakan kembali pernyataan kebijakan untuk beberapa file. Untuk menggunakan kembali pernyataan kebijakan, Anda harus menggunakan karakter wildcard dalam `Resource` objek. Untuk informasi lebih lanjut, lihat [Nilai yang Anda sebutkan dalam pernyataan kebijakan untuk URL yang ditandatangani menggunakan kebijakan khusus](private-content-creating-signed-url-custom-policy.md#private-content-custom-policy-statement-values).)  | Tidak | Ya | 
| Anda dapat menentukan tanggal dan waktu pengguna dapat mulai mengakses konten Anda. | Tidak | Ya (opsional) | 
| Anda dapat menentukan tanggal dan waktu saat pengguna tidak lagi dapat mengakses konten Anda. | Ya | Ya | 
| Anda dapat menentukan alamat IP atau berbagai alamat IP pengguna yang dapat mengakses konten Anda. | Tidak | Ya (opsional) | 
| URL yang ditandatangani mencakup versi kebijakan yang dikodekan base64, yang menghasilkan URL yang lebih panjang. | Tidak | Ya | 

Untuk informasi tentang membuat ditandatangani URLs menggunakan kebijakan *kalengan*, lihat[Membuat URL yang ditandatangani menggunakan kebijakan kalengan](private-content-creating-signed-url-canned-policy.md).

Untuk informasi tentang membuat ditandatangani URLs menggunakan kebijakan *kustom*, lihat[Membuat URL yang ditandatangani menggunakan kebijakan khusus](private-content-creating-signed-url-custom-policy.md).

## Cara URLs kerja ditandatangani
<a name="private-content-how-signed-urls-work"></a>

Berikut adalah ikhtisar tentang cara Anda mengonfigurasi CloudFront dan Amazon S3 untuk ditandatangani URLs dan bagaimana CloudFront merespons saat pengguna menggunakan URL yang ditandatangani untuk meminta file. 

1. Dalam CloudFront distribusi Anda, tentukan satu atau beberapa grup kunci tepercaya, yang berisi kunci publik yang CloudFront dapat digunakan untuk memverifikasi tanda tangan URL. Anda menggunakan kunci privat yang sesuai untuk menandatangani URLs.

   CloudFront mendukung ditandatangani URLs dengan tanda tangan kunci RSA 2048 dan ECDSA 256.

   Untuk informasi selengkapnya, lihat [Tentukan penandatangan yang dapat membuat cookie yang ditandatangani URLs dan ditandatangani](private-content-trusted-signers.md).

1. Kembangkan aplikasi Anda untuk menentukan apakah pengguna harus memiliki akses ke konten Anda dan membuat ditandatangani URLs untuk file atau bagian dari aplikasi Anda yang ingin Anda batasi aksesnya. Untuk informasi selengkapnya, lihat topik berikut:
   + [Membuat URL yang ditandatangani menggunakan kebijakan kalengan](private-content-creating-signed-url-canned-policy.md)
   + [Membuat URL yang ditandatangani menggunakan kebijakan khusus](private-content-creating-signed-url-custom-policy.md)

1. Pengguna meminta file yang ingin Anda tandatangani URLs.

1. Aplikasi Anda memverifikasi bahwa pengguna berhak mengakses file: mereka telah masuk, mereka telah membayar akses ke konten, atau mereka telah memenuhi beberapa persyaratan lain untuk akses.

1. Aplikasi Anda membuat dan mengembalikan URL yang ditandatangani ke pengguna.

1. URL yang ditandatangani memungkinkan pengguna mengunduh atau men-streaming konten.

   Langkah ini bersifat otomatis; pengguna biasanya tidak perlu melakukan tindakan tambahan apa pun untuk mengakses konten. Misalnya, jika pengguna mengakses konten Anda di peramban web, aplikasi akan mengembalikan URL yang ditandatangani ke peramban. Browser segera menggunakan URL yang ditandatangani untuk mengakses file di cache CloudFront tepi tanpa campur tangan dari pengguna.

1. CloudFront menggunakan kunci publik untuk memvalidasi tanda tangan dan mengonfirmasi bahwa URL belum dirusak. Jika tanda tangan tidak valid, permintaan ditolak. 

   Jika tanda tangan valid, CloudFront lihat pernyataan kebijakan di URL (atau buat jika Anda menggunakan kebijakan kalengan) untuk mengonfirmasi bahwa permintaan tersebut masih valid. Misalnya, jika Anda menentukan tanggal dan waktu awal dan akhir untuk URL, CloudFront konfirmasikan bahwa pengguna mencoba mengakses konten Anda selama periode waktu yang ingin Anda izinkan akses. 

   Jika permintaan memenuhi persyaratan dalam pernyataan kebijakan, CloudFront lakukan operasi standar: menentukan apakah file sudah ada di cache tepi, meneruskan permintaan ke asal jika perlu, dan mengembalikan file ke pengguna.

**catatan**  
Jika URL yang belum ditandatangani memuat parameter string kueri, pastikan Anda menyertakannya di bagian URL yang Anda tanda tangani. Jika Anda menambahkan string kueri ke URL yang ditandatangani setelah menandatanganinya, URL akan mengembalikan status HTTP 403.

## Tentukan berapa lama ditandatangani URLs valid
<a name="private-content-overview-choosing-duration"></a>

Anda dapat mendistribusikan konten pribadi menggunakan URL bertanda tangan yang hanya berlaku sebentar—mungkin hanya selama beberapa menit. Ditandatangani URLs yang berlaku untuk waktu yang singkat baik untuk mendistribusikan konten on-the-fly kepada pengguna untuk tujuan tertentu, seperti mendistribusikan penyewaan film atau unduhan musik kepada pelanggan sesuai permintaan. Jika tanda tangan Anda URLs akan valid hanya untuk waktu yang singkat, Anda mungkin ingin membuatnya secara otomatis menggunakan aplikasi yang Anda kembangkan. Saat pengguna mulai mengunduh file atau mulai memutar file media, CloudFront bandingkan waktu kedaluwarsa di URL dengan waktu saat ini untuk menentukan apakah URL tersebut masih valid.

Anda juga dapat mendistribusikan konten pribadi menggunakan URL bertanda tangan yang valid untuk waktu yang lebih lama, mungkin selama bertahun-tahun. Ditandatangani URLs yang berlaku untuk jangka waktu yang lebih lama berguna untuk mendistribusikan konten pribadi kepada pengguna yang dikenal, seperti mendistribusikan rencana bisnis kepada investor atau mendistribusikan materi pelatihan kepada karyawan. Anda dapat mengembangkan aplikasi untuk menghasilkan tanda tangan URLs jangka panjang ini untuk Anda.

## Saat CloudFront memeriksa tanggal dan waktu kedaluwarsa di URL yang ditandatangani
<a name="private-content-check-expiration"></a>

CloudFront memeriksa tanggal kedaluwarsa dan waktu dalam URL yang ditandatangani pada saat permintaan HTTP. Jika klien mulai mengunduh file besar segera sebelum waktu kedaluwarsa, pengunduhan harus selesai meskipun waktu kedaluwarsa sudah lewat selama pengunduhan. Jika koneksi TCP menurun dan klien mencoba memulai ulang unduhan setelah waktu kedaluwarsa berlalu, pengunduhan akan gagal.

Jika klien menggunakan Range GETs untuk mendapatkan file dalam potongan yang lebih kecil, permintaan GET apa pun yang terjadi setelah waktu kedaluwarsa berlalu akan gagal. Untuk informasi selengkapnya tentang Range GETs, lihat [Bagaimana CloudFront memproses permintaan sebagian untuk suatu objek (rentang GETs)](RangeGETs.md).

## Kode contoh dan alat pihak ketiga
<a name="private-content-overview-sample-code"></a>

Misalnya kode yang membuat bagian hash dan ditandatangani dari ditandatangani URLs, lihat topik berikut:
+ [Buat tanda tangan URL menggunakan Perl](CreateURLPerl.md)
+ [Buat tanda tangan URL menggunakan PHP](CreateURL_PHP.md)
+ [Buat tanda tangan URL menggunakan C\$1 dan .NET Framework](CreateSignatureInCSharp.md)
+ [Buat tanda tangan URL menggunakan Java](CFPrivateDistJavaDevelopment.md)

# Membuat URL yang ditandatangani menggunakan kebijakan kalengan
<a name="private-content-creating-signed-url-canned-policy"></a>

Untuk membuat URL yang ditandatangani menggunakan kebijakan terekam, lakukan langkah-langkah berikut.<a name="private-content-creating-signed-url-canned-policy-procedure"></a>

**Untuk membuat URL yang ditandatangani menggunakan kebijakan terekam**

1. Jika Anda menggunakan .NET atau Java untuk membuat ditandatangani URLs, dan jika Anda belum memformat ulang kunci pribadi untuk key pair Anda dari format.pem default ke format yang kompatibel dengan.NET atau dengan Java, lakukan sekarang. Untuk informasi selengkapnya, lihat [Memformat ulang kunci pribadi (hanya .NET dan Java)](private-content-trusted-signers.md#private-content-reformatting-private-key).

1. Menggabungkan nilai-nilai berikut. Anda dapat menggunakan format dalam contoh URL yang ditandatangani ini. 

   ```
   https://d111111abcdef8.cloudfront.net/image.jpg?color=red&size=medium&Expires=1767290400&Signature=nitfHRCrtziwO2HwPfWw~yYDhUF5EwRunQA-j19DzZrvDh6hQ73lDx~-ar3UocvvRQVw6EkC~GdpGQyyOSKQim-TxAnW7d8F5Kkai9HVx0FIu-5jcQb0UEmatEXAMPLE3ReXySpLSMj0yCd3ZAB4UcBCAqEijkytL6f3fVYNGQI6&Key-Pair-Id=K2JCJMDEHXQW5F&Hash-Algorithm=SHA256
   ```

   Hapus semua spasi kosong (termasuk tab dan karakter baris baru). Anda mungkin harus memasukkan karakter escape dalam string di kode aplikasi. Semua nilai memiliki tipe`String`.  
**1. *Base URL for the file***  
URL dasar adalah CloudFront URL yang akan Anda gunakan untuk mengakses file jika Anda tidak menggunakan tanda tangan URLs, termasuk parameter string kueri Anda sendiri, jika ada. Pada contoh sebelumnya, URL dasar adalah. `https://d111111abcdef8.cloudfront.net/image.jpg` Untuk informasi selengkapnya tentang format URLs untuk distribusi, lihat[Sesuaikan format URL untuk file di CloudFront](LinkFormat.md).  
   +  CloudFront URL berikut adalah untuk file gambar dalam distribusi (menggunakan nama CloudFront domain). Perhatikan bahwa `image.jpg` dalam `images` direktori. Jalur menuju file dalam URL harus sesuai dengan alur menuju file pada server HTTP Anda atau pada buket Amazon S3.

     `https://d111111abcdef8.cloudfront.net/images/image.jpg`
   +  CloudFront URL berikut mencakup string kueri:

     `https://d111111abcdef8.cloudfront.net/images/image.jpg?size=large`
   + Berikut ini CloudFront URLs adalah untuk file gambar dalam distribusi. Keduanya menggunakan nama domain alternatif. Yang kedua mencakup string kueri:

     `https://www.example.com/images/image.jpg`

     `https://www.example.com/images/image.jpg?color=red`
   +  CloudFront URL berikut adalah untuk file gambar dalam distribusi yang menggunakan nama domain alternatif dan protokol HTTPS:

     `https://www.example.com/images/image.jpg`  
** 2. `?`**  
`?`Ini menunjukkan bahwa parameter kueri mengikuti URL dasar. Sertakan `?` bahkan jika Anda tidak menentukan parameter kueri apa pun.  
Anda dapat menentukan parameter kueri berikut dalam urutan apa pun.  
**3. *Your query string parameters, if any*`&`**  
(Opsional) Anda dapat memasukkan parameter string kueri Anda sendiri. Untuk melakukannya, tambahkan ampersand (`&`) di antara masing-masing, seperti. `color=red&size=medium` Anda dapat menentukan parameter string kueri dalam urutan apa pun dalam URL.  
Parameter string kueri Anda tidak dapat diberi nama`Expires`,`Signature`,`Key-Pair-Id`, atau`Hash-Algorithm`.  
** 4. `Expires=`*date and time in Unix time format (in seconds) and Coordinated Universal Time (UTC)***  
Tanggal dan waktu Anda ingin URL berhenti memungkinkan akses ke file.  
Tentukan tanggal dan waktu kedaluwarsa dalam format waktu Unix (dalam detik) dan Waktu Universal Terkoordinasi (UTC). Misalnya, 1 Januari 2026 10:00 UTC dikonversi ke `1767290400` dalam format waktu Unix, seperti yang ditunjukkan pada contoh di awal topik ini.   
Untuk menggunakan waktu epoch, tentukan bilangan bulat 64-bit untuk tanggal yang paling lambat `9223372036854775807` (Jumat, 11 April 2262 pukul 23:47:16.854 UTC).  
  
Untuk informasi tentang UTC, lihat [RFC 3339, Tanggal dan Waktu di Internet: Stempel Waktu](https://tools.ietf.org/html/rfc3339).  
** 5. `&Signature=`*hashed and signed version of the policy statement***  
Versi yang di-hash, ditandatangani, dan dikodekan base64 dari pernyataan kebijakan JSON. Untuk informasi selengkapnya, lihat [Membuat tanda tangan untuk URL yang ditandatangani yang menggunakan kebijakan kalengan](#private-content-canned-policy-creating-signature).  
** 6. `&Key-Pair-Id=`*public key ID for the CloudFront public key whose corresponding private key you're using to generate the signature***  
ID untuk kunci CloudFront publik, misalnya,`K2JCJMDEHXQW5F`. ID kunci publik memberi tahu kunci publik CloudFront mana yang akan digunakan untuk memvalidasi URL yang ditandatangani. CloudFront membandingkan informasi dalam tanda tangan dengan informasi dalam pernyataan kebijakan untuk memverifikasi bahwa URL belum dirusak.  
Kunci publik ini harus dimiliki oleh kelompok kunci yang merupakan signer tepercaya dalam distribusi. Untuk informasi selengkapnya, lihat [Tentukan penandatangan yang dapat membuat cookie yang ditandatangani URLs dan ditandatangani](private-content-trusted-signers.md).  
** 7. `&Hash-Algorithm=`*SHA1 or SHA256***  
(Opsional) Algoritma hash yang digunakan untuk membuat tanda tangan. Nilai yang didukung adalah `SHA1` dan `SHA256`. Jika Anda tidak menentukan parameter ini, CloudFront defaultnya. `SHA1`

## Membuat tanda tangan untuk URL yang ditandatangani yang menggunakan kebijakan kalengan
<a name="private-content-canned-policy-creating-signature"></a>

Untuk membuat tanda tangan untuk URL yang ditandatangani yang menggunakan kebijakan kalengan, selesaikan prosedur berikut.

**Topics**
+ [Membuat pernyataan kebijakan untuk URL yang ditandatangani yang menggunakan kebijakan yang dikalengkan](#private-content-canned-policy-creating-policy-statement)
+ [Membuat tanda tangan untuk URL yang ditandatangani yang menggunakan kebijakan kalengan](#private-content-canned-policy-signing-policy-statement)

### Membuat pernyataan kebijakan untuk URL yang ditandatangani yang menggunakan kebijakan yang dikalengkan
<a name="private-content-canned-policy-creating-policy-statement"></a>

Saat Anda membuat URL yang ditandatangani menggunakan kebijakan terekam, `Signature` parameter adalah versi dokumen pernyataan kebijakan yang di- hashed dan ditandatangani. Untuk tanda tangan URLs yang menggunakan kebijakan kalengan, Anda tidak menyertakan pernyataan kebijakan di URL, seperti yang Anda lakukan untuk ditandatangani URLs yang menggunakan kebijakan khusus. Untuk membuat pernyataan kebijakan, lakukan prosedur berikut.<a name="private-content-canned-policy-creating-policy-statement-procedure"></a>

**Untuk membuat pernyataan kebijakan untuk URL yang ditandatangani menggunakan kebijakan terekam**

1. Susun pernyataan kebijakan dengan menggunakan format JSON berikut dan menggunakan pengkodean karakter UTF-8. Sertakan semua tanda baca dan nilai literal lainnya persis seperti yang ditentukan. Untuk informasi tentang `Resource` dan `DateLessThan` parameter, lihat [Nilai yang Anda sebutkan dalam pernyataan kebijakan untuk URL yang ditandatangani dengan menggunakan kebijakan terekam](#private-content-canned-policy-statement-values).

   ```
   {
       "Statement": [
           {
               "Resource": "base URL or stream name",
               "Condition": {
                   "DateLessThan": {
                       "AWS:EpochTime": ending date and time in Unix time format and UTC
                   }
               }
           }
       ]
   }
   ```

1. Hapus semua spasi kosong (termasuk tab dan karakter baris baru) dari pernyataan kebijakan. Anda mungkin harus memasukkan karakter escape dalam string di kode aplikasi.

#### Nilai yang Anda sebutkan dalam pernyataan kebijakan untuk URL yang ditandatangani dengan menggunakan kebijakan terekam
<a name="private-content-canned-policy-statement-values"></a>

Ketika Anda membuat pernyataan kebijakan untuk kebijakan terekam, Anda menentukan nilai-nilai berikut.

**Sumber Daya**  
Anda hanya dapat menentukan satu nilai untuk `Resource`.
URL dasar termasuk string kueri Anda, jika ada, tetapi tidak termasuk CloudFront `Expires`,, `Signature``Key-Pair-Id`, dan `Hash-Algorithm` parameter, misalnya:  
`https://d111111abcdef8.cloudfront.net/images/horizon.jpg?size=large&license=yes`  
Perhatikan hal-hal berikut:  
+ **Protokol** – Nilai harus dimulai dengan `http://` atau `https://`.
+ **Parameter string kueri** – Jika Anda tidak memiliki parameter string pencarian, hapus tanda tanya.
+ **Nama domain alternatif** – Jika Anda menentukan nama domain alternatif (CNAME) di URL, Anda harus menentukan nama domain alternatif saat merujuk file di halaman web atau aplikasi Anda. Jangan menentukan URL Amazon S3 untuk objek tersebut.

**DateLessThan**  
Tanggal dan waktu kedaluwarsa untuk URL dalam format waktu Unix (dalam detik) dan Waktu Universal Terkoordinasi (UTC). Misalnya, 1 Januari 2026 10:00 UTC mengkonversi ke 1767290400 dalam format waktu Unix.  
Nilai ini harus cocok dengan nilai `Expires` parameter string kueri dalam URL yang ditandatangani. Jangan melampirkan nilai dalam tanda petik.  
Untuk informasi selengkapnya, lihat [Saat CloudFront memeriksa tanggal dan waktu kedaluwarsa di URL yang ditandatangani](private-content-signed-urls.md#private-content-check-expiration).

#### Contoh pernyataan kebijakan untuk URL yang ditandatangani yang menggunakan kebijakan terekam
<a name="private-content-canned-policy-creating-policy-statement-example"></a>

Saat Anda menggunakan contoh pernyataan kebijakan berikut di URL yang ditandatangani, pengguna dapat mengakses file tersebut `https://d111111abcdef8.cloudfront.net/horizon.jpg` hingga 1 Januari 2026 10:00 UTC:

```
{
    "Statement": [
        {
            "Resource": "https://d111111abcdef8.cloudfront.net/horizon.jpg?size=large&license=yes",
            "Condition": {
                "DateLessThan": {
                    "AWS:EpochTime": 1767290400
                }
            }
        }
    ]
}
```

### Membuat tanda tangan untuk URL yang ditandatangani yang menggunakan kebijakan kalengan
<a name="private-content-canned-policy-signing-policy-statement"></a>

Untuk membuat nilai untuk `Signature` parameter dalam URL yang ditandatangani, Anda telah dan menandatangani pernyataan kebijakan yang Anda buat di [Membuat pernyataan kebijakan untuk URL yang ditandatangani yang menggunakan kebijakan yang dikalengkan](#private-content-canned-policy-creating-policy-statement).

Untuk informasi tambahan dan contoh cara membuat, menandatangani, dan mengkode pernyataan kebijakan, lihat:
+ [Perintah Linux dan OpenSSL untuk pengkodean dan enkripsi base64](private-content-linux-openssl.md)
+ [Contoh kode untuk membuat tanda tangan untuk URL yang ditandatangani](PrivateCFSignatureCodeAndExamples.md)

**catatan**  
Contoh terkait menggunakan SHA-1 secara default. Untuk menggunakan SHA-256 sebagai gantinya, ganti `sha1` dengan `sha256` perintah OpenSSL dan sertakan `Hash-Algorithm=SHA256` parameter kueri di URL yang ditandatangani.<a name="private-content-canned-policy-creating-signature-download-procedure"></a>

**Opsi 1: Untuk membuat tanda tangan dengan menggunakan kebijakan terekam**

1. Gunakan fungsi hash SHA-1 atau SHA-256 dan kunci pribadi RSA atau ECDSA yang dihasilkan untuk melakukan hash dan menandatangani pernyataan kebijakan yang Anda buat dalam prosedur. [Untuk membuat pernyataan kebijakan untuk URL yang ditandatangani menggunakan kebijakan terekam](#private-content-canned-policy-creating-policy-statement-procedure) Gunakan versi pernyataan kebijakan yang tidak lagi menyertakan spasi kosong.

   Jika Anda menggunakan SHA-256, Anda harus menyertakan `&Hash-Algorithm=SHA256` dalam URL yang ditandatangani.

   Untuk kunci privat yang diperlukan oleh fungsi hash, gunakan kunci pribadi yang kunci publiknya berada dalam grup kunci yang dipercaya aktif untuk distribusi.
**catatan**  
Metode yang Anda gunakan untuk men-emuk dan menandatangani pernyataan kebijakan tergantung pada bahasa pemrograman dan platform Anda. Untuk kode sampel, lihat [Contoh kode untuk membuat tanda tangan untuk URL yang ditandatangani](PrivateCFSignatureCodeAndExamples.md).

1. Hapus spasi kosong (termasuk tab dan karakter baris baru) dari string hash dan ditandatangani.

1. Base64 mengodekan string menggunakan pengodean base64 MIME. Untuk informasi selengkapnya, lihat [Bagian 6.8, Base64 Content-Transfer-Encoding](https://tools.ietf.org/html/rfc2045#section-6.8) di *RFC 2045, MIME (Ekstensi Surat Internet Serbaguna) Bagian Satu:* Format Badan Pesan Internet.

1. Ganti karakter yang tidak valid dalam string kueri URL dengan karakter yang valid. Tabel berikut mencantumkan karakter yang tidak valid dan valid.  
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/AmazonCloudFront/latest/DeveloperGuide/private-content-creating-signed-url-canned-policy.html)

1. Tambahkan nilai yang dihasilkan ke URL Anda yang ditandatangani setelah `&Signature=`, dan kembali ke [Untuk membuat URL yang ditandatangani menggunakan kebijakan terekam](#private-content-creating-signed-url-canned-policy-procedure) untuk menyelesaikan penyatuan bagian URL yang Anda tanda tangani.

# Membuat URL yang ditandatangani menggunakan kebijakan khusus
<a name="private-content-creating-signed-url-custom-policy"></a>

Untuk membuat URL yang ditandatangani menggunakan kebijakan kustom, selesaikan prosedur berikut.<a name="private-content-creating-signed-url-custom-policy-procedure"></a>

**Untuk membuat URL yang ditandatangani menggunakan kebijakan kustom**

1. Jika Anda menggunakan .NET atau Java untuk membuat ditandatangani URLs, dan jika Anda belum memformat ulang kunci pribadi untuk key pair Anda dari format.pem default ke format yang kompatibel dengan.NET atau dengan Java, lakukan sekarang. Untuk informasi selengkapnya, lihat [Memformat ulang kunci pribadi (hanya .NET dan Java)](private-content-trusted-signers.md#private-content-reformatting-private-key).

1. Menggabungkan nilai-nilai berikut. Anda dapat menggunakan format dalam contoh URL yang ditandatangani ini.

   

   ```
   https://d111111abcdef8.cloudfront.net/image.jpg?color=red&size=medium&Policy=eyANCiAgICEXAMPLEW1lbnQiOiBbeyANCiAgICAgICJSZXNvdXJjZSI6Imh0dHA6Ly9kemJlc3FtN3VuMW0wLmNsb3VkZnJvbnQubmV0L2RlbW8ucGhwIiwgDQogICAgICAiQ29uZGl0aW9uIjp7IA0KICAgICAgICAgIklwQWRkcmVzcyI6eyJBV1M6U291cmNlSXAiOiIyMDcuMTcxLjE4MC4xMDEvMzIifSwNCiAgICAgICAgICJEYXRlR3JlYXRlclRoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTI5Njg2MDE3Nn0sDQogICAgICAgICAiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjEyOTY4NjAyMjZ9DQogICAgICB9IA0KICAgfV0gDQp9DQo&Signature=nitfHRCrtziwO2HwPfWw~yYDhUF5EwRunQA-j19DzZrvDh6hQ73lDx~-ar3UocvvRQVw6EkC~GdpGQyyOSKQim-TxAnW7d8F5Kkai9HVx0FIu-5jcQb0UEmatEXAMPLE3ReXySpLSMj0yCd3ZAB4UcBCAqEijkytL6f3fVYNGQI6&Key-Pair-Id=K2JCJMDEHXQW5F&Hash-Algorithm=SHA256
   ```

   Hapus semua spasi kosong (termasuk tab dan karakter baris baru). Anda mungkin harus memasukkan karakter escape dalam string di kode aplikasi. Semua nilai memiliki tipe`String`.  
**1. *Base URL for the file***  
URL dasar adalah CloudFront URL yang akan Anda gunakan untuk mengakses file jika Anda tidak menggunakan tanda tangan URLs, termasuk parameter string kueri Anda sendiri, jika ada. Pada contoh sebelumnya, URL dasar adalah. `https://d111111abcdef8.cloudfront.net/image.jpg` Untuk informasi selengkapnya tentang format URLs untuk distribusi, lihat[Sesuaikan format URL untuk file di CloudFront](LinkFormat.md).  
Contoh berikut menunjukkan nilai yang Anda tentukan untuk distribusi.  
   +  CloudFront URL berikut adalah untuk file gambar dalam distribusi (menggunakan nama CloudFront domain). Perhatikan bahwa `image.jpg` dalam `images` direktori. Jalur menuju file dalam URL harus sesuai dengan alur menuju file pada server HTTP Anda atau pada buket Amazon S3.

     `https://d111111abcdef8.cloudfront.net/images/image.jpg`
   +  CloudFront URL berikut mencakup string kueri:

     `https://d111111abcdef8.cloudfront.net/images/image.jpg?size=large`
   + Berikut ini CloudFront URLs adalah untuk file gambar dalam distribusi. Keduanya menggunakan nama domain alternatif; yang kedua menyertakan string kueri:

     `https://www.example.com/images/image.jpg`

     `https://www.example.com/images/image.jpg?color=red`
   +  CloudFront URL berikut adalah untuk file gambar dalam distribusi yang menggunakan nama domain alternatif dan protokol HTTPS:

     `https://www.example.com/images/image.jpg`  
**2. `?`**  
`?`Ini menunjukkan bahwa parameter string kueri mengikuti URL dasar. Sertakan `?` bahkan jika Anda tidak menentukan parameter kueri apa pun.  
Anda dapat menentukan parameter kueri berikut dalam urutan apa pun.  
**3. *Your query string parameters, if any*`&`**  
(Opsional) Anda dapat memasukkan parameter string kueri Anda sendiri. Untuk melakukannya, tambahkan ampersand (&) di antara masing-masing, seperti. `color=red&size=medium` Anda dapat menentukan parameter string kueri dalam urutan apa pun dalam URL.  
Parameter string kueri Anda tidak dapat diberi nama`Policy`,`Signature`,`Key-Pair-Id`, atau`Hash-Algorithm`.
Jika Anda menambahkan parameter Anda sendiri, tambahkan `&` setelah masing-masing, termasuk yang terakhir.   
**4. `Policy=`*base64 encoded version of policy statement***  
Pernyataan kebijakan Anda dalam format JSON, dengan spasi kosong dihapus, lalu base64 dikodekan. Untuk informasi selengkapnya, lihat [Membuat pernyataan kebijakan untuk URL yang ditandatangani yang menggunakan kebijakan kustom](#private-content-custom-policy-statement).  
Pernyataan kebijakan mengontrol akses yang diberikan oleh URL yang ditandatangani kepada pengguna. Ini mencakup URL file, tanggal dan waktu kedaluwarsa, tanggal dan waktu opsional di mana URL menjadi valid, dan alamat IP opsional atau rentang alamat IP yang diizinkan untuk mengakses file.  
**5. `&Signature=`*hashed and signed version of the policy statement***  
Versi yang di-hash, ditandatangani, dan dikodekan base64 dari pernyataan kebijakan JSON. Untuk informasi selengkapnya, lihat [Membuat tanda tangan untuk URL yang ditandatangani yang menggunakan kebijakan kustom](#private-content-custom-policy-creating-signature).  
**6. `&Key-Pair-Id=`*public key ID for the CloudFront public key whose corresponding private key you're using to generate the signature***  
ID untuk kunci CloudFront publik, misalnya,`K2JCJMDEHXQW5F`. ID kunci publik memberi tahu kunci publik CloudFront mana yang akan digunakan untuk memvalidasi URL yang ditandatangani. CloudFrontmembandingkan informasi dalam tanda tangan dengan informasi dalam pernyataan kebijakan untuk memverifikasi bahwa URL belum dirusak.  
Kunci publik ini harus dimiliki oleh kelompok kunci yang merupakan signer tepercaya dalam distribusi. Untuk informasi selengkapnya, lihat [Tentukan penandatangan yang dapat membuat cookie yang ditandatangani URLs dan ditandatangani](private-content-trusted-signers.md).  
**7. `&Hash-Algorithm=`*SHA1 or SHA256***  
(Opsional) Algoritma hash yang digunakan untuk membuat tanda tangan. Nilai yang didukung adalah `SHA1` dan `SHA256`. Jika Anda tidak menentukan parameter ini, CloudFront defaultnya. `SHA1`

## Membuat pernyataan kebijakan untuk URL yang ditandatangani yang menggunakan kebijakan kustom
<a name="private-content-custom-policy-statement"></a>

Selesaikan langkah-langkah berikut untuk membuat pernyataan kebijakan untuk URL yang ditandatangani yang menggunakan kebijakan kustom.

Misalnya pernyataan kebijakan yang mengontrol akses ke file dalam berbagai cara, lihat[Contoh pernyataan kebijakan untuk URL yang ditandatangani menggunakan kebijakan kustom](#private-content-custom-policy-statement-examples).<a name="private-content-custom-policy-creating-policy-procedure"></a>

**Untuk membuat pernyataan kebijakan untuk URL yang ditandatangani menggunakan kebijakan kustom**

1. Buat pernyataan kebijakan dengan menggunakan format JSON berikut. Ganti simbol kurang dari (`<`) dan lebih besar dari (`>`), dan deskripsi di dalamnya, dengan nilai Anda sendiri. Untuk informasi selengkapnya, lihat [Nilai yang Anda sebutkan dalam pernyataan kebijakan untuk URL yang ditandatangani menggunakan kebijakan khusus](#private-content-custom-policy-statement-values).

   ```
   {
       "Statement": [
           {
               "Resource": "<Optional but recommended: URL of the file>",
               "Condition": {
                   "DateLessThan": {
   	                "AWS:EpochTime": <Required: ending date and time in Unix time format and UTC>
                   },
                   "DateGreaterThan": {
   	                "AWS:EpochTime": <Optional: beginning date and time in Unix time format and UTC>
                   },
                   "IpAddress": {
   	                "AWS:SourceIp": "<Optional: IP address>"
                   }
               }
           }
       ]
   }
   ```

   Perhatikan hal-hal berikut:
   + Anda hanya dapat memasukkan satu pernyataan dalam kebijakan.
   + Gunakan pengkodean karakter UTF-8.
   + Sertakan semua nama tanda baca dan parameter persis seperti yang ditentukan. Singkatan untuk nama parameter tidak diterima.
   + Urutan parameter di `Condition` tidak masalah.
   + Untuk informasi tentang nilai untuk `Resource`, `DateLessThan`, `DateGreaterThan`, dan `IpAddress`, lihat [Nilai yang Anda sebutkan dalam pernyataan kebijakan untuk URL yang ditandatangani menggunakan kebijakan khusus](#private-content-custom-policy-statement-values).

1. Hapus semua spasi kosong (termasuk tab dan karakter baris baru) dari pernyataan kebijakan. Anda mungkin harus memasukkan karakter escape dalam string di kode aplikasi.

1. Base64 mengodekan pernyataan kebijakan menggunakan pengodean base64 MIME. Untuk informasi selengkapnya, lihat [Bagian 6.8, Base64 Content-Transfer-Encoding](https://tools.ietf.org/html/rfc2045#section-6.8) di *RFC 2045, MIME (Ekstensi Surat Internet Serbaguna) Bagian Satu:* Format Badan Pesan Internet.

1. Ganti karakter yang tidak valid dalam string kueri URL dengan karakter yang valid. Tabel berikut mencantumkan karakter yang tidak valid dan valid.  
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/AmazonCloudFront/latest/DeveloperGuide/private-content-creating-signed-url-custom-policy.html)

1. Tambahkan nilai yang dihasilkan ke URL Anda yang ditandatangani setelah `Policy=`.

1. Buat tanda tangan untuk URL yang ditandatangani dengan melakukan, menandatangani, dan memberikan kode dasar64 untuk pernyataan kebijakan. Untuk informasi selengkapnya, lihat [Membuat tanda tangan untuk URL yang ditandatangani yang menggunakan kebijakan kustom](#private-content-custom-policy-creating-signature).

### Nilai yang Anda sebutkan dalam pernyataan kebijakan untuk URL yang ditandatangani menggunakan kebijakan khusus
<a name="private-content-custom-policy-statement-values"></a>

Saat Anda membuat pernyataan kebijakan untuk kebijakan kustom, Anda menentukan nilai berikut.

**Sumber daya**  
URL, termasuk string kueri apa pun, tetapi tidak termasuk CloudFront `Policy`,, `Signature``Key-Pair-Id`, dan `Hash-Algorithm` parameter. Contoh:  
`https://d111111abcdef8.cloudfront.net/images/horizon.jpg\?size=large&license=yes`  
Anda hanya dapat menentukan satu nilai URL untuk`Resource`.  
Anda dapat menghilangkan `Resource` parameter dalam kebijakan, tetapi melakukannya berarti siapa pun yang memiliki URL yang ditandatangani dapat mengakses *semua* file dalam distribusi *apa pun* yang terkait dengan key pair yang Anda gunakan untuk membuat URL yang ditandatangani.
Perhatikan hal-hal berikut:  
+ **Protokol** – Nilai harus dimulai dengan `http://`, `https://`, atau `*://`.
+ **Parameter string kueri** - Jika URL memiliki parameter string kueri, jangan gunakan karakter garis miring terbalik (`\`) untuk menghindari karakter tanda tanya (`?`) yang memulai string kueri. Contoh:

  `https://d111111abcdef8.cloudfront.net/images/horizon.jpg?size=large&license=yes`
+ **Karakter wildcard** — Anda dapat menggunakan karakter wildcard di URL dalam kebijakan. Karakter wildcard berikut didukung:
  + asterisk (`*`), yang cocok dengan nol atau lebih karakter
  + tanda tanya (`?`), yang cocok persis dengan satu karakter

  Saat CloudFront mencocokkan URL dalam kebijakan dengan URL dalam permintaan HTTP, URL dalam kebijakan dibagi menjadi empat bagian—protokol, domain, jalur, dan string kueri—sebagai berikut:

  `[protocol]://[domain]/[path]\?[query string]`

  Bila Anda menggunakan karakter wildcard di URL dalam kebijakan, pencocokan wildcard hanya berlaku dalam batas bagian yang berisi wildcard. Misalnya, pertimbangkan URL ini dalam kebijakan:

  `https://www.example.com/hello*world`

  Dalam contoh ini, wildcard asterisk (`*`) hanya berlaku di bagian jalur, sehingga cocok dengan URLs `https://www.example.com/helloworld` dan`https://www.example.com/hello-world`, tetapi tidak cocok dengan URL. `https://www.example.net/hello?world`

  Pengecualian berikut berlaku untuk batas bagian untuk pencocokan wildcard:
  + Tanda bintang di bagian jalur menyiratkan tanda bintang di bagian string kueri. Misalnya, `http://example.com/hello*` setara dengan `http://example.com/hello*\?*`.
  + Tanda bintang tertinggal di bagian domain menyiratkan tanda bintang di bagian jalur dan string kueri. Misalnya, `http://example.com*` setara dengan `http://example.com*/*\?*`.
  + URL dalam kebijakan dapat menghilangkan bagian protokol dan memulai dengan tanda bintang di bagian domain. Dalam hal ini, bagian protokol secara implisit diatur ke tanda bintang. Misalnya, URL `*example.com` dalam kebijakan setara dengan`*://*example.com/`.
  + Tanda bintang dengan sendirinya (`"Resource": "*"`) cocok dengan URL apa pun.

  Misalnya, nilai: `https://d111111abcdef8.cloudfront.net/*game_download.zip*` dalam kebijakan cocok dengan semua hal berikut URLs:
  + `https://d111111abcdef8.cloudfront.net/game_download.zip`
  + `https://d111111abcdef8.cloudfront.net/example_game_download.zip?license=yes`
  + `https://d111111abcdef8.cloudfront.net/test_game_download.zip?license=temp`
+ **Nama domain alternatif** — Jika Anda menentukan nama domain alternatif (CNAME) di URL dalam kebijakan, permintaan HTTP harus menggunakan nama domain alternatif di halaman web atau aplikasi Anda. Jangan tentukan URL Amazon S3 untuk file dalam kebijakan.

**DateLessThan**  
Tanggal dan waktu kedaluwarsa untuk URL dalam format waktu Unix (dalam detik) dan Waktu Universal Terkoordinasi (UTC). Dalam kebijakan, jangan lampirkan nilai dalam tanda kutip. Untuk informasi tentang UTC, lihat [Tanggal dan Waktu di Internet: Stempel](https://tools.ietf.org/html/rfc3339) Waktu.  
Misalnya, 31 Januari 2023 10:00 UTC dikonversi ke 1675159200 dalam format waktu Unix.  
Ini adalah satu-satunya parameter yang diperlukan di `Condition` bagian ini. CloudFront memerlukan nilai ini untuk mencegah pengguna memiliki akses permanen ke konten pribadi Anda.  
Untuk informasi selengkapnya, lihat [Saat CloudFront memeriksa tanggal dan waktu kedaluwarsa di URL yang ditandatangani](private-content-signed-urls.md#private-content-check-expiration)

**DateGreaterThan (Opsional)**  
Tanggal dan waktu mulai opsional untuk URL dalam format waktu Unix (dalam detik) dan Waktu Universal Terkoordinasi (UTC). Pengguna tidak diizinkan untuk mengakses file pada atau sebelum tanggal dan waktu yang ditentukan. Jangan melampirkan nilai dalam tanda petik. 

**IpAddress (Opsional)**  
Alamat IP klien yang membuat permintaan HTTP. Perhatikan hal-hal berikut:  
+ Untuk mengizinkan alamat IP mengakses file, hapus `IpAddress` parameter.
+ Anda dapat menentukan salah satu alamat IP atau satu rentang alamat IP. Anda tidak dapat menggunakan kebijakan untuk mengizinkan akses jika alamat IP klien berada di salah satu dari dua rentang terpisah.
+ Untuk memungkinkan akses dari satu alamat IP, Anda menentukan:

  `"`*IPv4 IP address*`/32"`
+ Anda harus menentukan rentang alamat IP dalam format IPv4 CIDR standar (misalnya,`192.0.2.0/24`). Untuk informasi selengkapnya, lihat [Classless Inter-domain Routing (CIDR): Rencana Penetapan dan Agregasi Alamat Internet](https://tools.ietf.org/html/rfc4632).
**penting**  
Alamat IP dalam IPv6 format, seperti 2001:0 db 8:85 a3: :8a2e: 0370:7334, tidak didukung. 

  Jika Anda menggunakan kebijakan khusus yang menyertakan`IpAddress`, jangan aktifkan IPv6 distribusi. Jika Anda ingin membatasi akses ke sebagian konten dengan alamat IP dan dukungan IPv6 Anda dapat membuat dua distribusi untuk konten lain. Untuk informasi lebih lanjut, lihat [Aktifkan IPv6 (permintaan penampil)](DownloadDistValuesGeneral.md#DownloadDistValuesEnableIPv6) dalam topik [Semua referensi pengaturan distribusi](distribution-web-values-specify.md).

## Contoh pernyataan kebijakan untuk URL yang ditandatangani menggunakan kebijakan kustom
<a name="private-content-custom-policy-statement-examples"></a>

Contoh pernyataan kebijakan berikut menunjukkan cara mengontrol akses ke file tertentu, semua file di direktori, atau semua file yang terkait dengan ID pasangan kunci. Contoh ini juga menunjukkan cara mengontrol akses dari alamat IP individu atau serangkaian alamat IP, dan cara mencegah pengguna menggunakan URL yang ditandatangani setelah tanggal dan waktu yang ditentukan.

Jika Anda menyalin dan menempelkan salah satu contoh ini, hapus spasi kosong (termasuk tab dan karakter baris baru), ganti nilai dengan nilai Anda sendiri, dan sertakan karakter baris baru setelah tanda kurung kurung penutup (). `}`

Untuk informasi selengkapnya, lihat [Nilai yang Anda sebutkan dalam pernyataan kebijakan untuk URL yang ditandatangani menggunakan kebijakan khusus](#private-content-custom-policy-statement-values).

**Topics**
+ [Contoh pernyataan kebijakan: Akses satu file dari berbagai alamat IP](#private-content-custom-policy-statement-example-one-object)
+ [Contoh pernyataan kebijakan: Akses semua file dalam direktori dari berbagai alamat IP](#private-content-custom-policy-statement-example-all-objects)
+ [Contoh pernyataan kebijakan: Akses semua file yang terkait dengan ID key pair dari satu alamat IP](#private-content-custom-policy-statement-example-one-ip)

### Contoh pernyataan kebijakan: Akses satu file dari berbagai alamat IP
<a name="private-content-custom-policy-statement-example-one-object"></a>

Contoh kebijakan kustom berikut dalam URL yang ditandatangani menetapkan bahwa pengguna dapat mengakses file `https://d111111abcdef8.cloudfront.net/game_download.zip` dari alamat IP dalam rentang `192.0.2.0/24` hingga 31 Januari 2023 10:00 UTC:

```
{
    "Statement": [
        {
            "Resource": "https://d111111abcdef8.cloudfront.net/game_download.zip",
            "Condition": {
                "IpAddress": {
                    "AWS:SourceIp": "192.0.2.0/24"
                },
                "DateLessThan": {
                    "AWS:EpochTime": 1675159200
                }
            }
        }
    ]
}
```

### Contoh pernyataan kebijakan: Akses semua file dalam direktori dari berbagai alamat IP
<a name="private-content-custom-policy-statement-example-all-objects"></a>

Contoh kebijakan kustom berikut memungkinkan Anda membuat tanda tangan URLs untuk file apa pun di `training` direktori, seperti yang ditunjukkan oleh karakter wildcard asterisk (`*`) dalam parameter. `Resource` Pengguna dapat mengakses file dari alamat IP dalam kisaran `192.0.2.0/24` hingga 31 Januari 2023 10:00 UTC:

```
{
    "Statement": [
        {
            "Resource": "https://d111111abcdef8.cloudfront.net/training/*",
            "Condition": {
                "IpAddress": {
                    "AWS:SourceIp": "192.0.2.0/24"
                },
                "DateLessThan": {
                    "AWS:EpochTime": 1675159200
                }
            }
        }
    ]
}
```

Setiap URL yang ditandatangani tempat Anda menggunakan kebijakan ini memiliki URL yang mengidentifikasi file tertentu, misalnya:

`https://d111111abcdef8.cloudfront.net/training/orientation.pdf`

### Contoh pernyataan kebijakan: Akses semua file yang terkait dengan ID key pair dari satu alamat IP
<a name="private-content-custom-policy-statement-example-one-ip"></a>

Contoh kebijakan kustom berikut memungkinkan Anda membuat tanda tangan URLs untuk file apa pun yang terkait dengan distribusi apa pun, seperti yang ditunjukkan oleh karakter wildcard asterisk (`*`) dalam parameter. `Resource` URL yang ditandatangani harus menggunakan `https://` protokol, bukan`http://`. Pengguna harus menggunakan alamat IP `192.0.2.10/32`. (Nilai `192.0.2.10/32` dalam notasi CIDR mengacu pada alamat IP tunggal, `192.0.2.10`.) File hanya tersedia mulai 31 Januari 2023 10:00 UTC hingga 2 Februari 2023 10:00 UTC:

```
{
    "Statement": [
       {
            "Resource": "https://*",
            "Condition": {
                "IpAddress": {
                    "AWS:SourceIp": "192.0.2.10/32"
                },
                "DateGreaterThan": {
                    "AWS:EpochTime": 1675159200
                },
                "DateLessThan": {
                    "AWS:EpochTime": 1675332000
                }
            }
        }
    ]
}
```

Setiap URL bertanda tangan yang Anda gunakan kebijakan ini memiliki URL yang mengidentifikasi file tertentu dalam CloudFront distribusi tertentu, misalnya:

`https://d111111abcdef8.cloudfront.net/training/orientation.pdf`

URL yang ditandatangani juga menyertakan ID key pair, yang harus dikaitkan dengan grup kunci tepercaya dalam distribusi (d111111abcdef8.cloudfront.net) yang Anda tentukan di URL.

## Membuat tanda tangan untuk URL yang ditandatangani yang menggunakan kebijakan kustom
<a name="private-content-custom-policy-creating-signature"></a>

Tanda tangan untuk URL bertanda tangan yang menggunakan kebijakan kustom adalah versi salinan dokumen, ditandatangani, dan dikodekan base64 dari pernyataan kebijakan. Untuk membuat tanda tangan untuk kebijakan kustom, selesaikan langkah berikut.

Untuk informasi tambahan dan contoh cara membuat, menandatangani, dan mengkode pernyataan kebijakan, lihat:
+ [Perintah Linux dan OpenSSL untuk pengkodean dan enkripsi base64](private-content-linux-openssl.md)
+ [Contoh kode untuk membuat tanda tangan untuk URL yang ditandatangani](PrivateCFSignatureCodeAndExamples.md)

**catatan**  
Contoh terkait menggunakan SHA-1 secara default. Untuk menggunakan SHA-256 sebagai gantinya, ganti `sha1` dengan `sha256` perintah OpenSSL dan sertakan `Hash-Algorithm=SHA256` parameter kueri di URL yang ditandatangani.<a name="private-content-custom-policy-creating-signature-download-procedure"></a>

**Opsi 1: Untuk membuat tanda tangan dengan menggunakan kebijakan khusus**

1. Gunakan fungsi hash SHA-1 atau SHA-256 dan kunci pribadi RSA atau ECDSA yang dihasilkan untuk hash dan menandatangani pernyataan kebijakan JSON yang Anda buat dalam prosedur. [Untuk membuat pernyataan kebijakan untuk URL yang ditandatangani menggunakan kebijakan kustom](#private-content-custom-policy-creating-policy-procedure) Gunakan versi pernyataan kebijakan yang tidak lagi menyertakan spasi kosong tetapi belum dikodekan base64.

   Jika Anda menggunakan SHA-256, Anda harus menyertakan `&Hash-Algorithm=SHA256` dalam URL yang ditandatangani.

   Untuk kunci privat yang diperlukan oleh fungsi hash, gunakan kunci pribadi yang kunci publiknya berada dalam grup kunci yang dipercaya aktif untuk distribusi.
**catatan**  
Metode yang Anda gunakan untuk men-emuk dan menandatangani pernyataan kebijakan tergantung pada bahasa pemrograman dan platform Anda. Untuk kode sampel, lihat [Contoh kode untuk membuat tanda tangan untuk URL yang ditandatangani](PrivateCFSignatureCodeAndExamples.md).

1. Hapus spasi kosong (termasuk tab dan karakter baris baru) dari string hash dan ditandatangani.

1. Base64 mengodekan string menggunakan pengodean base64 MIME. Untuk informasi selengkapnya, lihat [Bagian 6.8, Base64 Content-Transfer-Encoding](https://tools.ietf.org/html/rfc2045#section-6.8) di *RFC 2045, MIME (Ekstensi Surat Internet Serbaguna) Bagian Satu:* Format Badan Pesan Internet.

1. Ganti karakter yang tidak valid dalam string kueri URL dengan karakter yang valid. Tabel berikut mencantumkan karakter yang tidak valid dan valid.  
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/AmazonCloudFront/latest/DeveloperGuide/private-content-creating-signed-url-custom-policy.html)

1. Tambahkan nilai yang dihasilkan ke URL Anda yang ditandatangani setelah `&Signature=`, dan kembali ke [Untuk membuat URL yang ditandatangani menggunakan kebijakan kustom](#private-content-creating-signed-url-custom-policy-procedure) untuk menyelesaikan penyatuan bagian URL yang Anda tanda tangani.