قبو مرن يستند إلى PHP لتوفير الأسرار بشكل ديناميكي
تم ترخيص هذا المشروع بموجب GNU LGPL 3.0.
composer install technicalguru/vaultيمكنك تنزيل حزم الشفرة المصدر من صفحة إصدار Github
من الأفضل وصف الإجراء في مدونة Hashicorp. يصف كيفية إنشاء approle . ها هو جوهره:
# Enable the auth method for approle
vault auth enable approle
# Create a renewal policy
echo ' path "auth/token/*" { capabilities = [ "create", "read", "update", "delete", "list", "sudo" ] } ' > renewal-policy.hcl
vault policy write renewal-policy renewal-policy.hcl
# Create a file with your policy on the respective secret path:
cat ' path "secret/my-secret" { capabilities = ["read", "list"] } ' > app-policy.hcl
# Create the policy
vault policy write my-app-policy app-policy.hcl
# Create the approle with renewal-policy and your application policy
vault write auth/approle/role/my-approle token_policies=renewal-policy,my-app-policy token_period=30m token_ttl=30m token_max_ttl=1h token_explicit_max_ttl=2h
# Get the role ID printed
vault read auth/approle/role/my-approle/role-id
# Create the secret ID and print it
vault write -f auth/approle/role/my-approle/secret-idيرجى ملاحظة أنك بحاجة إلى إعادة إنشاء المعرف السري كلما قمت بتغيير دور الطلب أو السياسة.
يرجى ملاحظة أن هذا المدفن هو في الواقع عميل لمباراة HASHICORP الموجودة.
// Create configuration
$ config = array (
' type ' => ' hashicorp ' ,
' config ' => array (
' uri ' => ' https://127.0.0.1:8200/v1 ' ,
' roleId ' => ' 123456-12345-12345-123456 ' ,
' secretId ' => ' abcdef-abcde-abcde-abcdef '
)
);
// Create the vault instance
try {
$ vault = TgVault VaultFactory:: create ( $ config );
} catch ( TgVault VaultException $ e ) {
// Vault could not be created
} // Create configuration
$ config = array (
' type ' => ' memory ' ,
' config ' => array (
' secrets ' => array (
' my/secret/number/1 ' => array (
' username ' => ' my-username1 ' ,
' password ' => ' my-password1 ' ,
),
' my/secret/number/2 ' => array (
' username ' => ' my-username2 ' ,
' password ' => ' my-password2 ' ,
),
)
)
);
// Create the vault instance
try {
$ vault = TgVault VaultFactory:: create ( $ config );
} catch ( TgVault VaultException $ e ) {
// Vault could not be created
} // Create configuration
$ config = array (
' type ' => ' file ' ,
' config ' => array (
' filename ' => ' path-to-json-secret-file '
)
);
// Create the vault instance
try {
$ vault = TgVault VaultFactory:: create ( $ config );
} catch ( TgVault VaultException $ e ) {
// Vault could not be created
}يجب أن يبدو ملف الأسرار (JSON) هكذا:
{
"secrets" : {
"my/secret/number/1" : {
"username" : " my-username1 " ,
"password" : " my-password1 "
},
"my/secret/number/2" : {
"username" : " my-username2 " ,
"password" : " my-password2 "
}
}
} try {
$ mySecret1 = $ vault -> getSecret ( ' my/secret/number/1 ' );
$ mySecret2 = $ vault -> getSecret ( ' my/secret/number/2 ' );
} catch ( TgVault VaultException $ e ) {
// secret was not found
}
$ username1 = $ mySecret1 -> get ( ' username ' );
$ password1 = $ mySecret1 -> get ( ' password ' );
$ username2 = $ mySecret2 -> get ( ' username ' );
$ password2 = $ mySecret2 -> get ( ' password ' ); تكون القيمة في السر NULL عندما لا يكون المفتاح موجودًا في حين سيتم طرح استثناء عندما لا يمكن العثور على السر نفسه أو حدوث خطأ أثناء الاسترجاع.
يمكنك استخدام فصول HERPER SecretProvider أو CredentialsProvider لتمرير بيانات الاعتماد عليها دون معرفة من أين أتت أو كيفية استخدام قبو.
$ callback1 = new TgVault SecretProvider ( $ vault , ' my/secret/number/1 ' );
$ callback2 = new TgVault CredentialsProvider ( $ vault , ' my/secret/number/2 ' );
try {
$ username1 = $ callback1 -> get ( ' username ' );
$ password1 = $ callback1 -> get ( ' password ' );
$ username2 = $ callback2 -> getUsername ();
$ password2 = $ callback2 -> getPassword ();
} catch ( TgVault VaultException $ e ) {
// Secret cannot be retrieved or does not exist
} يأخذ CredentialsProvider حجج مُنشئ إضافية تحددها ، والتي توفر المفاتيح في السر اسم المستخدم وكلمة المرور. الافتراضيات كما هو موضح أعلاه لـ SecretProvider .
الإبلاغ عن خطأ ، أو طلب طلب تحسين أو سحب في GitHub ission Tracker.