KeycyteYardım MerkeziKeycyte PAM
PDF indirGeri bildirim gönder

Keycyte PAM 3.2 · Yönetici Kılavuzu

Secrets API Başvurusu

Bu başvuru, Secrets API’nin (sürüm 1.0.0) iki uç noktasını, istek imzasını ve hata yanıtlarını açıklar. Tüm istekler HTTPS üzerinden Keycyte PAM sunucunuza gider; örneğin https://pam.example.com.

YöntemYolAmaç
GET/api/secrets/accountsAnahtarın okuyabileceği hesapları sır değerleri olmadan listeler.
POST/api/secrets/fetchBir hesabın bir sırrını okur.

İstek İmzası

Her istek iki başlık gerektirir ve her ikisinin de imzada listelenmesi gerekir:

Date: Sat, 30 Aug 2026 17:04:47 GMT
Authorization: Signature keyId="<key-id>",algorithm="hmac-sha256",headers="(request-target) date",signature="<base64-signature>"

İmza, imzalama dizesinin gizli anahtarla hesaplanmış HMAC-SHA256 değerinin Base64 kodlamasıdır. İmzalama dizesi, listelenen başlıkları yeni satır karakteriyle (\n) birleştirir:

(request-target): post /api/secrets/fetch
date: Sat, 30 Aug 2026 17:04:47 GMT
  • (request-target) içindeki yöntem küçük harfle yazılır; yol, varsa sorgu dizesi dahil tam yoldur.
  • Yalnızca hmac-sha256 kabul edilir; RSA ve ECDSA reddedilir.
  • Date, sunucu saatinden en fazla yaklaşık 300 saniye farklı olmalıdır.

GET /api/secrets/accounts

Çağıranın kapsamındaki tüm hesapları önce name, ardından accountId değerine göre sıralanmış olarak döndürür. Sayısal kimlikleri koda sabit yazmak yerine hesapları adlarına göre bulmak için bu uç noktayı kullanın. Liste aynı zamanda anahtarın kesin sınırıdır: anahtar sızdırılırsa nelerin açığa çıkacağını gösterir.

Yanıt hiçbir zaman password, privatekey veya passphrase içermez.

Yanıt 200

AlanTipAçıklama
accountsarrayKapsamdaki hesaplar (aşağıya bakın).
countintegeraccounts içindeki girdi sayısı.

accounts içindeki her girdi:

AlanTipAçıklama
accountIdintegerHesabın sayısal kimliği.
namestringHesap adı. /api/secrets/fetch uç noktasına name olarak iletin.
usernamestringHesabın oturum açma adı. Sır olarak değerlendirilmez.
domainstringHesabın etki alanı. Boşsa yer almaz.
typestringHesap tipi; örneğin linux, windows, mysql.
descriptionstringYöneticinin notu. Boşsa yer almaz.

Boş liste olağan bir sonuçtur: kimliğin hiçbir parola rolü yoktur veya rollerinin hiçbiri şu anda zaman penceresi içinde değildir.

{
  "accounts": [
    { "accountId": 6365, "name": "app-db", "username": "appuser", "type": "mysql" }
  ],
  "count": 1
}

POST /api/secrets/fetch

Bir hesabın tek bir sır değerini döndürür. Hesap, erişim günlüklerinde görünmemesi için URL’de değil istek gövdesinde belirtilir.

İstek gövdesi

accountId veya name alanlarından tam olarak birini gönderin.

AlanTipAçıklama
accountIdintegerHesabın sayısal kimliği. Hesabın ömrü boyunca sabittir; ancak hesap silinip yeniden oluşturulursa değişir.
namestringHesap adı. Büyük/küçük harf duyarsız olarak, baştaki ve sondaki boşluklar yok sayılarak ve yalnızca çağıranın kapsamında eşleştirilir.
fieldstringOkunacak sır: password (varsayılan), privatekey veya passphrase. Örneğin bir API anahtarı password alanında, bir TOTP tohumu privatekey alanında saklanır.
reasonstringDenetim günlüğüne kaydedilen, en fazla 256 baytlık isteğe bağlı metin. Sonucu hiçbir zaman değiştirmez.

Yanıt 200

AlanTipAçıklama
accountIdintegerOkunan hesap. name ile sorguladıysanız bu değeri kontrol edin.
fieldstringDöndürülen alan; küçük harfle.
valuestringAçık metin olarak sır.

Uyarı

Yanıtı hassas veri olarak ele alın. Günlüğe yazmayın, diskte önbelleğe almayın ve hata raporlarına eklemeyin.

Hata Yanıtları

DurumGövdeAnlamı
400{"message": "..."}accountId ve name alanlarından hiçbiri gönderilmemiş ya da ikisi birden gönderilmiş, field üç addan biri değil veya istenen alan hesapta boş.
401{"error": "unauthorized"}İmza eksik, hatalı biçimlendirilmiş, süresi dolmuş veya etkin bir anahtarla eşleşmiyor. Gövde hangisi olduğunu belirtmez; neden sunucu günlüğünde yer alır.
403{"error": "forbidden"} veya {"message": "this credential cannot read secrets"}Çağrı, anahtarın izin listesi dışındaki bir IP adresinden geldi veya anahtarın sahibi olan bir kullanıcı yok.
404{"message": "secret not found"}Hiçbir sır döndürülmedi. Aynı yanıt; bulunmayan bir hesabı, çağıranın kapsamı dışındaki bir hesabı ve çağıranın görebildiği hiçbir şeyle eşleşmeyen bir adı kapsar.
Retry-After ile 409{"message": "account password is being rotated: ..."}Hesabın parolası şu anda değiştiriliyor. Retry-After içindeki saniye kadar bekleyin ve yeniden deneyin. Durum birkaç dakika sürerse parola döndürme işlemi yeni parolayı kaydedememiştir ve bir yöneticinin durumu çözmesi gerekir; süresiz olarak yeniden denemek yerine alarm üretin.
Retry-After olmadan 409{"message": "account name is ambiguous: ..."}name, çağıranın kapsamındaki birden fazla hesapla eşleşiyor. accountId kullanın veya hesaplardan birini yeniden adlandırın.
500{"message": "..."}Sunucu hatası.

Not

Kimlik doğrulama katmanından gelen hatalar (401 ve IP kısıtlamaları için 403) error alanını, uç noktalardan gelen hatalar message alanını kullanır. İstemcinizde her ikisini de okuyun.

Örnek

Aşağıdaki kabuk betiği app-db adlı hesabın parolasını okur. Yer tutucuları kendi değerlerinizle değiştirin.

KEY_ID="<key-id>"
KEY_SECRET="<key-secret>"
HOST="pam.example.com"
PATH_="/api/secrets/fetch"
DATE="$(LC_ALL=C date -u '+%a, %d %b %Y %H:%M:%S GMT')"

SIGNING_STRING="$(printf '(request-target): post %s\ndate: %s' "$PATH_" "$DATE")"
SIGNATURE="$(printf '%s' "$SIGNING_STRING" | openssl dgst -sha256 -hmac "$KEY_SECRET" -binary | base64)"

curl -s "https://$HOST$PATH_" \
  -H "Date: $DATE" \
  -H "Authorization: Signature keyId=\"$KEY_ID\",algorithm=\"hmac-sha256\",headers=\"(request-target) date\",signature=\"$SIGNATURE\"" \
  -H "Content-Type: application/json" \
  -d '{"name": "app-db", "field": "password", "reason": "nightly backup job"}'

Başarılı bir çağrı şunu döndürür:

{ "accountId": 6365, "field": "password", "value": "<secret-value>" }

HMAC anahtarı, anahtar verildiğinde gösterildiği şekliyle gizli anahtarın kendisidir (kod çözülmeden, metin dizesi olarak kullanılır).

Sayfa güncellendi: 1 Kasım 2026 Geri bildirim gönder
Ara