Jednostavni CloudFormation template
Tags: aws, bosnian, cloud, infrastructureascode
Published: 2023-05-28 23:32:35




Objasnjenje yaml fajla i njegovih komponenata koji su koristeni za kreiranje S3 bucketa

NAPOMENA: Za pisanje template-a, koristi se YAML, a pored YAML postoji i JSON. Nacin koristenja YAML mozete pronaci na [tutorijalu](https://www.youtube.com/watch?v=0fbnyS_lHW4). Ova pravila se koriste i pri pisanju template-a za CloudFormation. 

    AWSTemplateFormatVersion: "2010-09-09"

    Description: Simple S3 bucket with ServerSideEncryption

    Resources: 
    S3Bucket:
        Type: AWS::S3::Bucket
        Properties:
            BucketEncryption:
                ServerSideEncryptionConfiguration:
                        - ServerSideEncryptionByDefault:
                            SSEAlgorithm: AES256


Na pocetku svako template-a mora da bude verzija formata template-a. Zadnja verzija koja se jos uvijek koristi je "2010-09-09". Ukoliko se to ne naglasi postoji mogucnost greske i nece se moci kreirati stack. 

------

**Description** ili **OPIS** templatea- tj. sta sa ovim template-om pravimo bucket, EC2 instancu itd..

    Description: Simple S3 bucket with ServerSideEncryption

------
U sljedecem redu imamo: 

    Resources: 
    S3Bucket:
        Type: AWS::S3::Bucket

**Resources** -> govori nam koji mi to resurs ili resurse kreiramo za nas stack. 

Listu resursa koje mozemo da kreiramo, mozemo pronaci na [AWS linku](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-template-resource-type-ref.html). Svaki glavni resurs moze da ima svoje properties, pravila (rules), policy koji se mogu kreirati unutar template-a, a kasnije i validirati koristeci alat unutar VStudia CloudFOrmation linter. 

----
**S3Bucket** -> naziv resursa koji se kreira, a nalazi se odmah ispod Resources, u istoj liniji sa Resources. To je vrlo bitno, jer YAML ima poseban nacin definisanja resursa,pravila za osobine (properties) za iste te resurse. 

Primjecuje se da u ovom slucaju S3Bucket, ima uvuceno ispod Type, pa je onda uvuceno Properties, pa ispod Properties uvuceno BucketEncryption.. To znaci da osobine bucketa su uvucene, jer se odnose na bucket, a osobina BucketEncryption je serverska enkripcija samog bucketa tj. za enkripciju podataka na bucketu AWS ce automatski da enkriptuje. 


    Type: AWS::S3::Bucket
        Properties:
            BucketEncryption:
                ServerSideEncryptionConfiguration:
                        - ServerSideEncryptionByDefault:
                            SSEAlgorithm: AES256

**SSE-S3 tj. Server Side Encryption** je najjednostavnija metoda enkripcije, koja je menadžovana i riješena od strane samog AWS provajdera. SSE-S3 enkripcija bazirana je na AES-256 enkripcijskom algoritmu, simetricni cifer. Zbog toga je naglasen algoritam u dodatnom opisu:

    ServerSideEncryptionConfiguration:
                        - ServerSideEncryptionByDefault:
                            SSEAlgorithm: AES256

**Kada se koristi SSE-S3 enkrpicija, ne mozemo da koristimo ove enkripcijske kljuceve manuelno kada hocemo ili da ih koristimo u neke druge svrhe jer ne mozemo im pristupiti.** 
Kljuc je enkriptovan sam od sebe sa master kljucem koji se redovno rotira, a AWS se o tome brine. 

AWS svojim korisnicima nudi SERVER SIDE ENKRIPCIJU, ali i KLIJENT SIDE ENKRIPCIJU tj. da klijent sam enkriptuje svoje podatke koristeci servis Key Management Service (KMS). U tom slucaju korisnik sam sebi postavlja pitanje: 

  -Da li podaci moraju da budu enkriptovani prije nego sto ih posaljemo na AWS? Onda je potrebno koristi KLIJENTSKU STRANU ENKRIPCIJE KORISTECI KEY MANAGEMENT SERVICE.

  -Ukoliko nisu potrebni podaci biti zasticeni prije nego sto se posalju na AWS, onda se koristi i AWS enkripciju. 

Također postoji i mogucnost hardverski sigurnosni modula koji pohranjuju korisnikove enkripcione kljuceve? Onda mozete koristi CloudHSM servis. Vise o CLoudHSM na [linku](https://docs.aws.amazon.com/crypto/latest/userguide/awscryp-choose-hsm.html)


![encryption-layers](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ysyttj7ixqwfsn4tmui0.png)
----
Nakon sto se uradi upload ovog template-a koristeci CloudFormation, dobijemo rezultat automatski kreiranog S3 bucketa. 


![s3-template](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vzwawa5qad77apj4mxf3.png)


----

Ukoliko bi ovaj proces radili preko AWS Console, koristili bi button "Create Bucket", a zatim bi nam se pojavile opcije da unesemo ime po svom izboru i da izaberemo enkripciju bucketa. 

**Kreiranje bucketa**

![s3-bucket-conosle1](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/f28w2kbgwa8qs3xuzf47.png)

**Deafultna enkripcija SSE-S3**

Opcija SSE-S3 je defaultna opcija pri kreiranju S3 Bucketa, ali kada pravimo template, mozemo to da definisemo.

![s3-console-default-encyprtion-opcija](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8zsrrnowpbyigmm73cxj.png)