Claude Code × AWS IAM Panduan Lengkap | Buat Kebijakan Hak Akses Minimum Secara Otomatis
Optimalkan desain kebijakan AWS IAM dengan Claude Code. Pembuatan kebijakan least-privilege otomatis, tinjauan keamanan kebijakan yang ada, dan implementasi CDK—dengan contoh kode nyata.
Desain kebijakan IAM adalah pekerjaan yang “tidak mencolok tapi bisa fatal kalau salah”. Kebijakan dengan penyalahgunaan wildcard (*) menjadi sarang insiden keamanan. Namun menulis kebijakan least-privilege dari awal membutuhkan waktu.
Saya mengoperasikan arsitektur serverless yang menggabungkan Lambda, S3, DynamoDB, dan CloudWatch di lingkungan produksi. Dengan mendelegasikan desain dan tinjauan kebijakan IAM ke Claude Code, saya berhasil mengurangi waktu kerja sekitar 70%. Artikel ini menjelaskan langkah-langkah praktisnya.
Dasar IAM dalam 3 Menit
Struktur Kebijakan
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["s3:GetObject", "s3:PutObject"],
"Resource": "arn:aws:s3:::my-bucket/*",
"Condition": {
"StringEquals": {
"s3:prefix": ["uploads/"]
}
}
}
]
}
- Effect: Allow (Izinkan) atau Deny (Tolak)
- Action: Tindakan API yang diizinkan/ditolak
- Resource: ARN dari resource target (lebih spesifik = lebih aman)
- Condition: Kondisi tambahan (pembatasan IP, MFA diperlukan, dll.)
Prinsip Hak Akses Minimum
“Izinkan hanya operasi yang diperlukan, hanya pada resource yang diperlukan” adalah aturan emas IAM.
❌ Berbahaya: Penyalahgunaan wildcard
Action: "*"
Resource: "*"
✅ Aman: Tentukan secara konkret
Action: ["s3:GetObject", "s3:PutObject"]
Resource: "arn:aws:s3:::my-uploads-bucket/user-files/*"
Step 1: Jelaskan Kasus Penggunaan dan Buat Kebijakan Secara Otomatis
Membuat Kebijakan untuk Lambda
claude -p "
Buat kebijakan IAM minimum yang diperlukan dalam JSON untuk fungsi Lambda berikut.
[Pemrosesan Lambda]
- Membaca gambar dari bucket S3 'user-uploads-prod'
- Menyimpan gambar yang telah diproses ke 'user-thumbnails-prod'
- Mencatat hasil ke tabel DynamoDB 'image-metadata'
- Memberitahu topik SNS 'alert-topic' saat terjadi error
- Menulis log ke CloudWatch Logs
[Batasan]
- Operasi penghapusan tidak diperlukan
- Gunakan ID akun 123456789012, region ap-northeast-1 untuk ARN resource
- Tidak ada pembatasan IP melalui Condition (tidak diperlukan untuk Lambda)
"
Contoh yang dihasilkan:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "S3ReadSourceBucket",
"Effect": "Allow",
"Action": ["s3:GetObject"],
"Resource": "arn:aws:s3:::user-uploads-prod/*"
},
{
"Sid": "S3WriteThumbnailBucket",
"Effect": "Allow",
"Action": ["s3:PutObject"],
"Resource": "arn:aws:s3:::user-thumbnails-prod/*"
},
{
"Sid": "DynamoDBWriteMetadata",
"Effect": "Allow",
"Action": ["dynamodb:PutItem", "dynamodb:UpdateItem"],
"Resource": "arn:aws:dynamodb:ap-northeast-1:123456789012:table/image-metadata"
},
{
"Sid": "SNSPublishAlert",
"Effect": "Allow",
"Action": ["sns:Publish"],
"Resource": "arn:aws:sns:ap-northeast-1:123456789012:alert-topic"
},
{
"Sid": "CloudWatchLogs",
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "arn:aws:logs:ap-northeast-1:123456789012:log-group:/aws/lambda/*"
}
]
}
Step 2: Tinjauan Keamanan Kebijakan yang Ada
Minta Claude Code meninjau kebijakan yang ada untuk menemukan masalah.
claude -p "
Tinjau kebijakan IAM berikut dari sudut pandang keamanan.
Identifikasi masalah spesifik dan berikan saran remediasi yang konkret.
$(cat policy.json)
"
Masalah umum yang ditemukan Claude Code:
Masalah 1: Resource: "*" memberikan akses penuh ke S3
→ Tentukan bucket target dan prefix secara eksplisit
Masalah 2: s3:DeleteObject disertakan tetapi tidak diperlukan oleh proses
→ Hapus operasi penghapusan
Masalah 3: iam:PassRole diizinkan dengan resource wildcard
→ Batasi PassRole hanya pada ARN role tertentu (risiko privilege escalation)
Masalah 4: Aktivasi CloudTrail tidak dapat dikonfirmasi
→ Rekomendasikan mengaktifkan pencatatan operasi IAM
Step 3: Otomatisasi Desain Role
Desain Role yang Meliputi Beberapa Layanan
claude -p "
Rancang semua role IAM yang diperlukan untuk arsitektur berikut:
[Arsitektur]
- API Gateway → Lambda (autentikasi)
- Lambda → DynamoDB (baca/tulis data pengguna)
- Lambda → S3 (penyimpanan file)
- Lambda → SES (pengiriman email)
- CloudWatch Events → Lambda (pemrosesan batch)
- CodePipeline → S3, CodeBuild, Lambda (deployment)
[Format output]
- Nama dan tujuan setiap role
- Trust Policy
- Access Policy
- Output sebagai kode TypeScript AWS CDK
"
Implementasi CDK untuk Role
// lib/iam-stack.ts
import * as cdk from "aws-cdk-lib";
import * as iam from "aws-cdk-lib/aws-iam";
import * as lambda from "aws-cdk-lib/aws-lambda";
export class IamStack extends cdk.Stack {
constructor(scope: cdk.App, id: string, props?: cdk.StackProps) {
super(scope, id, props);
// Role eksekusi Lambda (hak akses minimum)
const lambdaRole = new iam.Role(this, "ApiLambdaRole", {
assumedBy: new iam.ServicePrincipal("lambda.amazonaws.com"),
roleName: "api-lambda-role",
description: "Role hak akses minimum untuk API Lambda",
});
// Izin baca/tulis DynamoDB (hanya tabel tertentu)
lambdaRole.addToPolicy(
new iam.PolicyStatement({
sid: "DynamoDBAccess",
effect: iam.Effect.ALLOW,
actions: [
"dynamodb:GetItem",
"dynamodb:PutItem",
"dynamodb:UpdateItem",
"dynamodb:Query",
],
resources: [
`arn:aws:dynamodb:${this.region}:${this.account}:table/users`,
`arn:aws:dynamodb:${this.region}:${this.account}:table/users/index/*`,
],
})
);
// Izin tulis S3 (hanya bucket dan prefix tertentu)
lambdaRole.addToPolicy(
new iam.PolicyStatement({
sid: "S3FileUpload",
effect: iam.Effect.ALLOW,
actions: ["s3:PutObject", "s3:GetObject"],
resources: [
`arn:aws:s3:::user-files-${this.account}/uploads/*`,
],
})
);
// Izin kirim email SES
lambdaRole.addToPolicy(
new iam.PolicyStatement({
sid: "SESSendEmail",
effect: iam.Effect.ALLOW,
actions: ["ses:SendEmail", "ses:SendRawEmail"],
resources: ["*"],
conditions: {
StringEquals: {
"ses:FromAddress": "[email protected]",
},
},
})
);
// Izin tulis ke CloudWatch Logs
lambdaRole.addManagedPolicy(
iam.ManagedPolicy.fromAwsManagedPolicyName(
"service-role/AWSLambdaBasicExecutionRole"
)
);
}
}
Step 4: Meninjau Hasil IAM Access Analyzer
Minta Claude Code meninjau output IAM Access Analyzer.
# Ambil hasil Access Analyzer
aws accessanalyzer list-findings --analyzer-arn arn:aws:access-analyzer:... \
--output json > analyzer-findings.json
claude -p "
Baca hasil IAM Access Analyzer berikut dan:
1. Klasifikasikan berdasarkan tingkat keparahan (HIGH/MEDIUM/LOW)
2. Identifikasi item yang memerlukan remediasi segera
3. Berikan langkah remediasi spesifik untuk setiap item
$(cat analyzer-findings.json)
"
Step 5: Desain SCP (Pagar Pembatas Seluruh Organisasi)
Saat menggunakan AWS Organizations, gunakan SCP (Service Control Policies) untuk menetapkan pagar pembatas untuk seluruh akun.
claude -p "
Rancang SCP untuk diterapkan pada akun AWS produksi.
Harus memenuhi persyaratan berikut:
1. Nonaktifkan semua region kecuali ap-northeast-1 (Tokyo) dan us-east-1 (Virginia)
2. Larang operasi API oleh akun root
3. Larang menonaktifkan atau menghapus CloudTrail
4. Larang menonaktifkan GuardDuty
5. Larang perubahan pada role IAM tertentu ('OrganizationAdminRole')
"
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DenyUnsupportedRegions",
"Effect": "Deny",
"Action": "*",
"Resource": "*",
"Condition": {
"StringNotEquals": {
"aws:RequestedRegion": ["ap-northeast-1", "us-east-1"]
},
"ArnNotLike": {
"aws:PrincipalARN": [
"arn:aws:iam::*:role/OrganizationAdminRole"
]
}
}
},
{
"Sid": "DenyCloudTrailModification",
"Effect": "Deny",
"Action": [
"cloudtrail:DeleteTrail",
"cloudtrail:StopLogging",
"cloudtrail:UpdateTrail"
],
"Resource": "*"
}
]
}
4 Jebakan Umum
1. iam:PassRole dengan hak berlebihan
// ❌ Berbahaya: role apa pun bisa dilewatkan
{
"Action": "iam:PassRole",
"Resource": "*"
}
// ✅ Aman: hanya role tertentu
{
"Action": "iam:PassRole",
"Resource": "arn:aws:iam::123456789:role/MyLambdaRole",
"Condition": {
"StringEquals": {
"iam:PassedToService": "lambda.amazonaws.com"
}
}
}
2. Penggunaan berlebihan AWS Managed Policies
Kebijakan terkelola seperti AmazonS3FullAccess memang praktis tapi mencakup jauh lebih banyak izin dari yang diperlukan. Jika Lambda hanya membaca dari S3, gunakan kebijakan kustom dengan hanya s3:GetObject.
3. Mencampur Inline Policy dan Custom Managed Policy
Inline policy tidak dapat digunakan ulang dan sulit dilacak. Standarkan ke managed policy dan kelola versinya.
4. Persyaratan MFA yang hilang melalui Conditions
Selalu wajibkan MFA saat beralih ke role administrator.
{
"Condition": {
"BoolIfExists": {
"aws:MultiFactorAuthPresent": "true"
}
}
}
Ringkasan
| Tugas | Kontribusi Claude Code |
|---|---|
| Pembuatan kebijakan | Menghasilkan kebijakan least-privilege hanya dari deskripsi |
| Tinjauan keamanan | Mengidentifikasi masalah dan menyarankan perbaikan untuk kebijakan yang ada |
| Desain role | Merancang struktur role untuk seluruh arsitektur |
| Implementasi CDK | Menghasilkan kode TypeScript IAM secara otomatis |
| Desain SCP | Menghasilkan kebijakan guardrail tingkat organisasi |
IAM bukan “atur sekali lalu lupakan”—tinjauan berkala sangat penting. Membiasakan Claude Code meninjau kebijakan yang ada setiap bulan adalah cara sederhana untuk terus mengurangi risiko keamanan.
Artikel Terkait
- Panduan Lengkap Praktik Terbaik Keamanan Claude Code
- Claude Code × AWS Lambda Panduan Lengkap
- Claude Code × AWS DynamoDB Panduan Lengkap
Referensi
Tingkatkan alur kerja Claude Code kamu
50 template prompt yang sudah teruji, siap copy-paste ke Claude Code sekarang juga.
PDF Gratis: Cheatsheet Claude Code dalam 5 Menit
Cukup masukkan emailmu dan kami akan langsung mengirim cheatsheet PDF A4 satu halaman.
Kami menjaga data pribadimu dengan aman dan tidak pernah mengirim spam.
Tentang Penulis
Masa
Engineer yang aktif menggunakan Claude Code. Mengelola claudecode-lab.com, media teknologi 10 bahasa dengan lebih dari 2.000 halaman.
Artikel Terkait
Claude Code × Amazon Bedrock Panduan Lengkap | Menjalankan Claude di Produksi dengan AWS
Panduan lengkap menggunakan Amazon Bedrock dengan Claude Code. Dari autentikasi IAM, streaming, integrasi Lambda, implementasi RAG, hingga optimasi biaya — berdasarkan pengalaman produksi nyata Masa.
Claude Code × AWS CodePipeline/CodeBuild Panduan Lengkap | Bangun Pipeline CI/CD Secara Otomatis
Bangun CI/CD secara otomatis dengan AWS CodePipeline & CodeBuild menggunakan Claude Code. Contoh kode nyata untuk desain pipeline, generasi buildspec.yml, otomatisasi pengujian, dan infrastruktur CDK.
Claude Code × AWS CloudWatch Panduan Lengkap | Analisis Log, Pengaturan Alarm & Otomatisasi Dashboard
Tingkatkan efisiensi AWS CloudWatch dengan Claude Code. Kode praktis untuk analisis pola log, konfigurasi alarm otomatis, dashboard metrik, dan investigasi insiden.