Menerbitkan Public Certificate di AWS Certificate Manager

tl;dr Cara menerbitkan/issue public certificate di AWS Certificate Manager menggunakan Terraform

Public SSL/TLS certificate, terkadang perlu kita gunakan sewaktu akan menjalankan service khususnya di Amazon Web Services (AWS). Terutama ketika akan membutuhkan komunikasi yang secure (aman) dan untuk memverifikasi identitas dari sebuah website.

AWS menyediakan sebuah service untuk dapat menerbitkan/issue public certificate. Service tersebut bernama AWS Certificate Manager (ACM). Dan certificate di ACM ini dapat diintegrasikan dengan beberapa service yang memerlukan SSL/TLS certificate. Contoh service yang dapat menggunakan certificate yang diterbitkan oleh ACM adalah Amazon Elastic Load Balancing (ELB). Selain ELB, masih ada beberapa service lain yang dapat diintegrasikan dengan ACM, untuk dokumentasi yang lebih detail terkait AWS Certificate Manager (ACM), dapat melihat dokumen berikut.

Pada artikel kali ini saya akan mencoba menjelaskan cara menerbitkan/issue public certificate di ACM dengan menggunakan metode IaC. IaC yang saya gunakan adalah Terraform. Saya akan menerbitkan sebuah wildcard certificate yang nantinya akan digunakan atau di-associate ke sebuah Application Load Balancer (ALB). Terraform yang saya gunakan adalah Terraform Cloud. Jika digambarkan, topologi di artikel ini sebagai berikut:

image

Konfigurasi

Pada artikel ini, struktur file yang digunakan oleh terraform code sebagai berikut:

acm/
├─ acm-apse1/
│  ├─ acm.tf
│  ├─ main.tf
│  ├─ variables.tf
  1. Sebagai langkah awal, saya mulai dengan membuat satu file dengan nama main.tf. Di file ini saya akan mendeklarasikan konfigurasi terraform yang akan mengacu ke terraform cloud (app.terraform.io) sebagai backend. Dan mereferensikan nama organisasi dan workspace yang digunakan. Kemudian saya juga deklarasikan terraform provider yang digunakan yaitu hashisorp/aws dengan versi terkait. Di akhir saya deklarasikan region aws yang digunakan, mengacu ke variable aws_region yang ada di file variable.tf yang berikutnya akan saya jelaskan.

image

# Setup terraform cloud and workspace
terraform {
  backend "remote" {
    hostname     = "app.terraform.io"
    organization = "lanandra"

    workspaces {
      name = "acm-ap-southeast-1"
    }
  }
}

# Setup terraform providers
terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 3.74.0"
    }
  }

  required_version = ">= 1.1.5"
}

# Setup AWS provider
provider "aws" {
  region = var.aws_region
}
  1. Langkah berikutnya yaitu dengan membuat variable di file variables.tf. Di file ini saya deklarasikan variable aws_region. Variable aws_region digunakan untuk menentukan default AWS region yang digunakan yaitu ap-southeast-1.

image

# Set variables
variable "aws_region" {
  type        = string
  description = "AWS Region"
  default     = "ap-southeast-1"
}
  1. Selanjutnya saya akan membahas file acm.tf. Di file ini, saya mendeklarasikan konfigurasi ACM. Saya membuat sebuah public certificate dengan nama domain *.ludesdeveloper.com (wildcard) dan metode validasi adalah DNS. Saya juga tambahkan beberapa key tags di certificate tersebut.

image

resource "aws_acm_certificate" "wildcard_ludesdeveloper" {
  domain_name       = "*.ludesdeveloper.com"
  validation_method = "DNS"

  tags = {
    Name        = "Wildcard ludesdeveloper"
    Environment = "Production"
    Owner       = "Luthfi"
  }

  lifecycle {
    create_before_destroy = true
  }
}
  1. Berikutnya adalah melakukan commit dan push terraform code ke repository. Dan lakukan terraform plan dan terraform apply di Terraform Cloud workspace agar infrastructure dapat dibuat/provisioned. Untuk bagian ini hanya saya tampilkan simulasinya saja. Jika ingin melihat lebih detail bagaimana proses provisioning resource AWS via Terraform Cloud, silahkan lihat blogpost saya berikut ini.

image

  1. Setelah provision resource di Terraform Cloud selesai dan berhasil, hal yang dapat kita lakukan adalah verifikasi resource via AWS Web Console. Saya mulai verifikasi certificate dengan cara masuk ke halaman service Certificate Manager. Masuk ke menu list certificates, pastikan sudah ada wildcard certificate *.ludesdeveloper.com.

image

  1. Klik certificate ID wildcard certificate tersebut. Di halaman certificate details ini, pastikan status certificate sudah berhasil ter-issued. Dan karena certificate ini menggunakan DNS validation, pastikan juga sudah sukses. Secara konfigurasi terraform juga sudah membantu memanggil API membuatkan sebuah CNAME dan value-nya untuk validation di background.

image

  1. Saya juga sudah membuat sebuah Application Load Balancer (ALB) beserta listener rule dan target group yang digunakan. Namun hal detail terkait konfigurasi tersebut tidak saya jelaskan lebih detail di artikel ini. Pada poin ini saya hanya ingin menjelaskan di ALB dengan nama staging-alb, saya sudah associate wildcard certificate tersebut di HTTPS:443 listener.

image

  1. Jika dilihat di resource associated wildcard certificate tersebut juga sudah ter-associate dengan arn staging-alb.

image

  1. Di dalam ALB tersebut, saya buat sebuah rule untuk memanggil sebuah nama domain (lanandra-ip-reader.ludesdeveloper.com) agar diteruskan ke target group yang memanggil IP EC2 tempat service tersebut di host. Saya coba panggil nama domain https://lanandra-ip-reader.ludesdeveloper.com tersebut di web browser. Kemudian saya cek certificate yang digunakan. Jika dilihat, certificate yang digunakan adalah wildcard certificate yang sudah di sign oleh Amazon.

image

Kesimpulan

Akhirnya kita sampai di penghujung artikel ini. Pada artikel ini kita sudah membahas cara menerbitkan/issue public certificate di AWS Certificate Manager (ACM) menggunakan Terraform. Kemudian dilanjut juga simulasi cara implementasi penggunaan certificate tersebut di salah satu service AWS yaitu Application Load Balancer (ALB.)

Silahkan kunjungi GitHub repo saya untuk melihat source code yang saya gunakan pada artikel ini.

Sekian artikel kali ini. Jika ada saran, kritik, atau masukan silahkan tinggalkan di kolom komentar.

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout /  Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout /  Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout /  Ubah )

Connecting to %s

Situs yang Didukung WordPress.com.

Atas ↑

%d blogger menyukai ini: