จัดการ Azure Key Vaults ด้วย HashiCorp Vault KMS
Tags: hashicorp, vault, azure, keyvault
Published: 2023-03-31 02:28:10


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d3dza2o8utii9aaegf3w.jpg)

Azure Cloud Services มีบริการจัดเก็บและบริหารความลับเรียกว่า Azure Key vault โดยช่วยจัดเก็บ และเรียกใช้งาน Objects 3 ประเภท Keys, Secrets และ Certificates

- Keys เช่น Key-pairs
- Secrets เช่นรหัสผ่าน
- Certificates หรือ Certificate Authority(CA) โดยสามารถกำหนด Subjects, validation periods ได้

Objects ทั้ง 3 แบบใน Key vault
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kuxoavle2w9zs91skkyn.jpg)


เราสามารถสร้าง Objects ทั้ง 3 นี้ขึ้นมาใหม่โดยใช้ Azure Portal หรือ Import เข้ามาก็ได้

การจัดการความลับเหล่านี้ โดยปกติแล้วจะถูกจัดการผ่าน Azure Portal, เช่นต้องการสร้าง Keys ใหม่ก็จะ Create ผ่าน Portal เมื่อใช้งานเสร็จต้องการลบ ก็สามารถทำได้ผ่าน Portal ซึ่งการบริหารจัดการเหล่านี้ HashiCorp Vault - Secrets as a service สามารถเข้ามาช่วยดูแลและยังครอบคลุม Secrets Lifecycle Management

Prerequisites

- Azure Key vaults Premium(with HSM Supported)
- HashiCorp Vault Enterprise

## ส่วนที่ 1 
เราจะทำการสร้าง Key Vaults และสร้าง Key-pairs ไว้ใช้งาน โดยทำผ่าน Azure Portal

ให้ Log in ไปยัง Azure Portal, เลือก Directory ที่ต้องการใช้งาน

ค้นหาคำว่า Key vaults และเข้าไปยัง Key vaults

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3hlj6c2265wf1gxfidie.jpg)



กด + Create

ใส่รายละเอียดสำหรับสร้าง Key vaults


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/y1whnlidhdqrjm31mu0r.jpg)




- Subscription: เลือก Subscription ที่ต้องการ
- Resource group: เลือก Resource group สำหรับ Key vaults, หากยังไม่มีสามารถกดสร้างใหม่ได้
- Key vault name: ชื่อ Key vault ที่ต้องการ เช่น "sukkarin-keyvault-3"
- Region: เลือกเป็น Southeast Asia
- Pricing tier: สามารถเลือกได้ทั้ง Standard และ Premium(HSM supported) ในกรณีนี้เราจะใช้งานร่วมกับ HashiCorp Vault โดยมีการใช้ HSM ด้วย ให้เลือก Premium

กด Review + Create

กด Create

รอจน Deploy สำเร็จ

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wyyd4erkhl23ycrsxfdv.jpg)


Deploy สำเร็จแล้ว, เลือก Go to resource

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xfu1tqe2guvw0keggm8l.jpg)


ใต้แถบ Objects กดเลือก Keys
เลือก +Import/Generate เพื่อทำการสร้าง key-pairs

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bvzdf6tvlnpfgw9zb1da.jpg)


Name: ใช้ชื่อที่ต้องการ เช่น "my-keypair-1"
Key type: RSA-HSM
RSA key size: 2048

กด Create

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8z65lmc7j7i7e4r9ayfn.jpg)


จะเห็นได้ว่ามีการสร้าง my-keypair-1 สำเร็จ
กดที่ Key-pairs ที่เพิ่งสร้าง
เลือก Current version
จะพบว่าเราสามารถ Download Public Key ไปใช้งานได้

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/m6kn38wwoazrruwehno9.jpg)


เมื่อไม่มีการใช้งาน Key-pairs นี้แล้ว สามารถลบออกได้โดยเข้าไปที่ Key vaults, my-keypair-1

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1qdn5ivng713sb8p2fs7.jpg)


เลือก Delete
กด Delete อีกครั้งเพื่อยืนยัน

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/v78kdhw91o67jda0qe5j.jpg)


จะมี Popup แสดงว่าลบคีย์สำเร็จ
จะไม่เห็น my-keypair-1 แล้ว
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/t7u11ge797gxmc16e3ub.jpg)




## ส่วนที่สอง เราจะให้ HashiCorp Vault เป็นคนบริหารจัดการคีย์ โดยจะทำการสร้าง Key ขึ้นมาก่อน, จากนั้น Import Key ไปที่ Azure Key Vaults

Prerequisites มี Vault ติดตั้งไว้แล้วพร้อมใช้งาน
[Install Vault](https://developer.hashicorp.com/vault/tutorials/getting-started/getting-started-install#install-vault)

เปิดการใช้งาน Key management บน Vault

```
sukkarin@vault:~$ vault secrets enable keymgmt
Success! Enabled the keymgmt secrets engine at: keymgmt/
```

ให้ Vault ทำการสร้าง Key ใช้ชื่อว่า "example-key" กำหนดให้ใช้ Algorithm RSA-2048

```
sukkarin@vault:~$ vault write -f keymgmt/key/example-key type="rsa-2048"
Success! Data written to: keymgmt/key/example-key
```

Setup Azure Provider โดยระบุชื่อ Key vault, client_id, client_secret และ tenant_id
cliend_id และ client_secret จะต้องมีสิทธิ์ในการ Import key สามารถเพิ่มสิทธิ์ได้ที่หน้า Access Policy ของ Key Vaults ที่ต้องการเพิ่ม

```
sukkarin@vault:~$ vault write keymgmt/kms/example-key \
    provider="azurekeyvault" \
    key_collection="sukkarin-keyvault-3" \
    credentials=client_id="<client-id>" \
    credentials=client_secret="<client-secret>" \
    credentials=tenant_id="<tenant-id>"
Success! Data written to: keymgmt/kms/example-key
```


Import Key ชื่อ example-key เข้าไปที่ Azure Key vault ชื่อ sukkarin-keyvault-3
```
sukkarin@vault:~$ vault write keymgmt/kms/sukkarin-keyvault-3/key/example-key \
    purpose="sign,verify" \
    protection="hsm"
Success! Data written to: keymgmt/kms/sukkarin-keyvault-3/key/example-key
```

เปิดดูที่ Azure portal ไปที่ Key vault, เลือก sukkarin-keyvault-3, เลือก Keys จะพบคีย์ example-key-1680172858 ถูก Import เข้ามาเรียบร้อยแล้ว


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mh8bfogdnsd307qc1cru.jpg)