Analogi mudah memahami konsep IAM Roles dan Policy di AWS
Di Terraform saya membuat modul terpisah untuk pembuatan IAM Roles untuk S3, agar s3 dapat diakses oleh EC2 dan berikut adalah script untuk iam.tf nya
# IAM Role for EC2
resource "aws_iam_role" "ec2_cloudwatch_role" {
name = "EC2CloudWatchRole"
assume_role_policy = jsonencode({
Version = "2012-10-17",
Statement = [{
Effect = "Allow",
Principal = {
Service = "ec2.amazonaws.com"
},
Action = "sts:AssumeRole"
}]
})
}
# Data: AWS managed policy for CloudWatch agent
data "aws_iam_policy" "cloudwatch_agent" {
arn = "arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy"
}
# Attach CloudWatchAgent policy to the role
resource "aws_iam_role_policy_attachment" "attach_cloudwatch_policy" {
role = aws_iam_role.ec2_cloudwatch_role.name
policy_arn = data.aws_iam_policy.cloudwatch_agent.arn
}
resource "aws_iam_role_policy" "ec2_s3_access_policy" {
name = "EC2S3AccessPolicy"
role = aws_iam_role.ec2_cloudwatch_role.id
policy = jsonencode({
Version = "2012-10-17",
Statement = [
{
Effect = "Allow",
Action = "s3:ListBucket",
Resource = aws_s3_bucket.app_bucket.arn
},
{
Effect = "Allow",
Action = [
"s3:GetObject",
"s3:PutObject",
"s3:DeleteObject"
],
Resource = "${aws_s3_bucket.app_bucket.arn}/*"
}
]
})
}
resource "aws_iam_instance_profile" "ec2_instance_profile" {
name = "EC2InstanceProfile"
role = aws_iam_role.ec2_cloudwatch_role.name
}
Β agar lebih mudah memahami konsep IAM Role, Policy, dan Instance Profile dalam konteks Terraform dan AWS kita gunakan analogi dunia nyata
π Analogi: Perusahaan + Karyawan + Gedung + Akses
Bayangkan kamu punya sebuah perusahaan (AWS) yang terdiri dari:
-
π Gedung S3: Tempat penyimpanan data seperti dokumen, foto, dll
-
π Ruang CloudWatch: Tempat memantau CCTV dan suhu ruangan
-
π¨βπ» Karyawan EC2: Mesin yang bekerja, misalnya mengakses file, mengupload data, atau kirim laporan ke monitoring
Sekarang, mari kita cocokkan bagian-bagiannya:
π§© Bagian-bagian IAM dan Terraform = Analogi
Konsep Terraform / AWS | Analogi Dunia Nyata |
---|---|
aws_instance (EC2) |
Karyawan |
aws_iam_role |
ID Card (Kartu Akses) β menyatakan siapa kamu dan peranmu |
aws_iam_role_policy |
Hak Akses tertulis di kartu (bisa akses ruang A, B, atau C) |
aws_iam_policy_attachment |
Menempelkan akses standar (misal: akses ke ruang monitoring bagi semua teknisi) |
aws_iam_instance_profile |
Tempat menaruh kartu ID agar bisa dibaca oleh sistem saat karyawan masuk gedung |
assume_role_policy |
Aturan siapa yang boleh memakai kartu ini (hanya karyawan EC2, bukan orang luar) |
aws_s3_bucket |
Gedung penyimpanan (S3 Bucket) |
cloudwatch_agent_policy |
Akses untuk karyawan yang bertugas memonitor CCTV dan suhu (CloudWatch) |
π¦ Contoh Kasus: EC2 Butuh Akses ke S3 dan CloudWatch
Tanpa Role:
-
EC2 seperti karyawan tanpa kartu akses β dia tidak bisa masuk ke ruang penyimpanan (S3) atau monitoring (CloudWatch)
Dengan Role + Policy:
-
Kamu buat kartu akses khusus (IAM Role), lalu
-
Tempelkan hak akses (policy: bisa buka pintu S3 dan CloudWatch),
-
Berikan kartu itu ke karyawan (EC2) lewat
instance_profile
π Apa yang dilakukan Terraform?
Saat kamu menjalankan terraform apply
, kamu seperti:
-
Mendaftarkan gedung dan ruang (S3, CloudWatch)
-
Membuat ID Card dan tempelkan hak akses (IAM Role + Policy)
-
Memberikan kartu itu ke karyawan (EC2 via Instance Profile)
-
Semua berjalan otomatis dan terhubung
Kalau kamu membagi ke file iam.tf
, s3.tf
, dan ec2.tf
, itu seperti:
-
Menaruh dokumen gedung, dokumen karyawan, dan dokumen izin akses ke map terpisah β tapi semuanya tetap satu proyek perusahaan.
β Kesimpulan
IAM Role itu seperti kartu akses yang perlu izin tertulis (policy), dan harus diberikan ke EC2 (via instance profile) agar EC2 bisa masuk ke gedung (akses S3) atau ruang monitoring (CloudWatch).
Kalau kamu sudah paham analogi ini, kamu akan lebih mudah memahami seluruh flow IAM di AWS.
Kalau kamu mau, saya bisa bantu gambar diagram alurnya juga. Mau?