

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

# Mengonfigurasi izin hak istimewa terkecil untuk sumber daya yang disediakan melalui CloudFormation
<a name="permissions-cloudformation-provisioned-resources"></a>

AWS CloudFormation memungkinkan Anda untuk menyediakan berbagai jenis AWS sumber daya. Sumber daya yang disediakan memerlukan set izin mereka sendiri untuk berfungsi sebagaimana dimaksud dan untuk mengonfigurasi siapa yang memiliki akses ke sumber daya tersebut. Bab sebelumnya meninjau opsi untuk mengonfigurasi izin untuk mengakses dan menggunakan layanan. CloudFormation Bab ini mengulas bagaimana Anda dapat menerapkan prinsip hak istimewa terkecil pada sumber daya yang disediakan. CloudFormation

Dalam panduan ini, praktis tidak mungkin untuk meninjau rekomendasi keamanan dan praktik terbaik untuk setiap jenis AWS sumber daya yang dapat disediakan. CloudFormation Jika Anda memiliki pertanyaan terkait dengan layanan tertentu, kami sarankan Anda meninjau dokumentasi untuk layanan tersebut. Sebagian besar Layanan AWS dokumen berisi bagian keamanan dan informasi tentang izin yang diperlukan untuk menggunakan layanan tersebut. Untuk daftar lengkap Layanan AWS dokumentasi, lihat [AWS Dokumentasi](https://docs.aws.amazon.com/index.html).

Berikut ini adalah langkah-langkah agnostik layanan tingkat tinggi yang dapat Anda ambil untuk membuat CloudFormation templat yang mematuhi prinsip hak istimewa paling rendah:

1. Siapkan daftar sumber daya yang Anda rencanakan untuk disediakan dengan menggunakan CloudFormation.

1. Lihat [AWS Dokumentasi](https://docs.aws.amazon.com/index.html) untuk layanan terkait dan tinjau bagian tentang keamanan dan manajemen akses. Ini membantu Anda memahami persyaratan dan rekomendasi khusus layanan.

1. Gunakan informasi yang Anda kumpulkan di langkah sebelumnya untuk merancang CloudFormation templat dan kebijakan terkait yang hanya mengizinkan izin yang diperlukan dan menolak semua yang lain.

Selanjutnya, panduan ini mengulas contoh bagaimana Anda dapat menerapkan prinsip hak istimewa terkecil dalam CloudFormation templat, menggunakan kasus penggunaan dunia nyata.

## Contoh: Bucket Amazon S3 untuk menyimpan artefak pipa
<a name="example-s3-bucket"></a>

Contoh ini membuat bucket [Amazon Simple Storage Service (Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)) yang digunakan untuk [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html)menyimpan artefak proyek. [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)menggunakan artefak yang disimpan ini. Anda dapat mengizinkan CodeBuild dan CodePipeline mengakses bucket S3 ini melalui peran layanan, dan Anda mengontrol akses tersebut dengan menggunakan kebijakan bucket Amazon [S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-policies.html). Berikut ini adalah nama sumber daya yang digunakan dalam contoh ini:
+ `Deployfiles_build`adalah nama CodeBuild proyek.
+ `Deployment-Pipeline`adalah nama pipa di CodePipeline.

*Tentukan bucket Amazon S3*

Pertama, Anda menentukan bucket S3 dalam CloudFormation template, yang merupakan file teks berformat YAML.

```
amzn-s3-demo-bucket:
  Type: AWS::S3::Bucket
  Properties:
    PublicAccessBlockConfiguration:
        BlockPublicAcls: true
        BlockPublicPolicy: true
        IgnorePublicAcls: true
        RestrictPublicBuckets: true
```

*Tentukan kebijakan bucket Amazon S3*

Selanjutnya, di CloudFormation template, Anda membuat kebijakan bucket yang hanya mengizinkan `Deployfiles_build` proyek dan `Deployment-Pipeline` pipeline untuk mengakses bucket.

```
MyBucketPolicy:
  Type: AWS::S3::BucketPolicy
  Properties: 
    Bucket: !Ref amzn-s3-demo-bucket
    PolicyDocument:
      Version: "2012-10-17"
      Statement:
      - Sid: "S3ArtifactRepoAccess"
        Effect: Allow
        Action: 
          - ‘s3:GetObject'
          - ‘s3:GetObjectVersion'
          - ‘s3:PutObject'
          - ‘s3:GetBucketVersioning'
        Resource: 
          - !Sub ‘arn:aws:s3:::${amzn-s3-demo-bucket}'
          - !Sub ‘arn:aws:s3:::${amzn-s3-demo-bucket}/*'
        Principal:
          Service:
            - codebuild.amazonaws.com
            - codepipeline.amazonaws.com
        Condition:
          StringLike:
            ‘aws:SourceArn':
              - !Sub ‘arn:aws:codebuild:${AWS::Region}:${AWS::AccountId}:project/Deployfiles_build'
              - !Sub ‘arn:aws:codepipeline:${AWS::Region}:${AWS::AccountId}:Deployment-Pipeline'
              - !Sub ‘arn:aws:codepipeline:${AWS::Region}:${AWS::AccountId}:Deployment-Pipeline/*'
```

Perhatikan hal berikut tentang kebijakan bucket ini:
+ `Resource`Elemen ini mencantumkan dua jenis sumber daya yang menggunakan format Amazon Resource Name (ARN) berikut:
  + Format ARN dari objek S3 adalah. `arn:${{<Partition>}}:s3:::${{<BucketName>}}/${{<ObjectName>}}`
  + Format ARN dari bucket S3 adalah. `arn:${{<Partition>}}:s3:::${{<BucketName>}}`

  `s3:GetObject`,`s3:GetObjectVersion`, dan `s3:PutObject` memerlukan tipe sumber daya objek S3, dan `s3:GetBucketVersioning ` memerlukan tipe sumber daya bucket S3. Untuk informasi selengkapnya tentang jenis sumber daya yang diperlukan untuk setiap tindakan, lihat [Tindakan, sumber daya, dan kunci kondisi untuk Amazon S3](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazons3.html).
+ `Principal`Elemen mencantumkan entitas yang diizinkan untuk melakukan tindakan Amazon S3 yang ditentukan dalam pernyataan. Dalam hal ini, hanya CodeBuild dan CodePipeline diizinkan untuk melakukan tindakan ini.
+ `Condition`Elemen selanjutnya membatasi akses ke bucket S3 sehingga hanya `Deployfiles_build` CodeBuild proyek, `Deployment-Pipeline` CodePipeline pipeline, dan tindakan pipeline yang dapat mengakses bucket.

*Buat peran layanan*

Meskipun kebijakan bucket mengontrol akses ke bucket, kebijakan bucket tidak memberikan izin CodeBuild dan CodePipeline mengaksesnya. Untuk memberikan akses, Anda perlu membuat peran layanan untuk setiap layanan dan menambahkan pernyataan berikut ke masing-masing layanan. Layanan berperan CodeBuild dan CodePipeline memungkinkan layanan mengakses bucket S3 dan objeknya.

```
Sid: "ViewAccessToS3ArtifactRepo"
Effect: Allow
Action: 
  - ‘s3:GetObject'
  - ‘s3:GetObjectVersion'
  - ‘s3:PutObject'
  - ‘s3:GetBucketVersioning'
Resource: 
  - !Sub ‘arn:aws:s3:::${BuildArtifactsBucket}'
  - !Sub ‘arn:aws:s3:::${BuildArtifactsBucket}/*'
```