

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

# Menerapkan isolasi penyewa SaaS untuk Amazon S3 dengan menggunakan mesin penjual otomatis token AWS Lambda
<a name="implement-saas-tenant-isolation-for-amazon-s3-by-using-an-aws-lambda-token-vending-machine"></a>

*Tabby Ward, Thomas Davis, dan Sravan Periyathambi, Amazon Web Services*

## Ringkasan
<a name="implement-saas-tenant-isolation-for-amazon-s3-by-using-an-aws-lambda-token-vending-machine-summary"></a>

Aplikasi SaaS multitenant harus menerapkan sistem untuk memastikan bahwa isolasi penyewa dipertahankan. Saat menyimpan data penyewa pada AWS sumber daya yang sama—seperti saat beberapa penyewa menyimpan data dalam ember Amazon Simple Storage Service (Amazon S3) S3—Anda harus memastikan bahwa akses lintas penyewa tidak dapat terjadi. Token vending machine (TVMs) adalah salah satu cara untuk menyediakan isolasi data penyewa. Mesin-mesin ini menyediakan mekanisme untuk mendapatkan token sambil mengabstraksi kompleksitas bagaimana token ini dihasilkan. Pengembang dapat menggunakan TVM tanpa memiliki pengetahuan rinci tentang bagaimana menghasilkan token.

Pola ini mengimplementasikan TVM dengan menggunakan. AWS Lambda TVM menghasilkan token yang terdiri dari kredenal layanan token keamanan sementara (STS) yang membatasi akses ke data penyewa SaaS tunggal dalam bucket S3.

TVMs, dan kode yang disediakan dengan pola ini, biasanya digunakan dengan klaim yang berasal dari JSON Web Tokens (JWTs) untuk mengaitkan permintaan AWS sumber daya dengan kebijakan cakupan penyewa (IAM AWS Identity and Access Management ). Anda dapat menggunakan kode dalam pola ini sebagai dasar untuk mengimplementasikan aplikasi SaaS yang menghasilkan kredensi STS sementara cakupan berdasarkan klaim yang diberikan dalam token JWT.

## Prasyarat dan batasan
<a name="implement-saas-tenant-isolation-for-amazon-s3-by-using-an-aws-lambda-token-vending-machine-prereqs"></a>

**Prasyarat**
+ Aktif Akun AWS.
+ AWS Command Line Interface (AWS CLI) [versi 1.19.0 atau yang lebih baru](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv1.html), diinstal dan dikonfigurasi di macOS, Linux, atau Windows. Atau, Anda dapat menggunakan AWS CLI [versi 2.1 atau yang lebih baru](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html).

**Batasan**
+ Kode ini berjalan di Java dan saat ini tidak mendukung bahasa pemrograman lainnya. 
+ Aplikasi sampel tidak menyertakan dukungan AWS Cross-region atau disaster recovery (DR). 
+ Pola ini menunjukkan bagaimana TVM Lambda untuk aplikasi SaaS dapat menyediakan akses penyewa cakupan. Pola ini tidak dimaksudkan untuk digunakan di lingkungan produksi tanpa pengujian keamanan tambahan sebagai bagian dari aplikasi atau kasus penggunaan spesifik Anda.

## Arsitektur
<a name="implement-saas-tenant-isolation-for-amazon-s3-by-using-an-aws-lambda-token-vending-machine-architecture"></a>

**Tumpukan teknologi target**
+ AWS Lambda
+ Amazon S3
+ IAM
+ AWS Security Token Service (AWS STS)

**Arsitektur target**

![\[Menghasilkan token untuk mendapatkan kredensi STS sementara untuk mengakses data dalam bucket S3.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/97a34c8e-d04e-40b6-acbf-1baa176d22a9/images/14d0508a-703b-4229-85e6-c5094de7fe01.png)


 

## Alat
<a name="implement-saas-tenant-isolation-for-amazon-s3-by-using-an-aws-lambda-token-vending-machine-tools"></a>

**Layanan AWS**
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) adalah alat sumber terbuka yang membantu Anda berinteraksi Layanan AWS melalui perintah di shell baris perintah Anda.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) membantu Anda mengelola akses ke AWS sumber daya dengan aman dengan mengontrol siapa yang diautentikasi dan diberi wewenang untuk menggunakannya.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)adalah layanan komputasi yang membantu Anda menjalankan kode tanpa perlu menyediakan atau mengelola server. Ini menjalankan kode Anda hanya bila diperlukan dan skala secara otomatis, jadi Anda hanya membayar untuk waktu komputasi yang Anda gunakan.
+ [AWS Security Token Service (AWS STS)](https://docs.aws.amazon.com/STS/latest/APIReference/welcome.html) membantu Anda meminta kredensil hak istimewa terbatas sementara untuk pengguna.
+ [Amazon Simple Storage Service (Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)) adalah layanan penyimpanan objek berbasis cloud yang membantu Anda menyimpan, melindungi, dan mengambil sejumlah data.

**Kode**

Kode sumber untuk pola ini tersedia sebagai lampiran dan termasuk file-file berikut:
+ `s3UploadSample.jar`menyediakan kode sumber untuk fungsi Lambda yang mengunggah dokumen JSON ke bucket S3.
+ `tvm-layer.zip`menyediakan pustaka Java yang dapat digunakan kembali yang memasok token (kredensi sementara STS) untuk fungsi Lambda untuk mengakses bucket S3 dan mengunggah dokumen JSON.
+ `token-vending-machine-sample-app.zip`menyediakan kode sumber yang digunakan untuk membuat artefak dan instruksi kompilasi ini.

Untuk menggunakan file-file ini, ikuti instruksi di bagian selanjutnya.

## Epik
<a name="implement-saas-tenant-isolation-for-amazon-s3-by-using-an-aws-lambda-token-vending-machine-epics"></a>

### Tentukan nilai variabel
<a name="determine-variable-values"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Tentukan nilai variabel. | Implementasi pola ini mencakup beberapa nama variabel yang harus digunakan secara konsisten. Tentukan nilai yang harus digunakan untuk setiap variabel, dan berikan nilai itu ketika diminta dalam langkah selanjutnya.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/implement-saas-tenant-isolation-for-amazon-s3-by-using-an-aws-lambda-token-vending-machine.html) | Administrator awan | 

### Buat Bucket S3
<a name="create-an-s3-bucket"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat bucket S3 untuk aplikasi sampel. | Gunakan AWS CLI perintah berikut untuk membuat bucket S3. Berikan `<sample-app-bucket-name>`**** nilai dalam cuplikan kode:<pre>aws s3api create-bucket --bucket <sample-app-bucket-name></pre>Aplikasi sampel Lambda mengunggah file JSON ke bucket ini. | Administrator awan | 

### Buat peran dan kebijakan IAM TVM
<a name="create-the-iam-tvm-role-and-policy"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat peran TVM. | Gunakan salah satu AWS CLI perintah berikut untuk membuat peran IAM. Berikan `<sample-tvm-role-name>`**** nilai dalam perintah.Untuk shell macOS atau Linux:<pre>aws iam create-role \<br />--role-name <sample-tvm-role-name> \<br />--assume-role-policy-document '{<br />    "Version": "2012-10-17",		 	 	 <br />    "Statement": [<br />        {<br />            "Effect": "Allow",<br />            "Action": [<br />                "sts:AssumeRole"<br />            ],<br />            "Principal": {<br />                "Service": [<br />                    "lambda.amazonaws.com"<br />                ]<br />            },<br />            "Condition": {<br />                "StringEquals": {<br />                    "aws:SourceAccount": "<AWS Account ID>"<br />                }<br />            }<br />        }<br />    ]<br />}'</pre>Untuk baris perintah Windows:<pre>aws iam create-role ^<br />--role-name <sample-tvm-role-name> ^<br />--assume-role-policy-document "{\"Version\": \"2012-10-17\", \"Statement\": [{\"Effect\": \"Allow\", \"Action\": [\"sts:AssumeRole\"], \"Principal\": {\"Service\": [\"lambda.amazonaws.com\"]}, \"Condition\": {\"StringEquals\": {\"aws:SourceAccount\": \"<AWS Account ID>\"}}}]}"</pre>Contoh aplikasi Lambda mengasumsikan peran ini saat aplikasi dipanggil. Kemampuan untuk mengambil peran aplikasi dengan kebijakan cakupan memberikan izin kode yang lebih luas untuk mengakses bucket S3. | Administrator awan | 
| Buat kebijakan peran TVM sebaris. | Gunakan salah satu AWS CLI perintah berikut untuk membuat kebijakan IAM. Berikan`<sample-tvm-role-name>`, **`<AWS Account ID>`**, dan `<sample-app-role-name>` nilai dalam perintah.Untuk shell macOS atau Linux:<pre>aws iam put-role-policy \<br />--role-name <sample-tvm-role-name> \<br />--policy-name assume-app-role \<br />--policy-document '{<br />    "Version": "2012-10-17",		 	 	  <br />    "Statement": [<br />        {<br />            "Effect": "Allow", <br />            "Action": "sts:AssumeRole", <br />            "Resource": "arn:aws:iam::<AWS Account ID>:role/<sample-app-role-name>"<br />        }<br />    ]}'</pre>Untuk baris perintah Windows:<pre>aws iam put-role-policy ^<br />--role-name <sample-tvm-role-name> ^<br />--policy-name assume-app-role ^<br />--policy-document "{\"Version\": \"2012-10-17\", \"Statement\": [{\"Effect\": \"Allow\", \"Action\": \"sts:AssumeRole\", \"Resource\": \"arn:aws:iam::<AWS Account ID>:role/<sample-app-role-name>\"}]}"</pre>Kebijakan ini melekat pada peran TVM. Ini memberi kode kemampuan untuk mengambil peran aplikasi, yang memiliki izin yang lebih luas untuk mengakses bucket S3. | Administrator awan | 
| Lampirkan kebijakan Lambda yang dikelola. | Gunakan AWS CLI perintah berikut untuk melampirkan kebijakan `AWSLambdaBasicExecutionRole` IAM. Berikan `<sample-tvm-role-name>` nilai dalam perintah:<pre>aws iam attach-role-policy \<br />--role-name <sample-tvm-role-name> \<br />--policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole</pre>Untuk baris perintah Windows:<pre>aws iam attach-role-policy ^<br />--role-name <sample-tvm-role-name> ^<br />--policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole</pre>Kebijakan terkelola ini dilampirkan pada peran TVM untuk mengizinkan Lambda mengirim log ke Amazon. CloudWatch | Administrator awan | 

### Buat peran dan kebijakan aplikasi IAM
<a name="create-the-iam-application-role-and-policy"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat peran aplikasi. | Gunakan salah satu AWS CLI perintah berikut untuk membuat peran IAM. Berikan`<sample-app-role-name>`,`<AWS Account ID>`, dan `<sample-tvm-role-name>` nilai dalam perintah.Untuk shell macOS atau Linux:<pre>aws iam create-role \<br />--role-name <sample-app-role-name> \<br />--assume-role-policy-document '{<br />    "Version": "2012-10-17",		 	 	  <br />    "Statement": [<br />        {<br />            "Effect": <br />            "Allow",<br />            "Principal": {<br />                "AWS": "arn:aws:iam::<AWS Account ID>:role/<sample-tvm-role-name>"<br />            },<br />            "Action": "sts:AssumeRole"<br />        }<br />    ]}'</pre>Untuk baris perintah Windows:<pre>aws iam create-role ^<br />--role-name <sample-app-role-name> ^<br />--assume-role-policy-document "{\"Version\": \"2012-10-17\", \"Statement\": [{\"Effect\": \"Allow\",\"Principal\": {\"AWS\": \"arn:aws:iam::<AWS Account ID>:role/<sample-tvm-role-name>\"},\"Action\": \"sts:AssumeRole\"}]}"</pre>Aplikasi sampel Lambda mengasumsikan peran ini dengan kebijakan cakupan untuk mendapatkan akses berbasis penyewa ke bucket S3. | Administrator awan | 
| Buat kebijakan peran aplikasi inline. | Gunakan salah satu AWS CLI mmands berikut untuk membuat kebijakan IAM. Berikan `<sample-app-role-name>` dan `<sample-app-bucket-name>`**** nilai dalam perintah.Untuk shell macOS atau Linux:<pre>aws iam put-role-policy \<br />--role-name <sample-app-role-name> \<br />--policy-name s3-bucket-access \<br />--policy-document '{<br />    "Version": "2012-10-17",		 	 	  <br />    "Statement": [<br />        {<br />            "Effect": "Allow", <br />            "Action": [<br />                "s3:PutObject", <br />                "s3:GetObject", <br />                "s3:DeleteObject"<br />            ], <br />            "Resource": "arn:aws:s3:::<sample-app-bucket-name>/*"<br />        }, <br />        {<br />            "Effect": "Allow", <br />            "Action": ["s3:ListBucket"], <br />            "Resource": "arn:aws:s3:::<sample-app-bucket-name>"<br />        }<br />    ]}'</pre>Untuk baris perintah Windows:<pre>aws iam put-role-policy ^<br />--role-name <sample-app-role-name> ^<br />--policy-name s3-bucket-access ^<br />--policy-document "{\"Version\": \"2012-10-17\", \"Statement\": [{\"Effect\": \"Allow\", \"Action\": [\"s3:PutObject\", \"s3:GetObject\", \"s3:DeleteObject\"], \"Resource\": \"arn:aws:s3:::<sample-app-bucket-name>/*\"}, {\"Effect\": \"Allow\", \"Action\": [\"s3:ListBucket\"], \"Resource\": \"arn:aws:s3:::<sample-app-bucket-name>\"}]}"</pre>Kebijakan ini dilampirkan pada peran aplikasi. Ini menyediakan akses luas ke objek di bucket S3. Saat aplikasi sampel mengasumsikan peran tersebut, izin ini akan dicakup oleh penyewa tertentu dengan kebijakan TVM yang dihasilkan secara dinamis. | Administrator awan | 

### Buat aplikasi sampel Lambda dengan TVM
<a name="create-the-lam-sample-application-with-tvm"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Unduh file sumber yang dikompilasi. | Unduh `tvm-layer.zip`**** file `s3UploadSample.jar` dan, yang disertakan sebagai lampiran. Kode sumber yang digunakan untuk membuat artefak dan instusi kompilasi ini disediakan di. `token-vending-machine-sample-app.zip` | Administrator awan | 
| Buat layer Lambda. | Gunakan AWS CLI perintah berikut untuk membuat layer Lambda, yang membuat TVM dapat diakses oleh Lambda. Jika Anda tidak menjalankan perintah ini dari lokasi di mana Anda mengunduh` tvm-layer.zip`, berikan jalur yang benar ke `tvm-layer.zip` dalam `--zip-file` parameter. <pre>aws lambda publish-layer-version \<br />--layer-name sample-token-vending-machine \<br />--compatible-runtimes java11 \<br />--zip-file fileb://tvm-layer.zip</pre>Untuk baris perintah Windows:<pre>aws lambda publish-layer-version ^<br />--layer-name sample-token-vending-machine ^<br />--compatible-runtimes java11 ^<br />--zip-file fileb://tvm-layer.zip</pre>Perintah ini membuat lapisan Lambda yang berisi pustaka TVM yang dapat digunakan kembali. | Administrator cloud, Pengembang aplikasi | 
| Buat fungsi Lambda. | Gunakan AWS CLI perintah berikut untuk membuat fungsi Lambda. Berikan`<sample-app-function-name>`,`<AWS Account ID>`,`<AWS Region>`,`<sample-tvm-role-name>`,`<sample-app-bucket-name>`, dan `<sample-app-role-name>` nilai dalam perintah. Jika Anda tidak menjalankan perintah ini dari lokasi di mana Anda mengunduh`s3UploadSample.jar`, berikan jalur yang benar ke `s3UploadSample.jar` dalam `--zip-file` parameter. <pre>aws lambda create-function \<br />--function-name <sample-app-function-name>  \<br />--timeout 30 \<br />--memory-size 256 \<br />--runtime java11 \<br />--role arn:aws:iam::<AWS Account ID>:role/<sample-tvm-role-name> \<br />--handler com.amazon.aws.s3UploadSample.App \<br />--zip-file fileb://s3UploadSample.jar \<br />--layers arn:aws:lambda:<AWS Region>:<AWS Account ID>:layer:sample-token-vending-machine:1 \<br />--environment "Variables={S3_BUCKET=<sample-app-bucket-name>,<br />ROLE=arn:aws:iam::<AWS Account ID>:role/<sample-app-role-name>}"</pre>Untuk baris perintah Windows:<pre>aws lambda create-function ^<br />--function-name <sample-app-function-name>  ^<br />--timeout 30 ^<br />--memory-size 256 ^<br />--runtime java11 ^<br />--role arn:aws:iam::<AWS Account ID>:role/<sample-tvm-role-name> ^<br />--handler com.amazon.aws.s3UploadSample.App ^<br />--zip-file fileb://s3UploadSample.jar ^<br />--layers arn:aws:lambda:<AWS Region>:<AWS Account ID>:layer:sample-token-vending-machine:1 ^<br />--environment "Variables={S3_BUCKET=<sample-app-bucket-name>,ROLE=arn:aws:iam::<AWS Account ID>:role/<sample-app-role-name>}"</pre>Perintah ini menciptakan fungsi Lambda dengan kode aplikasi sampel dan lapisan TVM terpasang. Ini juga menetapkan dua variabel lingkungan: `S3_BUCKET` dan`ROLE`. Aplikasi sampel menggunakan variabel-variabel ini untuk menentukan peran yang akan diasumsikan dan bucket S3 untuk mengunggah dokumen JSON. | Administrator cloud, Pengembang aplikasi | 

### Uji aplikasi sampel dan TVM
<a name="test-the-sample-application-and-tvm"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Memanggil aplikasi sampel Lambda. | Gunakan salah satu AWS CLI perintah berikut untuk memulai aplikasi sampel Lambda dengan muatan yang diharapkan. Berikan `<sample-app-function-name>` dan `<sample-tenant-name>` nilai dalam perintah.Untuk shell macOS dan Linux:<pre>aws lambda invoke \<br />--function <sample-app-function-name> \<br />--invocation-type RequestResponse \<br />--payload '{"tenant": "<sample-tenant-name>"}' \<br />--cli-binary-format raw-in-base64-out response.json</pre>Untuk baris perintah Windows:<pre>aws lambda invoke ^<br />--function <sample-app-function-name> ^<br />--invocation-type RequestResponse ^<br />--payload "{\"tenant\": \"<sample-tenant-name>\"}" ^<br />--cli-binary-format raw-in-base64-out response.json</pre>Perintah ini memanggil fungsi Lambda dan mengembalikan hasilnya dalam dokumen. `response.json` Pada banyak sistem berbasis Unix, Anda dapat mengubah `response.json` `/dev/stdout` untuk menampilkan hasil langsung ke shell Anda tanpa membuat file lain. Mengubah `<sample-tenant-name>` nilai dalam pemanggilan berikutnya dari fungsi Lambda ini mengubah lokasi dokumen JSON dan izin yang diberikan token. | Administrator cloud, Pengembang aplikasi | 
| Lihat bucket S3 untuk melihat objek yang dibuat. | Jelajahi bucket S3 (`<sample-app-bucket-name>`) yang Anda buat sebelumnya. Bucket ini berisi awalan objek S3 dengan nilai. `<sample-tenant-name>` Di bawah awalan itu, Anda akan menemukan dokumen JSON bernama dengan UUID. Memanggil aplikasi sampel beberapa kali menambahkan lebih banyak dokumen JSON. | Administrator awan | 
| Lihat log untuk aplikasi sampel di CloudWatch Log. | Lihat log yang terkait dengan fungsi Lambda yang dinamai `<sample-app-function-name>` di CloudWatch Log. Untuk petunjuk, lihat [Mengirim log fungsi Lambda ke CloudWatch Log dalam dokumentasi](https://docs.aws.amazon.com/lambda/latest/dg/monitoring-cloudwatchlogs.html) Lambda. Anda dapat melihat kebijakan cakupan penyewa yang dihasilkan oleh TVM di log ini. Kebijakan cakupan penyewa ini memberikan izin untuk aplikasi sampel ke Amazon S3,, dan **PutObject**GetObject**DeleteObject**ListBucket******** APIs, tetapi hanya untuk awalan objek yang terkait dengannya. `<sample-tenant-name>` Dalam pemanggilan aplikasi sampel berikutnya, jika Anda mengubah`<sample-tenant-name>`, TVM memperbarui kebijakan cakupan agar sesuai dengan penyewa yang disediakan dalam muatan pemanggilan. Kebijakan yang dihasilkan secara dinamis ini menunjukkan bagaimana akses cakupan penyewa dapat dipertahankan dengan TVM di aplikasi SaaS. Fungsionalitas TVM disediakan dalam lapisan Lambda sehingga dapat dilampirkan ke fungsi Lambda lain yang digunakan oleh aplikasi tanpa harus mereplikasi kode.Untuk ilustrasi kebijakan yang dihasilkan secara dinamis, lihat bagian [Informasi tambahan](#implement-saas-tenant-isolation-for-amazon-s3-by-using-an-aws-lambda-token-vending-machine-additional). | Administrator awan | 

## Sumber daya terkait
<a name="implement-saas-tenant-isolation-for-amazon-s3-by-using-an-aws-lambda-token-vending-machine-resources"></a>
+ [Mengisolasi Penyewa dengan Kebijakan IAM yang Dihasilkan Secara Dinamis](https://aws.amazon.com/blogs/apn/isolating-saas-tenants-with-dynamically-generated-iam-policies/) (posting blog)
+ [Menerapkan Kebijakan Isolasi yang Dihasilkan Secara Dinamis di Lingkungan SaaS](https://aws.amazon.com/blogs/apn/applying-dynamically-generated-isolation-policies-in-saas-environments/) (posting blog)
+ [SaaS di AWS](https://aws.amazon.com/saas/)

## Informasi tambahan
<a name="implement-saas-tenant-isolation-for-amazon-s3-by-using-an-aws-lambda-token-vending-machine-additional"></a>

Log berikut menunjukkan kebijakan yang dihasilkan secara dinamis yang dihasilkan oleh kode TVM dalam pola ini. Dalam tangkapan layar ini, `<sample-app-bucket-name>` adalah `DOC-EXAMPLE-BUCKET` dan yang `<sample-tenant-name>` ada`test-tenant-1`. Kredensi STS yang dikembalikan oleh kebijakan cakupan ini tidak dapat melakukan tindakan apa pun pada objek di bucket S3 kecuali untuk objek yang terkait dengan awalan key objek. `test-tenant-1`

![\[Log menunjukkan kebijakan yang dihasilkan secara dinamis yang dihasilkan oleh kode TVM.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/97a34c8e-d04e-40b6-acbf-1baa176d22a9/images/d4776ebe-fb8f-41ac-b8c5-b4f97a821c8c.png)


## Lampiran
<a name="attachments-97a34c8e-d04e-40b6-acbf-1baa176d22a9"></a>

[Untuk mengakses konten tambahan yang terkait dengan dokumen ini, unzip file berikut: attachment.zip](samples/p-attach/97a34c8e-d04e-40b6-acbf-1baa176d22a9/attachments/attachment.zip)