Hashicorp Vault: Menjaga Keamanan IaC Anda

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 AzureLangganan → 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 AzurePendaftaran 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 AzurePendaftaran 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.