Saat membuat IaC, Anda mungkin perlu berurusan dengan rahasia (akses kredensial, token, sertifikat, dll.) memikirkan tentang lebih baik dan lebih aman cara mengaksesnya bisa menjadi tugas menentang. Dalam artikel ini saya bermaksud menunjukkan cara untuk mengatasinya menggunakan Vault da Hashicorp.
Obs.: Sebelum saya mulai, ingatlah bahwa bekerja dengan data sensitif itu rumit dan relatif terhadap kebijakan keamanan organisasi Anda. Jadi, selalu cari solusi yang paling sesuai dengan lingkungan Anda.
Apa yang kita lakukan?
Kami akan menyediakan cluster Kubernetes di cloud utama saat ini (AWS, Azure, GCP), melalui kode Terraform.
Vault akan berperan menyediakan kredensial untuk mengakses Clouds, menggunakan Dynamic Secrets (rahasia sesuai permintaan) .
Mengapa Hashicorp Vault?
Anda mungkin bertanya-tanya mengapa menggunakan Vault untuk mengelola rahasia di Clouds, jika Anda dapat menggunakan solusi asli mereka, seperti AWS KMS atau Azure Key Vault. Sehat, beberapa alasan akan menjadi:
- Sumber Terbuka
- Cloud Agnostic (terintegrasi dengan layanan utama saat ini, menggunakan solusi tunggal untuk beberapa cloud atau layanan, mengurangi kebutuhan untuk mempelajari berbagai alat dan mengurangi masalah integrasi)
- Sistem Keamanan Terpusat (dapat digunakan sebagai sistem enkripsi, sistem KMS, sistem PKI atau bahkan sebagai penyimpanan kredensial, artinya Anda dapat menyimpannya sebagai titik sentral untuk sebagian besar kebutuhan keamanan di lingkungan Anda)
Persyaratan:
- Vault Up & Running: Anda akan membutuhkan instance Vault yang sedang berjalan. Mungkin video ini dapat membantu Anda menyediakan Vault dengan cepat dan sederhana:
https://medium.com/media/dadcb8a5ec7611838ac22c3203aa549f/href
- Memiliki gagasan dasar, ringan, dengan Terraform dan K8s.
- memiliki Akun em cada Cloud (AWS, Azure, GCP).
Semua kode untuk demo ini ada di sini.
Memulai
AWS
Mari kita mulai dengan AWS, tetapi pertama-tama penting untuk dipahami bahwa kita akan menggunakan modul Terraform EKS sebagai basis (secara kasar, EKS adalah Kubernetes sebagai layanan AWS).
Dengan instans Vault Anda berjalan dan tidak disegel, mari kita mulai dengan mengaktifkan mesin rahasia AWS:
vault secrets enable aws
Obs.: Mesin Rahasia adalah komponen Vault penting untuk menghasilkan rahasia, menyimpan kredensial, mengenkripsi data, berintegrasi dengan layanan eksternal, atau semuanya secara bersamaan. Penting untuk memikirkan mesin rahasia sesuai dengan tujuannya.
Dengan mesin rahasia AWS diaktifkan, kami akan dapat membuat kredensial secara dinamis, berdasarkan kebijakan IAM. Gunakan akses dan kunci rahasia Anda untuk mengonfigurasi mesin rahasia:
vault write aws/config/root access_key=AKIAJWVN5Z4FOFT7NLNA secret_key=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 region=us-east-1
Perhatian:
Jangan pernah menggunakan kredensial root AWS Anda. Buat pengguna atau peran tertentu untuk Vault. Ikuti praktik terbaik keamanan AWS IAM di sini.
Mengonfigurasi peran yang akan ditautkan ke kredensial:
vault write aws/roles/eks-role \
credential_type=iam_user \
policy_document=-<<EOF
"Version": "2012-10-17",
"Statement": [
"Effect": "Allow",
"Action": "eks:*",
"Resource": "*"
]
EOF
Pada titik ini, Vault sudah dapat membuat kredensial dengan melakukan a Baca tidak ada titik akhir/kredit:
vault read aws/creds/admin
Key Value
--- -----
lease_id aws/creds/admin/f3e92392-7d9c-09c8-c921-575d62fe80d8
lease_duration 768h
lease_renewable true
access_key AKIAIOWQXTLW36DV7IEA
secret_key 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
security_token <nil>
Dengan mesin rahasia AWS yang dikonfigurasi, kami dapat menerapkan EKS di AWS. Kloning repositori:
git clone git@github.com:GuhAlex/terraform.git
Akses direktori terraform/aws/eks:
terraform/
├── aws
│ ├── eks <== here
│ └── iam
├── azure
│ └── aks
└── gcp
└── gke
Deskripsi singkat tentang bagaimana saya mengatur file TF:
- main.tf — Berisi semua penyedia yang diperlukan yang digunakan.
Penyedia yang diperlukan adalah cara eksplisit untuk mengontrol dan memelihara versi penyedia yang digunakan dan harus dideklarasikan di blok utama kode Terraform Anda. - penyedia.tf — Dalam file ini adalah pengaturan yang diperlukan dari penyedia yang digunakan. Perhatikan bahwa data sensitif diakses oleh sumber data melalui penyedia Vault.
- eks.tf — Di mana semua detail modul EKS yang akan disediakan.
- variabel.tf — Berikut adalah nilai yang harus diberikan, seperti token akses Vault dan URL-nya (lihat selengkapnya tentang autentikasi Vault di sini).
Setelah memberikan nilai dalam file variabel. tf kita dapat mulai menerapkan EKS dengan alur kerja Terraform:
terraform init
terraform plan
terraform apply
Jika semuanya berjalan dengan baik, klaster EKS Anda akan disediakan di AWS, dengan kredensial yang digunakan secara dinamis.
BIRU LANGIT
Sekarang mari kita pergi ke Azure di mana kita akan menggunakan modul Terraform berikut untuk menyediakan AKS (Kubernetes sebagai layanan Azure).
Mirip dengan mesin rahasia AWS, semua data sensitif akan dipusatkan di Vault, tetapi untuk itu kita perlu mengaktifkan dua jenis mesin rahasia:
vault secrets enable azure
vault secrets enable kv
Mesin rahasia Azure akan secara dinamis memberi kami tugas peran dan grup kepada prinsipal layanan.
Di Azure, prinsip layanan adalah identitas keamanan yang digunakan untuk mengakses sumber daya Azure tertentu.
Mesin rahasia KV adalah cara umum untuk menyimpan kredensial dan dalam hal ini kami akan menggunakannya untuk mempertahankan ID langganan e identitas penyewa .
Untuk mengonfigurasi mesin rahasia Azure, Anda memerlukan data berikut:
- id_langganan
- tenant_id
- client_id
- rahasia_klien
Di portal Azure, gunakan jalur berikut ini untuk mengakses nilai:
ID Berlangganan:
Portal Azure → Langganan → Ikhtisar
ID Penyewa:
Portal Azure → Direktori Aktif Azure → Ikhtisar
Anda harus membuat pendaftaran aplikasi (client_id) dan rahasia klien:
ID Klien:
Portal Azure → Azure Active Directory → Pendaftaran aplikasi → Pendaftaran baru
Rahasia Klien:
Portal Azure →Pendaftaran aplikasi → Sertifikat & rahasia → Rahasia klien baru
Sekarang perlu mengaktifkan Microsoft Graph API dari pendaftaran aplikasi ini yang baru saja kita buat dan jalurnya adalah ini:
Portal Azure →Pendaftaran aplikasi → Izin API → Tambahkan izin
Lihat izin berikut yang perlu diaktifkan di sini.
Dengan izin Microsoft Graph API yang dikonfigurasi dan dengan nilai otentikasi, sekarang kita dapat mengonfigurasi mesin rahasia kita:
vault write azure/config \
subscription_id=$AZURE_SUBSCRIPTION_ID \
tenant_id=$AZURE_TENANT_ID \
client_id=$AZURE_CLIENT_ID \
client_secret=$AZURE_CLIENT_SECRET \
use_microsoft_graph_api=true
Mengonfigurasi peran, itu akan ditautkan ke rahasia:
vault write azure/roles/myrole ttl=1h azure_roles=-<<EOF
[
"role_name": "Owner",
"scope": "/subscriptions/$AZURE_SUBSCRIPTION_ID"
]
EOF
Perhatikan bahwa peran tersebut dicakup untuk semua sumber daya Azure, dengan waktu aktif satu jam. melakukan a Baca tidak ada titik akhir /kredituntuk memvalidasi konfigurasi:
vault read azure/creds/my-role
Key Value
--- -----
lease_id azure/creds/sp_role/1afd0969-ad23-73e2-f974-962f7ac1c2b4
lease_duration 60m
lease_renewable true
client_id 408bf248-dd4e-4be5-919a-7f6207a307ab
client_secret ad06228a-2db9-4e0a-8a5d-e047c7f32594
Keren, sekarang Vault kami dapat menghasilkan rahasia Azure sesuai permintaan.
Tapi itu masih belum cukup bagi kami untuk menyebarkan AKS, karena di penyedia Azure — ketika kami menggunakan otentikasi dengan layanan utama dan rahasia klien — langganan dan id penyewa diperlukan dalam hardcoded (tidak disarankan) atau dalam variabel lingkungan.
Di sinilah mesin rahasia KV yang disebutkan sebelumnya masuk. Untuk melakukan ini, lakukan instruksi berikut:
vault kv put kv/azure subscription_id=$AZURE_SUBSCRIPTION_ID tenant_id=$AZURE_TENANT_ID
Sekarang ya, kami dapat menyediakan AKS kami! Di root repositori, buka direktori biru/aks :
terraform/
├── aws
│ ├── eks
│ └── iam
├── azure
│ └── aks <== here
└── gcp
└── gke
File TF mengikuti struktur yang hampir sama dengan aws/eks/, tetapi dalam kasus ini file apps.tf telah ditambahkan:
- aks.tf — Di mana semua detail modul AKS yang akan disediakan.
- apps.tf— Berisi beberapa rilis helm yang akan diterapkan bersama dengan K8s
Setelah memberikan nilai dalam file variabel. tf kita dapat mulai menerapkan AKS dengan alur kerja Terraform:
terraform init
terraform plan
terraform apply
GCP
Di Google Cloud, kami akan menggunakan modul Terraform berikut untuk menyediakan GKE kami.
Mari kita mulai dengan mengaktifkan mesin rahasia gcp.
vault secrets enable gcp
Mesin GCP dapat membuat kunci rahasia (akun layanan google) atau token OAuth sesuai permintaan berdasarkan kebijakan IAM.
Namun sebelum kita mengonfigurasi mesin rahasia GCP, penting untuk memahami beberapa detail:
Roleset
Roleset adalah akun layanan GCP yang diikat ke sekumpulan binding IAM, yang dikontrol oleh Vault.
Akun Statis
Akun statis adalah akun layanan GCP yang dibuat di luar Vault dan diberikan ke Vault untuk menghasilkan token atau kunci akses.
Di sini, kita akan menggunakan akun Statis untuk menghasilkan token akses.
Untuk mengonfigurasi mesin rahasia kami, kami memerlukan kredensial akun:
Akses konsol gcp dan ikuti jalur berikut untuk membuat file json dengan kredensial:
Beranda → IAM & Admin → Akun layanan
Lihat izin yang dibutuhkan akun layanan di sini.
Buat akun layanan dan buat kunci dalam format json:
dan gunakan untuk men-tweak mesin rahasia:
vault write gcp/config credentials=@credentials.json
Di root repositori, akses direktori gcp/gke:
terraform/
├── aws
│ ├── eks
│ └── iam
├── azure
│ └── aks
└── gcp
└── gke <== here
Di direktori gcp/gke, gunakan file roleset.hcluntuk membuat kebijakan Vault untuk membaca token:
vault policy write roleset-policy roleset.hcl
Konfigurasikan akun Statis untuk menghasilkan token akses melalui file mybindings.hcl:
vault write gcp/static-account/token-account service_account_email="your-service-account-email@project.com.br" secret_type="access_token" token_scopes="https://www.googleapis.com/auth/cloud-platform" bindings=@mybindings.hcl
Obs.: atur file mybindings.hcl dengan nama proyek yang Anda gunakan.
Periksa konfigurasi:
vault read gcp/static-account/token-account/token
Key Value
--- -----
expires_at_seconds 1537402548
token ya29.c.ElodBmNPwHUNY5gcBpnXcE4ywG4w1k...
token_ttl 3599
Pada titik ini kita sudah dapat membuat GKE. File TF dengan cara yang sama seperti /aw/mantanini adalah /biru/aks.Setelah memberikan nilai dalam file variabel. tf,kita dapat mulai men-deploy GKE dengan alur kerja Terraform:
terraform init
terraform plan
terraform apply
Kesimpulan
Saya mencoba dengan artikel ini untuk menunjukkan cara menggunakan Vault da Hashicorpuntuk menjaga alur kerja IaC Anda sedikit lebih aman, menggunakan rahasia dinamis untuk mengautentikasi ke Cloud utama saat ini. Juga, dalam kode Terraform Anda akan melihat contoh menarik menggunakan penyedia Terraform Vault.
Yang penting, ini hanyalah demonstrasi penggunaan rahasia dinamis Vault untuk tujuan pengujian dan pengembangan. Dalam lingkungan yang produktif, Vault harus dikonfigurasi dengan TLS untuk memastikan enkripsi dalam komunikasi titik-ke-titik.
Berikut adalah praktik terbaik untuk menjaga brankas Anda lebih aman. Dan ingatlah: keamanan adalah proses yang tidak ada habisnya dan selalu memungkinkan untuk memperbaikinya (atau tidak lol).
Itu saja Getupers! 😀
Untuk mengirim komentar atau mengajukan pertanyaan, tulis kepada saya: gustavo@getup.io.
Hashicorp Vault: mantendo sua IaC segura awalnya diterbitkan di Getup on Medium, di mana orang-orang melanjutkan percakapan dengan menyoroti dan menanggapi cerita ini.
Bermain bocoran hk unitogel lewat smartphone tentunya lebih praktis dan mudah. Seiring dengan pertumbuhan teknologi dimasa kini dimana mudahnya manfaatkan internet, membawa dampak para togelers bermain togel secara online. Bermain togel online termasuk lebih memberikan banyak keuntungan ketimbang bermain togel secara offline. Bermain togel hongkong dan togel singapore secara online kamu sanggup beroleh banyak disc. dan promo yang disajikan oleh bandar togel online tersebut.