

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

# Contoh kebijakan untuk ACLs
<a name="example-bucket-policies-condition-keys"></a>

Anda dapat menggunakan kunci kondisi dalam kebijakan bucket untuk mengontrol akses ke Amazon S3.

**Topics**
+ [Pemberian s3: PutObject izin dengan syarat yang mengharuskan pemilik bucket untuk mendapatkan kontrol penuh](#grant-putobject-conditionally-1)
+ [Pemberian s3: PutObject izin dengan kondisi di header x-amz-acl](#example-acl-header)

## Pemberian s3: PutObject izin dengan syarat yang mengharuskan pemilik bucket untuk mendapatkan kontrol penuh
<a name="grant-putobject-conditionally-1"></a>

Operasi [PUT Objek](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPUT.html) memungkinkan header spesifik daftar kontrol akses (ACL) yang dapat Anda gunakan untuk memberikan izin berbasis ACL. Dengan menggunakan kunci ini, pemilik bucket dapat menetapkan kondisi-kondisi untuk mengharuskan izin akses kustom ketika pengguna mengunggah objek. 

Seandainya ketika Akun A memiliki bucket, dan administrator akun ingin memberikan izin kepada Dave, pengguna di Akun B, untuk mengunggah objek. Secara bawaan, objek yang diunggah Dave dimiliki oleh Akun B, dan Akun A tidak memiliki izin pada objek tersebut. Karena pemilik bucket membayar tagihan, pemilik bucket menginginkan izin penuh pada objek yang diunggah oleh Dave. Administrator Akun A dapat melakukan hal ini dengan memberikan izin `s3:PutObject` kepada Dave, dengan kondisi bahwa permintaan tersebut mencakup header spesifik ACL yang memberikan izin penuh secara jelas atau menggunakan ACL terekam. Untuk informasi lebih lanjut, lihat [PUT Objek](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPUT.html).

### Membutuhkan x-amz-full-control header
<a name="require-x-amz-full-control"></a>

Anda dapat mengharuskan header `x-amz-full-control` pada permintaan dengan izin kontrol penuh kepada pemilik bucket. Kebijakan bucket berikut ini memberikan izin `s3:PutObject` bagi pengguna Dave dengan syarat yang menggunakan kunci syarat `s3:x-amz-grant-full-control`, yang mengharuskan permintaan untuk menyertakan header `x-amz-full-control`.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "statement1",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:user/Dave"
            },
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::awsexamplebucket1/*",
            "Condition": {
                "StringEquals": {
                    "s3:x-amz-grant-full-control": "id=AccountA-CanonicalUserID"
                }
            }
        }
    ]
}
```

------

**catatan**  
Contoh ini adalah tentang izin lintas akun. Namun, jika Dave (yang mendapatkan izin) milik pemilik Akun AWS ember, izin bersyarat ini tidak diperlukan. Hal ini karena akun induk yang merupakan pemilik Dave memiliki objek yang diunggah pengguna.

**Menambahkan penolakan eksplisit**  
Kebijakan bucket sebelumnya memberikan izin bersyarat kepada pengguna Dave yang ada di Akun B. Meskipun kebijakan ini berlaku, Dave mungkin mendapatkan izin yang sama tanpa persyaratan apa pun melalui kebijakan lain. Misalnya, Dave dapat menjadi bagian dari sebuah kelompok, dan Anda memberikan kepada kelompok tersebut izin `s3:PutObject` tanpa syarat apa pun. Untuk menghindari celah izin seperti itu, Anda dapat membuat kebijakan akses yang lebih ketat dengan menambahkan penolakan secara eksplisit. Dalam contoh ini, Anda secara jelas menolak izin pengunggahan pengguna Dave jika dia tidak menyertakan header yang diperlukan dalam permintaan yang memberikan izin penuh kepada pemilik bucket. Penolakan eksplisit selalu menggantikan izin lain yang diberikan. Berikut ini adalah contoh kebijakan akses yang direvisi dengan ditambahkan penolakan eksplisit.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "statement1",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:user/AccountBadmin"
            },
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::awsexamplebucket1/*",
            "Condition": {
                "StringEquals": {
                    "s3:x-amz-grant-full-control": "id=AccountA-CanonicalUserID"
                }
            }
        },
        {
            "Sid": "statement2",
            "Effect": "Deny",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:user/AccountBadmin"
            },
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::awsexamplebucket1/*",
            "Condition": {
                "StringNotEquals": {
                    "s3:x-amz-grant-full-control": "id=AccountA-CanonicalUserID"
                }
            }
        }
    ]
}
```

------

**Uji kebijakan dengan AWS CLI**  
Jika Anda memiliki dua Akun AWS, Anda dapat menguji kebijakan menggunakan AWS Command Line Interface (AWS CLI). Anda melampirkan kebijakan dan menggunakan kredensi Dave untuk menguji izin menggunakan perintah berikut. AWS CLI `put-object` Anda memberikan kredensial Dave dengan menambahkan parameter `--profile`. Anda memberikan izin kontrol penuh kepada pemilik bucket dengan menambahkan parameter `--grant-full-control`. *Untuk informasi selengkapnya tentang pengaturan dan penggunaan AWS CLI, lihat [Mengembangkan dengan Amazon S3 menggunakan AWS CLI di Referensi API](https://docs.aws.amazon.com/AmazonS3/latest/API/setup-aws-cli.html) Amazon S3.* 

```
aws s3api put-object --bucket examplebucket --key HappyFace.jpg --body c:\HappyFace.jpg --grant-full-control id="AccountA-CanonicalUserID" --profile AccountBUserProfile
```

### Membutuhkan x-amz-acl header
<a name="require-x-amz-acl-header"></a>

Anda dapat mengharuskan header `x-amz-acl` dengan ACL terekam yang memberikan izin kontrol penuh kepada pemilik bucket. Untuk mengharuskan header `x-amz-acl` pada permintaan, Anda dapat mengganti pasangan nilai kunci dalam pemblokiran `Condition` dan tentukan kunci syarat `s3:x-amz-acl`, sebagaimana yang ditunjukkan pada contoh berikut.

```
"Condition": {
    "StringEquals": {
        "s3:x-amz-acl": "bucket-owner-full-control"
    }
}
```

Untuk menguji izin menggunakan AWS CLI, Anda menentukan `--acl` parameter. AWS CLI Kemudian menambahkan `x-amz-acl` header ketika mengirim permintaan.

```
aws s3api put-object --bucket examplebucket --key HappyFace.jpg --body c:\HappyFace.jpg --acl "bucket-owner-full-control" --profile AccountBadmin
```

## Pemberian s3: PutObject izin dengan kondisi di header x-amz-acl
<a name="example-acl-header"></a>

Kebijakan bucket berikut memberikan `s3:PutObject` izin untuk dua orang Akun AWS jika permintaan menyertakan `x-amz-acl` header yang membuat objek dapat dibaca secara publik. Pemblokiran `Condition` menggunakan kondisi `StringEquals` dan diberi pasangan nilai kunci, `"s3:x-amz-acl":["public-read"]`, untuk evaluasi. Dalam pasangan nilai kunci, `s3:x-amz-acl` adalah kunci spesifik–Amazon S3, sebagaimana yang ditunjukkan dengan prefiks `s3:`. 

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AddCannedAcl",
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::111122223333:root",
                    "arn:aws:iam::111122223333:root"
                ]
            },
            "Action": "s3:PutObject",
            "Resource": [
                "arn:aws:s3:::awsexamplebucket1/*"
            ],
            "Condition": {
                "StringEquals": {
                    "s3:x-amz-acl": [
                        "public-read"
                    ]
                }
            }
        }
    ]
}
```

------

**penting**  
Tidak semua kondisi masuk akal untuk semua tindakan. Misalnya, memasukkan kondisi `s3:LocationConstraint` dalam kebijakan yang memberikan izin `s3:CreateBucket` Amazon S3 adalah hal yang masuk akal. Namun, tidak masuk akal untuk memasukkan syarat ini pada kebijakan yang memberikan izin `s3:GetObject`. Amazon S3 dapat menguji jenis kesalahan semantik seperti ini yang melibatkan syarat spesifik Amazon S3. Namun, jika Anda membuat kebijakan untuk pengguna IAM dan Anda menyertakan kondisi Amazon S3 yang tidak valid secara semantis, tidak akan ada kesalahan yang dilaporkan karena IAM tidak dapat memvalidasi syarat Amazon S3. 