Vault: ເກັບ Secret ແລະ Key ເຂົ້າລະຫັດ

ເກັບລະຫັດຜ່ານ, API key ແລະ Key ເຂົ້າລະຫັດໄວ້ບ່ອນດຽວ ໂປຣແກຣມອ່ານດ້ວຍ Service Account ໂດຍບໍ່ຕ້ອງຝັງຄ່າໄວ້ໃນໂຄ້ດ

ເລີ່ມໃຊ້ງານ

  1. ເປີດ Vault ໃນ Console ແລ້ວສ້າງ Vault ແຍກຕາມແອັບ ຫຼື ສະພາບແວດລ້ອມ ເຊັ່ນ app-production
  2. ເພີ່ມ Secret ຫຼື ສ້າງ Key
  3. ເປີດແຖບ ສິດການເຂົ້າເຖິງ ແລ້ວໃຫ້ສິດ Service Account ທີ່ບໍລິການຂອງທ່ານໃຊ້
  4. ໃນໂຄ້ດ ຂໍ Token ແລ້ວເອີ້ນ API ຕາມຕົວຢ່າງດ້ານລຸ່ມ

ສິດຂອງ Service Account

ສິດເຮັດຫຍັງໄດ້
ອ່ານ Secretອ່ານຄ່າຂອງ Secret
ອ່ານ ແລະ ຂຽນ Secretອ່ານຄ່າ ແລະ ເພີ່ມເວີຊັນໃໝ່
ໃຊ້ Key ເຂົ້າລະຫັດ ແລະ ລົງລາຍເຊັນເຂົ້າລະຫັດ, ຖອດລະຫັດ, ລົງລາຍເຊັນ, ກວດລາຍເຊັນ
ໃຊ້ ແລະ ໝຸນ Keyໃຊ້ Key ແລະ ສ້າງເວີຊັນໃໝ່
ອ່ານ Secret ແລະ ໃຊ້ Keyລວມ 2 ຢ່າງນີ້
ອ່ານ ແລະ ຂຽນ Secret, ໃຊ້ ແລະ ໝຸນ Keyທຸກຢ່າງ

ຖ້າຍັງບໍ່ໄດ້ໃຫ້ສິດ Service Account ຈະໃຊ້ Vault ບໍ່ໄດ້ ເຖິງຢູ່ໃນ Project ດຽວກັນ ສ່ວນຄົນໃນ Project: Viewer ແລະ Operator ເຫັນພຽງຊື່ ແລະ ປະຫວັດ, Editor ເບິ່ງ ແລະ ແກ້ຄ່າໄດ້, Owner ແລະ Admin ລຶບໄດ້

ໃຊ້ Secret ເປັນຕົວແປຂອງ Container ຫຼື Function

ໃສ່ຄ່າຕົວແປເປັນ vault://app-production/db-password ຫຼື ກົດ ໃຊ້ຄ່າຈາກ Vault ໃນໜ້າຕົວແປ ໂຄ້ດອ່ານຕົວແປຕາມປົກກະຕິໂດຍບໍ່ຕ້ອງແກ້ຫຍັງ ລະບົບເປີດຄ່າຈິງໃຫ້ຕອນບໍລິການເລີ່ມເຮັດວຽກ ສ່ວນ Console ແລະ Revision ເກັບພຽງທີ່ຢູ່ນີ້

ຕ້ອງໃຫ້ສິດອ່ານ Secret ແກ່ Service Account ຂອງບໍລິການກ່ອນ ຖ້າເພີ່ມເວີຊັນໃໝ່ ຕ້ອງຣີສະຕາດບໍລິການຈຶ່ງຈະໄດ້ຄ່າໃໝ່ ຖ້າຕ້ອງການລັອກເວີຊັນ ໃຫ້ຕໍ່ທ້າຍດ້ວຍເລກເວີຊັນ ເຊັ່ນ vault://app-production/db-password/2 ຖ້າອ່ານຄ່າບໍ່ໄດ້ຕອນເລີ່ມເຮັດວຽກ ເຊັ່ນ ຖືກຖອນສິດ ບໍລິການຈະບໍ່ເລີ່ມ ແລະ ແຈ້ງສາເຫດໄວ້

ອ່ານ Secret

Shell
# Inside a Container or Function: a token from the machine it runs on
TOKEN=$(curl -s -H "Metadata: true" \
  "http://169.254.169.254/identity/oauth2/token" | jq -r .access_token)

curl -H "Authorization: Bearer $TOKEN" \
  https://api.thailandhosting.com/v1/vaults/app-production/secrets/db-password
# {"name":"db-password","version":2,"value":"...","expiresAt":null}

ບໍ່ລະບຸເວີຊັນຈະໄດ້ເວີຊັນໃໝ່ລ່າສຸດທີ່ຍັງເປີດຢູ່ ແລະ ຍັງບໍ່ໝົດອາຍຸ ລະບຸເວີຊັນດ້ວຍ ?version=2 ຄວນເກັບຄ່າໄວ້ໃນໜ່ວຍຄວາມຈຳຂອງໂປຣແກຣມຊົ່ວຄາວ ແທນການເອີ້ນທຸກຄັ້ງ

ເຂົ້າລະຫັດດ້ວຍ Key

Shell
curl -X POST -H "Authorization: Bearer $TOKEN" \
  -d "{\"plaintext\":\"$(printf 'hello' | base64)\"}" \
  https://api.thailandhosting.com/v1/vaults/app-production/keys/customer-data/encrypt
# {"ciphertext":"thv1:2:...","version":2}

curl -X POST -H "Authorization: Bearer $TOKEN" \
  -d '{"ciphertext":"thv1:2:..."}' \
  https://api.thailandhosting.com/v1/vaults/app-production/keys/customer-data/decrypt
# {"plaintext":"aGVsbG8="}

ຂໍ້ມູນສົ່ງເປັນ base64 ໄດ້ຄັ້ງລະບໍ່ເກີນ 64 KB ຜົນລັບບອກເວີຊັນຂອງ Key ຢູ່ໃນຕົວ ຈຶ່ງຖອດລະຫັດໄດ້ເຖິງໝຸນ Key ແລ້ວ ຖ້າສົ່ງ aad ຕອນເຂົ້າລະຫັດ ຕ້ອງສົ່ງຄ່າເດີມຕອນຖອດລະຫັດ

ຂໍ້ມູນໃຫຍ່ ຫຼື ມີຈຳນວນຫຼາຍ ໃຫ້ຂໍ Data key ທີ່ /data-key ໃຊ້ຄ່າ plaintext ເຂົ້າລະຫັດເອງໃນໂປຣແກຣມ ແລ້ວເກັບ ciphertext ໄວ້ຄູ່ກັບຂໍ້ມູນ ຕອນອ່ານຈຶ່ງສົ່ງ ciphertext ໄປຖອດລະຫັດ

ຊະນິດຂອງ Key

ຊະນິດໃຊ້ເຮັດຫຍັງ
AES-256-GCMເຂົ້າລະຫັດ / ຖອດລະຫັດ
RSA 2048, RSA 4096ເລືອກຢ່າງໃດຢ່າງໜຶ່ງ: ເຂົ້າລະຫັດ / ຖອດລະຫັດ ຫຼື ລົງລາຍເຊັນ / ກວດສອບ
ECDSA P-256, P-384ລົງລາຍເຊັນ / ກວດສອບ

SDK

Shell
import { defaultCredential } from '@thailandhosting/identity';

const vault = defaultCredential().vault('app-production');

const secret = await vault.getSecret('db-password');
const ciphertext = await vault.encrypt('customer-data', 'hello');
const plaintext = await vault.decrypt('customer-data', ciphertext);
Shell
from thailandhosting_identity import default_credential

vault = default_credential().vault("app-production")

secret = vault.get_secret("db-password")
ciphertext = vault.encrypt("customer-data", b"hello")
plaintext = vault.decrypt("customer-data", ciphertext)
Shell
cred, err := identity.Default()
vault := cred.Vault("app-production")

secret, err := vault.GetSecret(ctx, "db-password")
ciphertext, err := vault.Encrypt(ctx, "customer-data", []byte("hello"), nil)
plaintext, err := vault.Decrypt(ctx, "customer-data", ciphertext, nil)

th CLI

Shell
th vault create app-production
th vault secret set app-production db-password   # reads the value from standard input
th vault secret get app-production db-password

th vault key create app-production customer-data --type aes256 --rotation-days 90
th vault key encrypt app-production customer-data 'hello'

ຄຳສັ່ງ th vault ໃຊ້ສິດຂອງຄົນທີ່ th auth login API Key ເອີ້ນບໍ່ໄດ້ ລະບົບອັດຕະໂນມັດ ແລະ CI ໃຫ້ໃຊ້ Service Account ແທນ ສ່ວນການລຶບຖາວອນເຮັດໄດ້ໃນ Console ເທົ່ານັ້ນ

ລາຄາ

ຕົວ Vault ຟຣີ ຄິດຕາມຈຳນວນ Secret ແລະ Key ທີ່ມີຢູ່ (ລວມທຸກເວີຊັນ) ກັບຈຳນວນຄັ້ງທີ່ໂປຣແກຣມອ່ານ Secret ຫຼື ໃຊ້ Key ເບິ່ງລາຄາທີ່ໜ້າ ລາຄາ

ບໍ່ຄິດເງິນ: ການອ່ານຄ່າເປັນຕົວແປຕອນບໍລິການເລີ່ມເຮັດວຽກ, ການໃຊ້ຜ່ານ Console ແລະ th CLI, ການເບິ່ງລາຍການ, ເພີ່ມເວີຊັນ ຫຼື ໝຸນ Key, ການເອີ້ນທີ່ບໍ່ສຳເລັດ ແລະ ລາຍການທີ່ລຶບແລ້ວ ຖ້າ Project ມີຍອດຄ້າງຊຳລະ ໂປຣແກຣມຈະເອີ້ນ Vault ບໍ່ໄດ້ຈົນກວ່າຈະເຕີມເງິນ

ລຶບ ແລະ ກູ້ຄືນ

ລາຍການທີ່ລຶບຈະໃຊ້ງານບໍ່ໄດ້ທັນທີ ແຕ່ກູ້ຄືນໄດ້ພາຍໃນໄລຍະເວລາທີ່ຕັ້ງໄວ້ໃນ Vault (7-90 ວັນ) ເມື່ອຄົບກຳນົດຈະຖືກລຶບຖາວອນ ຖ້າລຶບ Key ຖາວອນ ຂໍ້ມູນທີ່ເຂົ້າລະຫັດດ້ວຍ Key ນັ້ນຈະເປີດບໍ່ໄດ້ອີກເລີຍ

ເປີດ ປ້ອງກັນການລຶບຖາວອນ ເພື່ອບໍ່ໃຫ້ໃຜລຶບຖາວອນກ່ອນຄົບກຳນົດ ລວມທັງເຈົ້າຂອງ Project ເມື່ອເປີດແລ້ວປິດບໍ່ໄດ້

ປະຫວັດການໃຊ້ງານ

ແຖບ ປະຫວັດການໃຊ້ງານ ບອກວ່າໃຜເຮັດຫຍັງ, ເມື່ອໃດ, ຈາກ IP ໃດ ລວມທັງການເອີ້ນທີ່ຖືກປະຕິເສດ ການໃຊ້ງານຈາກໂປຣແກຣມລວມເປັນລາຍການລະຊົ່ວໂມງຕໍ່ຜູ້ເອີ້ນ ເກັບໄວ້ 1 ປີ

ຖ້າພົບບັນຫາ

ໄດ້ 403 forbidden

Service Account ຍັງບໍ່ມີສິດທີ່ກົງກັບຄຳສັ່ງນີ້ ເບິ່ງຊື່ທີ່ຖືກປະຕິເສດໄດ້ທີ່ແຖບປະຫວັດການໃຊ້ງານ ແລ້ວໃຫ້ສິດທີ່ແຖບສິດການເຂົ້າເຖິງ

ເກັບ Key ໄວ້ໃນ HSM ຫຼືບໍ່

ບໍ່ Key ຖືກເຂົ້າລະຫັດດ້ວຍຊອບແວ ແລະ ເກັບໃນຖານຂໍ້ມູນຂອງລະບົບ ຍັງບໍ່ມີແບບ HSM

ຍັງແກ້ບໍ່ໄດ້? ໃຫ້ທີມງານຊ່ວຍ

ເປີດ ticket ຈາກໜ້າຈັດການ ບອກຊື່ເວັບ ຫຼື ບໍລິການ ສິ່ງທີ່ເຮັດ ແລະ ຂໍ້ຄວາມທີ່ເຫັນເທິງຈໍ ທີມງານຈະຕອບກັບໃນເລື່ອງດຽວກັນ ຕິດຕາມໄດ້ໃນບ່ອນດຽວ