Manajemen Rahasia yang Aman dan Variabel Lingkungan
Hindari rahasia yang ditulis langsung dalam kode sumber dengan menggunakan pengelola rahasia (Vault, AWS Secrets Manager) dan injeksi variabel lingkungan saat runtime.
Manajemen Rahasia yang Aman dan Variabel Lingkungan adalah pelajaran Security+ Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Security+ Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Security+ Academy mencakup 4 pelajaran total.
Masalah Secret yang Ditulis Langsung dalam Kode
Secret yang ditulis langsung dalam kode — kunci API, kata sandi basis data, kunci privat TLS, dan token OAuth yang disematkan langsung dalam kode sumber — merupakan salah satu kerentanan keamanan yang paling umum dan dapat dicegah. Secret dalam kode sumber terekspos dalam riwayat version control (bahkan setelah dihapus), terlihat oleh semua pengembang yang memiliki akses ke repositori, dan sering bocor ketika repositori secara tidak sengaja dibuat publik. Alat seperti GitGuardian dan truffleHog terus-menerus memindai Secret yang bocor pada platform seperti GitHub.
# DANGEROUS: hardcoded secret in source code
# db_password = 'P@ssw0rd#2026'
# api_key = 'sk-live-abc123xyz789'
# aws_secret = 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY'
# These secrets are now:
# - In git history (even if later deleted)
# - Visible to all repo contributors
# - Potentially in CI/CD logs
# - Often leaked when repos go public accidentallyVariabel Environment: Lebih Baik, tetapi Belum Cukup
Variabel Environment menghapus Secret dari kode sumber dengan menyisipkannya saat runtime melalui OS host atau orkestrator container. Application membaca os.environ['DB_PASSWORD'], bukan nilai yang ditulis langsung dalam kode. Cara ini lebih baik daripada menulis Secret langsung dalam kode, tetapi variabel Environment memiliki kelemahan: variabel tersebut muncul dalam daftar proses, diwariskan ke proses anak, sering berakhir dalam dump kerusakan dan log debug, serta memerlukan Rotation manual. Variabel Environment sesuai untuk pengembangan, tetapi tidak cukup jika digunakan sendirian untuk pengelolaan Secret di production.
# Environment variable pattern:
# In .env file (NEVER commit to git):
# DB_PASSWORD=P@ssw0rd#2026
# API_KEY=sk-live-abc123xyz789
# In .gitignore:
# .env
# *.env
# .env.*
# In application code:
# db_password = os.environ.get('DB_PASSWORD')
# api_key = os.environ.get('API_KEY')
# Risk: env vars visible in 'ps aux' output,
# inherited by child processes, appear in /proc/<pid>/environSecrets Manager Khusus
Secrets manager adalah sistem yang dirancang khusus untuk menyimpan, melakukan Rotation, dan mengaudit akses ke Secret. Solusi terkemuka meliputi HashiCorp Vault (sumber terbuka dan enterprise), AWS Secrets Manager, Azure Key Vault, serta Google Cloud Secret Manager. Application melakukan autentikasi ke secrets manager saat runtime, mengambil Secret, lalu menggunakannya — tidak ada Secret yang pernah disimpan di disk atau dalam variabel Environment. Semua akses dicatat, sehingga memungkinkan audit mengenai siapa yang mengakses Secret tertentu dan kapan.
# HashiCorp Vault secret retrieval (conceptual):
# Application authenticates to Vault using:
# - AWS IAM role (in cloud environments)
# - Kubernetes service account token
# - AppRole credentials
# After authentication, retrieve secret:
# vault kv get -field=password secret/prod/database
# In application (Python SDK):
# client = hvac.Client(url='https://vault.company.com')
# client.auth.aws.iam_login(role='prod-app')
# secret = client.secrets.kv.read_secret('prod/database')
# db_password = secret['data']['password']Rotation Secret Otomatis
Salah satu keunggulan secrets manager dibandingkan variabel Environment adalah Rotation otomatis. AWS Secrets Manager dapat melakukan Rotation otomatis terhadap kata sandi basis data RDS sesuai jadwal (misalnya, setiap 30 hari) tanpa memerlukan penerapan ulang application. Secrets manager memperbarui kata sandi dalam basis data dan memperbarui Secret yang tersimpan secara bersamaan. Application yang mengambil Secret pada setiap koneksi akan otomatis menerima kredensial baru. Hal ini menghapus praktik umum penggunaan kata sandi akun layanan 'permanen' yang tidak pernah dirotasi.
# AWS Secrets Manager rotation configuration:
# Secret: prod/app-database-credentials
# Rotation: enabled
# Frequency: every 30 days
# Lambda function: SecretsManager-MyRDSRotation
# Rotation process:
# 1. Lambda creates new DB password
# 2. Updates secret in Secrets Manager
# 3. Updates password on RDS instance
# 4. Tests new credentials work
# 5. Deprecates old credentials
# Application: always calls GetSecretValue at runtime -> gets fresh valuePertahanan .gitignore
Garis pertahanan pertama terhadap secret yang ter-commit adalah file .gitignore yang dipelihara dengan baik dan mengecualikan semua file yang mungkin berisi secret. Namun, .gitignore hanya mencegah commit di masa mendatang — secret yang sudah ter-commit tetap berada dalam riwayat git. Jika secret tidak sengaja ter-commit, secret tersebut harus segera dianggap telah bocor: rotasikan secret, lalu bila perlu gunakan alat seperti git filter-repo untuk menulis ulang riwayat (wajib untuk kepatuhan, tetapi tidak cukup jika dilakukan sendirian karena secret tersebut mungkin sudah diekstrak).
# Recommended .gitignore entries for secret files:
# .env
# .env.*
# *.pem
# *.key
# *.p12
# *.pfx
# credentials.json
# service_account*.json
# secrets.yaml
# config/secrets.yml
# terraform.tfvars (may contain cloud credentials)
# .aws/credentials
# Pre-commit hook to scan for secrets before commit:
# pre-commit install
# hook: detect-secrets / gitleaks / truffleHogSecret pada Infrastructure as Code
File Infrastructure as Code (IaC) (Terraform, CloudFormation, manifes Kubernetes) sering berisi secret — string koneksi basis data, kunci API dalam deklarasi variabel lingkungan, dan sertifikat TLS. File-file ini sering di-commit ke kendali versi sehingga menimbulkan risiko terbukanya secret. Solusinya mencakup secret dinamis Vault (Vault menghasilkan kredensial berumur singkat khusus untuk setiap proses Terraform), Secret Kubernetes (disimpan di etcd dan harus dienkripsi saat tersimpan), serta external-secrets-operator yang menyinkronkan secret dari pengelola secret ke Kubernetes saat runtime.
Prinsip Hak Istimewa Minimum untuk Secret
Setiap aplikasi atau layanan seharusnya hanya mengakses secret yang benar-benar diperlukan — prinsip hak istimewa minimum yang diterapkan pada secret. Aplikasi web memerlukan kata sandi basis data, tetapi tidak memerlukan kunci privat CA. Tugas pelaporan memerlukan kredensial basis data hanya-baca, bukan akses tulis. Pengelola secret menegakkan hal ini melalui kebijakan akses yang menentukan identitas mana (peran IAM, akun layanan, AppRoles) yang dapat membaca secret mana, dengan seluruh akses dicatat untuk keperluan audit.
# Vault policy: web application can read DB password only
# policy name: web-app-policy
# path 'secret/prod/database' {
# capabilities = ['read']
# }
# path 'secret/prod/tls-certs/*' {
# capabilities = [] # DENY - app does not need TLS keys
# }
# This policy is assigned to the web app's AppRole.
# The reporting service gets a separate policy with
# only 'secret/prod/reporting-db-readonly' access.Secret Dinamis
Secret dinamis dibuat sesuai permintaan untuk peminta tertentu dan kedaluwarsa secara otomatis. Vault dapat menghasilkan kredensial basis data sementara yang berlaku selama 1 jam dan dikaitkan dengan layanan tertentu yang memintanya. Setelah kedaluwarsa, kredensial tersebut otomatis dicabut oleh basis data. Pendekatan ini berarti tidak ada kredensial statis berumur panjang yang dapat dicuri — bahkan jika penyerang menangkap kredensial dinamis, kredensial itu segera kedaluwarsa dan terikat pada identitas peminta dalam log audit.
# Vault dynamic secrets: temporary DB credentials
# Application calls Vault to get a DB credential:
# vault read database/creds/web-app-role
#
# Vault response:
# username: v-web-app-x7k2m-1234567890 (unique, temporary)
# password: A1b2C3d4E5f6G7h8 (randomly generated)
# lease_duration: 1h (auto-expires)
#
# After 1 hour, Vault instructs DB to revoke this user.
# No static password ever exists for the attacker to steal.Secret dalam Pipeline CI/CD
Pipeline CI/CD sering memerlukan secret — kredensial penyedia cloud untuk deployment, token registry Docker, dan kunci penandatanganan. Never simpan secret dalam skrip pipeline atau file konfigurasi. Sebagai gantinya, gunakan penyimpanan secret bawaan platform pipeline (GitHub Actions Secrets, GitLab CI Variables, Jenkins Credentials Store) atau ambil secret dari vault pusat saat runtime menggunakan identitas mesin. Tandai variabel secret sebagai tersamarkan dalam log untuk mencegah terbukanya secret secara tidak sengaja dalam keluaran build.
# GitHub Actions: using secrets in pipeline
# secrets.yml in GitHub Settings -> Secrets (encrypted storage)
# Secret: AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY
# In .github/workflows/deploy.yml:
# env:
# AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
# AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
# Best practice: use OIDC federation instead
# GitHub -> AWS trust relationship via OIDC token
# -> No static AWS keys needed at allMengaudit Akses Secret
Pengelola secret menyediakan log audit yang komprehensif untuk setiap peristiwa akses secret: identitas mana yang mengakses secret mana, dari IP mana, pada waktu kapan, dan apakah akses tersebut berhasil atau ditolak. Log ini sangat penting untuk kepatuhan (SOC 2, PCI-DSS) dan respons insiden. Saat sebuah kredensial diduga telah bocor, log audit menunjukkan sistem mana yang mengaksesnya dan kapan — sehingga memungkinkan identifikasi cepat terhadap sistem yang mungkin terdampak serta keputusan pengendalian.
Hook Pra-Commit untuk Mencegah Secret
Hook pra-commit adalah skrip yang berjalan otomatis sebelum setiap commit git diselesaikan, sehingga memungkinkan pendeteksian secret sebelum secret masuk ke riwayat kendali versi. Alat seperti detect-secrets (Yelp), GitLeaks, dan git-secrets (AWS) terintegrasi sebagai hook pra-commit dan memindai file yang telah dipentaskan untuk mencari pola yang cocok dengan kunci API, string koneksi, kunci privat, dan token JWT. Jika secret terdeteksi, commit ditolak dan pengembang diminta menghapus kredensial tersebut. kerangka kerja pre-commit memudahkan penambahan dan pembagian konfigurasi hook di seluruh tim.
# Installing detect-secrets as pre-commit hook:
# 1. Install: pip install detect-secrets
# 2. Create baseline: detect-secrets scan > .secrets.baseline
# 3. Add to .pre-commit-config.yaml:
# repos:
# - repo: https://github.com/Yelp/detect-secrets
# rev: v1.4.0
# hooks:
# - id: detect-secrets
# args: ['--baseline', '.secrets.baseline']
# 4. Install hooks: pre-commit install
# Now every commit attempt is scanned:
# git commit -m 'add config'
# -> detect-secrets runs
# -> if AWS key pattern found: COMMIT BLOCKED
# -> developer must remove secret and use secrets managerPemeriksaan Cepat
Uji pemahaman Anda tentang konsep CompTIA Security+ (SY0-701) dari pelajaran ini.
Rangkuman Pelajaran
Dalam pelajaran ini Anda mempelajari bahwa: secret yang ditulis secara hardcode dalam kode sumber harus dihilangkan dan diganti dengan pengelola secret seperti Vault atau AWS Secrets Manager, rotasi otomatis menghapus kredensial berumur panjang yang dapat disalahgunakan penyerang bahkan setelah kompromi awal, dan secret dinamis serta kebijakan akses dengan hak istimewa minimum meminimalkan nilai setiap secret yang terbuka. Berikutnya kita membahas keamanan dependencies dan analisis komposisi perangkat lunak.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Manajemen Rahasia yang Aman dan Variabel Lingkungan” gratis?
Ya — teks lengkap “Manajemen Rahasia yang Aman dan Variabel Lingkungan” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Security+ Academy, upgrade ke CoddyKit PRO. Kursus Security+ Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Manajemen Rahasia yang Aman dan Variabel Lingkungan”?
Hindari rahasia yang ditulis langsung dalam kode sumber dengan menggunakan pengelola rahasia (Vault, AWS Secrets Manager) dan injeksi variabel lingkungan saat runtime. Kamu berlatih Security+ Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Security+ Academy?
Tidak diperlukan pengalaman sebelumnya. Security+ Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.
Berapa lama pelajaran “Manajemen Rahasia yang Aman dan Variabel Lingkungan” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Security+ Academy ini?
Ya. Setiap pelajaran Security+ Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Validasi Masukan dan Pengodean Keluaran
- Manajemen Rahasia yang Aman dan Variabel Lingkungan
- Keamanan Dependensi dan Analisis Komposisi Perangkat Lunak
- DevSecOps: Menggeser Keamanan ke Tahap Awal dalam Pipeline