

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

# Menandatangani Amazon CloudFront URLs dengan AWS SDK untuk PHP Versi 3
<a name="cloudfront-example-signed-url"></a>

Ditandatangani URLs memungkinkan Anda memberi pengguna akses ke konten pribadi Anda. URL yang ditandatangani mencakup informasi tambahan (misalnya, waktu kedaluwarsa) yang memberi Anda kontrol lebih besar atas akses ke konten Anda. Informasi tambahan ini muncul dalam pernyataan kebijakan, yang didasarkan pada kebijakan terekam atau kebijakan pabean. Untuk informasi tentang cara mengatur distribusi pribadi dan alasan Anda harus menandatangani URLs, lihat [Menayangkan Konten Pribadi melalui Amazon CloudFront](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/PrivateContent.html) di Panduan CloudFront Pengembang Amazon.
+ Buat CloudFront URL Amazon yang ditandatangani menggunakan [getSignedurl](https://docs.aws.amazon.com/aws-sdk-php/v3/api/class-Aws.CloudFront.CloudFrontClient.html#_getSignedUrl).
+ Buat CloudFront cookie Amazon yang ditandatangani menggunakan [getSignedCookie](https://docs.aws.amazon.com/aws-sdk-php/v3/api/class-Aws.CloudFront.CloudFrontClient.html#_getSignedCookie).

Semua kode contoh untuk AWS SDK untuk PHP tersedia [di sini GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code).

## Kredensial
<a name="examplecredentials"></a>

Sebelum menjalankan kode contoh, konfigurasikan AWS kredensyal Anda, seperti yang dijelaskan dalam. [Mengautentikasi dengan AWS menggunakan AWS SDK untuk PHP Versi 3](credentials.md) Kemudian impor AWS SDK untuk PHP, seperti yang dijelaskan dalam[Menginstal AWS SDK untuk PHP Versi 3](getting-started_installation.md).

Untuk informasi selengkapnya tentang menggunakan Amazon CloudFront, lihat [Panduan CloudFront Pengembang Amazon](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/).

## Penandatanganan CloudFront URLs untuk distribusi pribadi
<a name="signing-cf-urls-for-private-distributions"></a>

Anda dapat menandatangani URL menggunakan CloudFront klien di SDK. Pertama, Anda harus membuat `CloudFrontClient` objek. Anda dapat menandatangani CloudFront URL untuk sumber daya video menggunakan kebijakan kalengan atau kustom.

 **Impor** 

```
require 'vendor/autoload.php';

use Aws\CloudFront\CloudFrontClient;
use Aws\Exception\AwsException;
```

 **Kode Sampel** 

```
function signPrivateDistribution(
    $cloudFrontClient,
    $resourceKey,
    $expires,
    $privateKey,
    $keyPairId
) {
    try {
        $result = $cloudFrontClient->getSignedUrl([
            'url' => $resourceKey,
            'expires' => $expires,
            'private_key' => $privateKey,
            'key_pair_id' => $keyPairId
        ]);

        return $result;
    } catch (AwsException $e) {
        return 'Error: ' . $e->getAwsErrorMessage();
    }
}

function signAPrivateDistribution()
{
    $resourceKey = 'https://d13l49jEXAMPLE.cloudfront.net/my-file.txt';
    $expires = time() + 300; // 5 minutes (5 * 60 seconds) from now.
    $privateKey = dirname(__DIR__) . '/cloudfront/my-private-key.pem';
    $keyPairId = 'AAPKAJIKZATYYYEXAMPLE';

    $cloudFrontClient = new CloudFrontClient([
        'profile' => 'default',
        'version' => '2018-06-18',
        'region' => 'us-east-1'
    ]);

    echo signPrivateDistribution(
        $cloudFrontClient,
        $resourceKey,
        $expires,
        $privateKey,
        $keyPairId
    );
}

// Uncomment the following line to run this code in an AWS account.
// signAPrivateDistribution();
```

## Menggunakan kebijakan kustom saat membuat CloudFront URLs
<a name="use-a-custom-policy-when-creating-cf-urls"></a>

Untuk menggunakan kebijakan kustom, berikan `policy` kunci sebagai gantinya`expires`.

 **Impor** 

```
require 'vendor/autoload.php';

use Aws\CloudFront\CloudFrontClient;
use Aws\Exception\AwsException;
```

 **Kode Sampel** 

```
function signPrivateDistributionPolicy(
    $cloudFrontClient,
    $resourceKey,
    $customPolicy,
    $privateKey,
    $keyPairId
) {
    try {
        $result = $cloudFrontClient->getSignedUrl([
            'url' => $resourceKey,
            'policy' => $customPolicy,
            'private_key' => $privateKey,
            'key_pair_id' => $keyPairId
        ]);

        return $result;
    } catch (AwsException $e) {
        return 'Error: ' . $e->getAwsErrorMessage();
    }
}

function signAPrivateDistributionPolicy()
{
    $resourceKey = 'https://d13l49jEXAMPLE.cloudfront.net/my-file.txt';
    $expires = time() + 300; // 5 minutes (5 * 60 seconds) from now.
    $customPolicy = <<<POLICY
{
    "Statement": [
        {
            "Resource": "$resourceKey",
            "Condition": {
                "IpAddress": {"AWS:SourceIp": "{$_SERVER['REMOTE_ADDR']}/32"},
                "DateLessThan": {"AWS:EpochTime": $expires}
            }
        }
    ]
}
POLICY;
    $privateKey = dirname(__DIR__) . '/cloudfront/my-private-key.pem';
    $keyPairId = 'AAPKAJIKZATYYYEXAMPLE';

    $cloudFrontClient = new CloudFrontClient([
        'profile' => 'default',
        'version' => '2018-06-18',
        'region' => 'us-east-1'
    ]);

    echo signPrivateDistributionPolicy(
        $cloudFrontClient,
        $resourceKey,
        $customPolicy,
        $privateKey,
        $keyPairId
    );
}

// Uncomment the following line to run this code in an AWS account.
// signAPrivateDistributionPolicy();
```

## Menggunakan URL yang CloudFront ditandatangani
<a name="use-a-cf-signed-url"></a>

Bentuk URL yang ditandatangani berbeda, tergantung pada apakah URL yang Anda tandatangani menggunakan skema “HTTP” atau “RTMP”. Dalam kasus “HTTP”, URL lengkap dan absolut dikembalikan. Untuk “RTMP”, hanya URL relatif yang dikembalikan untuk kenyamanan Anda. Ini karena beberapa pemain memerlukan host dan jalur yang akan disediakan sebagai parameter terpisah.

Contoh berikut menunjukkan bagaimana Anda bisa menggunakan URL yang ditandatangani untuk membuat halaman web yang menampilkan video menggunakan. [JWPlayer](http://www.longtailvideo.com/jw-player/) Jenis teknik yang sama akan berlaku untuk pemain lain seperti [FlowPlayer](http://flowplayer.org/), tetapi memerlukan kode sisi klien yang berbeda.

```
<html>
<head>
    <title>|CFlong| Streaming Example</title>
    <script type="text/javascript" src="https://example.com/jwplayer.js"></script>
</head>
<body>
    <div id="video">The canned policy video will be here.</div>
    <script type="text/javascript">
        jwplayer('video').setup({
            file: "<?= $streamHostUrl ?>/cfx/st/<?= $signedUrlCannedPolicy ?>",
            width: "720",
            height: "480"
        });
    </script>
</body>
</html>
```

## Menandatangani CloudFront cookie untuk distribusi pribadi
<a name="signing-cf-cookies-for-private-distributions"></a>

Sebagai alternatif untuk ditandatangani URLs, Anda juga dapat memberikan klien akses ke distribusi pribadi melalui cookie yang ditandatangani. Cookie yang ditandatangani memungkinkan Anda untuk menyediakan akses ke beberapa file terbatas, seperti semua file untuk video dalam format HLS atau semua file di area pelanggan situs web. Untuk informasi selengkapnya tentang alasan Anda mungkin ingin menggunakan cookie yang ditandatangani alih-alih ditandatangani URLs (atau sebaliknya), lihat [Memilih antara cookie yang ditandatangani URLs dan ditandatangani](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-choosing-signed-urls-cookies.html) di Panduan CloudFront Pengembang Amazon.

Membuat cookie yang ditandatangani mirip dengan membuat URL yang ditandatangani. Satu-satunya perbedaan adalah metode yang disebut (`getSignedCookie`bukan`getSignedUrl`).

 **Impor** 

```
require 'vendor/autoload.php';

use Aws\CloudFront\CloudFrontClient;
use Aws\Exception\AwsException;
```

 **Kode Sampel** 

```
function signCookie(
    $cloudFrontClient,
    $resourceKey,
    $expires,
    $privateKey,
    $keyPairId
) {
    try {
        $result = $cloudFrontClient->getSignedCookie([
            'url' => $resourceKey,
            'expires' => $expires,
            'private_key' => $privateKey,
            'key_pair_id' => $keyPairId
        ]);

        return $result;
    } catch (AwsException $e) {
        return [ 'Error' => $e->getAwsErrorMessage() ];
    }
}

function signACookie()
{
    $resourceKey = 'https://d13l49jEXAMPLE.cloudfront.net/my-file.txt';
    $expires = time() + 300; // 5 minutes (5 * 60 seconds) from now.
    $privateKey = dirname(__DIR__) . '/cloudfront/my-private-key.pem';
    $keyPairId = 'AAPKAJIKZATYYYEXAMPLE';

    $cloudFrontClient = new CloudFrontClient([
        'profile' => 'default',
        'version' => '2018-06-18',
        'region' => 'us-east-1'
    ]);

    $result = signCookie(
        $cloudFrontClient,
        $resourceKey,
        $expires,
        $privateKey,
        $keyPairId
    );

    /* If successful, returns something like:
    CloudFront-Expires = 1589926678
    CloudFront-Signature = Lv1DyC2q...2HPXaQ__
    CloudFront-Key-Pair-Id = AAPKAJIKZATYYYEXAMPLE
    */
    foreach ($result as $key => $value) {
        echo $key . ' = ' . $value . "\n";
    }
}

// Uncomment the following line to run this code in an AWS account.
// signACookie();
```

## Gunakan kebijakan khusus saat membuat CloudFront cookie
<a name="use-a-custom-policy-when-creating-cf-cookies"></a>

Seperti halnya`getSignedUrl`, Anda dapat memberikan `'policy'` parameter alih-alih `expires` parameter dan `url` parameter untuk menandatangani cookie dengan kebijakan khusus. Kebijakan kustom dapat berisi wildcard di kunci sumber daya. Hal ini memungkinkan Anda untuk membuat satu cookie ditandatangani untuk beberapa file.

 `getSignedCookie`mengembalikan array pasangan kunci-nilai, yang semuanya harus ditetapkan sebagai cookie untuk memberikan akses ke distribusi pribadi.

 **Impor** 

```
require 'vendor/autoload.php';

use Aws\CloudFront\CloudFrontClient;
use Aws\Exception\AwsException;
```

 **Kode Sampel** 

```
function signCookiePolicy(
    $cloudFrontClient,
    $customPolicy,
    $privateKey,
    $keyPairId
) {
    try {
        $result = $cloudFrontClient->getSignedCookie([
            'policy' => $customPolicy,
            'private_key' => $privateKey,
            'key_pair_id' => $keyPairId
        ]);

        return $result;
    } catch (AwsException $e) {
        return [ 'Error' => $e->getAwsErrorMessage() ];
    }
}

function signACookiePolicy()
{
    $resourceKey = 'https://d13l49jEXAMPLE.cloudfront.net/my-file.txt';
    $expires = time() + 300; // 5 minutes (5 * 60 seconds) from now.
    $customPolicy = <<<POLICY
{
    "Statement": [
        {
            "Resource": "{$resourceKey}",
            "Condition": {
                "IpAddress": {"AWS:SourceIp": "{$_SERVER['REMOTE_ADDR']}/32"},
                "DateLessThan": {"AWS:EpochTime": {$expires}}
            }
        }
    ]
}
POLICY;
    $privateKey = dirname(__DIR__) . '/cloudfront/my-private-key.pem';
    $keyPairId = 'AAPKAJIKZATYYYEXAMPLE';

    $cloudFrontClient = new CloudFrontClient([
        'profile' => 'default',
        'version' => '2018-06-18',
        'region' => 'us-east-1'
    ]);

    $result = signCookiePolicy(
        $cloudFrontClient,
        $customPolicy,
        $privateKey,
        $keyPairId
    );

    /* If successful, returns something like:
    CloudFront-Policy = eyJTdGF0...fX19XX0_
    CloudFront-Signature = RowqEQWZ...N8vetw__
    CloudFront-Key-Pair-Id = AAPKAJIKZATYYYEXAMPLE
    */
    foreach ($result as $key => $value) {
        echo $key . ' = ' . $value . "\n";
    }
}

// Uncomment the following line to run this code in an AWS account.
// signACookiePolicy();
```

## Kirim CloudFront cookie ke klien Guzzle
<a name="send-cf-cookies-to-guzzle-client"></a>

Anda juga dapat meneruskan cookie ini ke `GuzzleHttp\Cookie\CookieJar` untuk digunakan dengan klien Guzzle.

```
use GuzzleHttp\Client;
use GuzzleHttp\Cookie\CookieJar;

$distribution = "example-distribution.cloudfront.net";
$client = new \GuzzleHttp\Client([
    'base_uri' => "https://$distribution",
    'cookies' => CookieJar::fromArray($signedCookieCustomPolicy, $distribution),
]);

$client->get('video.mp4');
```

Untuk informasi selengkapnya, lihat [Menggunakan Cookie yang Ditandatangani](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-signed-cookies.html) di Panduan CloudFront Pengembang Amazon.