التشغيل السريع - مكتبة عميل Azure Key Vault Secret لـ Java

ابدأ مع مكتبة العميل للبيانات السرية Azure Key Vault لـ Java. يُرجى اتباع هذه الخطوات لتثبيت الحزمة وتجربة التعليمات البرمجية للمهام الأساسية.

تلميح

إذا كنت تعمل مع موارد Azure Key Vault Secrets في تطبيق Spring، نوصيك بمراعاة Spring Cloud Azure كبديل. Spring Cloud Azure هو مشروع مفتوح المصدر يوفر تكامل Spring سلس مع خدمات Azure. لمعرفة المزيد حول Spring Cloud Azure، ورؤية مثال باستخدام Key Vault Secrets، راجع تحميل سر من Azure Key Vault في تطبيق Spring Boot.

موارد إضافية:

المتطلبات الأساسية

يفترض هذا التشغيل السريع أنك تقوم بتشغيل Azure CLI وApache Maven في نافذة محطة Linux.

الإعداد

يُستخدم هذا التشغيل السريع مكتبة Azure Identity مع Azure CLI لمصادقة المستخدم إلىAzure Services. يمكن للمطورين أيضاً استخدام Visual Studio أو Visual Studio Code لمصادقة مكالماتهم، وللحصول على مزيد من المعلومات، راجع مصادقة العميل باستخدام مكتبة عميل Azure Identity.

تسجيل الدخول إلى Azure

  1. تشغيل الأمر login.

    az login
    

    في حال كان CLI يمكن فتح المستعرض الافتراضي الخاص بك، فإنه سيتم القيام بذلك وتحميل صفحة تسجيل الدخول Azure.

    بخلاف ذلك، افتح صفحة متصفح على https://aka.ms/devicelogin وأدخل رمز التفويض المعروض في جهازك.

  2. قم بتسجيل الدخول باستخدام بيانات اعتماد حسابك في المتصفح.

إنشاء تطبيق وحدة تحكم Java جديد

في نافذة وحدة التحكم، استخدم الأمر mvn لإنشاء تطبيق وحدة تحكم Java جديد باسم akv-secrets-java.

mvn archetype:generate -DgroupId=com.keyvault.secrets.quickstart
                       -DartifactId=akv-secrets-java
                       -DarchetypeArtifactId=maven-archetype-quickstart
                       -DarchetypeVersion=1.4
                       -DinteractiveMode=false

ستبدو المخرجات الناتجة عن إنشاء المشروع كما يلي:

[INFO] ----------------------------------------------------------------------------
[INFO] Using following parameters for creating project from Archetype: maven-archetype-quickstart:1.4
[INFO] ----------------------------------------------------------------------------
[INFO] Parameter: groupId, Value: com.keyvault.secrets.quickstart
[INFO] Parameter: artifactId, Value: akv-secrets-java
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] Parameter: package, Value: com.keyvault.secrets.quickstart
[INFO] Parameter: packageInPathFormat, Value: com/keyvault/quickstart
[INFO] Parameter: package, Value: com.keyvault.secrets.quickstart
[INFO] Parameter: groupId, Value: com.keyvault.secrets.quickstart
[INFO] Parameter: artifactId, Value: akv-secrets-java
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] Project created from Archetype in dir: /home/user/quickstarts/akv-secrets-java
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  38.124 s
[INFO] Finished at: 2019-11-15T13:19:06-08:00
[INFO] ------------------------------------------------------------------------

تغيير الدليل إلى المجلد akv-secrets-java/ المنشأ حديثاً.

cd akv-secrets-java

تثبيت الحزمة

افتح ملف pom.xml في محرر النص. أضف عناصر التبعية التالية إلى مجموعة التبعيات.

    <dependency>
      <groupId>com.azure</groupId>
      <artifactId>azure-security-keyvault-secrets</artifactId>
      <version>4.2.3</version>
    </dependency>

    <dependency>
      <groupId>com.azure</groupId>
      <artifactId>azure-identity</artifactId>
      <version>1.2.0</version>
    </dependency>

إنشاء مجموعة موارد ومخزن رئيسي

تستخدم هذا التشغيل السريع مخزن بيانات سرية لـ Azure تم إنشاؤه مسبقاً. يمكنك إنشاء مخزن بيانات سرية باتباع الخطوات الواردة في بداية سريعة إلى Azure CLI أو بداية سريعة إلى Azure PowerShell أو بداية سريعة إلى مدخل Microsoft Azure.

بدلاً من ذلك، يمكنك ببساطة تشغيل أوامر Azure CLI أو Azure PowerShell أدناه.

هام

يجب أن يكون لكل مخزن رئيسي اسم فريد. استبدل <your-unique-keyvault-name> باسم المخزن الرئيس في الأمثلة التالية.

az group create --name "myResourceGroup" -l "EastUS"

az keyvault create --name "<your-unique-keyvault-name>" -g "myResourceGroup"

امنح حق الوصول إلى خزنة المفاتيح الخاصة بك

لمنح أذونات التطبيق إلى مخزن المفاتيح الخاص بك من خلال التحكم في الوصول استنادا إلى الدور (RBAC)، قم بتعيين دور باستخدام الأمر Azure CLI az role assignment create.

az role assignment create --role "Key Vault Secrets User" --assignee "<app-id>" --scope "/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.KeyVault/vaults/<your-unique-keyvault-name>"

استبدل <app-id> و <subscription-id> و <resource-group-name> و <your-unique-keyvault-name> بقيمك الفعلية. <معرف> التطبيق هو معرف التطبيق (العميل) للتطبيق المسجل في Azure AD.

تعيين متغيرات البيئة

يستخدم هذا التطبيق اسم مخزن البيانات السرية لك كمتغير بيئة يسمى KEY_VAULT_NAME.

Windows

set KEY_VAULT_NAME=<your-key-vault-name>

Windows PowerShell

$Env:KEY_VAULT_NAME="<your-key-vault-name>"

macOS أو Linux

export KEY_VAULT_NAME=<your-key-vault-name>

نموذج الكائن

تتيح لك مكتبة العميل للبيانات السرية Azure Key Vault الخاصة بـ Java إدارة البيانات السرية. يوضح المقطع أمثلة التعليمات البرمجية كيفية إنشاء عميل وتعيين البيانات السرية واستردادها وحذفها.

أمثلة على التعليمات البرمجية

أضف توجيهات

إضافة التوجيهات التالية إلى أعلى التعليمة البرمجية الخاصة بك:

import com.azure.core.util.polling.SyncPoller;
import com.azure.identity.DefaultAzureCredentialBuilder;

import com.azure.security.keyvault.secrets.SecretClient;
import com.azure.security.keyvault.secrets.SecretClientBuilder;
import com.azure.security.keyvault.secrets.models.DeletedSecret;
import com.azure.security.keyvault.secrets.models.KeyVaultSecret;

مصادقة عميل وإنشاؤه

يجب التصريح بطلبات التطبيق إلى معظم خدمات Azure. استخدام فئة DefaultAzureCredential هو الأسلوب الموصى به لتنفيذ الاتصالات بدون كلمة مرور بخدمات Azure في التعليمات البرمجية الخاصة بك. DefaultAzureCredential يدعم أساليب مصادقة متعددة ويحدد الأسلوب الذي يجب استخدامه في وقت التشغيل. يمكن هذا النهج تطبيقك من استخدام أساليب مصادقة مختلفة في بيئات مختلفة (البيئة المحلية مقابل بيئة التشغيل) دون تنفيذ التعليمات البرمجية الخاصة بالبيئة.

في هذا التشغيل السريع، DefaultAzureCredential يصادق على key vault باستخدام بيانات اعتماد مستخدم التطوير المحلي الذي سجل الدخول إلى Azure CLI. عند نشر التطبيق إلى Azure، يمكن لنفس DefaultAzureCredential التعليمات البرمجية اكتشاف واستخدام هوية مدارة تلقائيا تم تعيينها إلى App Service أو Virtual Machine أو خدمات أخرى. لمزيد من المعلومات، راجع نظرة عامة على الهوية المُدارة.

في هذا المثال، يتم توسيع اسم مخزن المفاتيح الخاص بك إلى URI لمخزن المفاتيح، بالتنسيق https://<your-key-vault-name>.vault.azure.net. لمزيد من المعلومات حول المصادقة إلى مخزن المفاتيح، راجع دليل المطور.

String keyVaultName = System.getenv("KEY_VAULT_NAME");
String keyVaultUri = "https://" + keyVaultName + ".vault.azure.net";

SecretClient secretClient = new SecretClientBuilder()
    .vaultUrl(keyVaultUri)
    .credential(new DefaultAzureCredentialBuilder().build())
    .buildClient();

حفظ سر

الآن بعد أن تمت مصادقة التطبيق، يمكنك حفظ البيانات السرية في مخزنك الرئيسي باستخدام طريقة secretClient.setSecret. يتطلب هذا اسما للسر - لقد قمنا بتعيين القيمة "mySecret" إلى المتغير في هذه العينة secretName .

secretClient.setSecret(new KeyVaultSecret(secretName, secretValue));

يمكنك التحقق من تعيين البيانات السرية باستخدام الأمر "az keyvault secret show":

az keyvault secret show --vault-name <your-unique-key-vault-name> --name mySecret

استرداد البيانات السرية

يمكنك الآن استرداد البيانات السرية الذي تم تعيينه مسبقاً باستخدام الطريقة secretClient.getSecret.

KeyVaultSecret retrievedSecret = secretClient.getSecret(secretName);

يمكنك الآن الوصول إلى قيمة البيانات السرية المستردة باستخدام الطريقة retrievedSecret.getValue() .

حذف سر

وأخيراً، دعونا نحذف البيانات السرية من المخزن الرئيسي باستخدام طريقة secretClient.beginDeleteSecret.

تعد عملية حذف البيانات السرية عملية تحتاج لفترة تشغيل طويلة، حيث يمكنك التحقق من مدى تقدمها أو الانتظار حتى تكتمل.

SyncPoller<DeletedSecret, Void> deletionPoller = secretClient.beginDeleteSecret(secretName);
deletionPoller.waitForCompletion();

يمكنك التحقق من حذف البيانات السرية باستخدام الأمر "az keyvault secret show":

az keyvault secret show --vault-name <your-unique-key-vault-name> --name mySecret

تنظيف الموارد

عندما لم تعد هناك حاجة، يمكنك استخدام Azure CLI أو Azure PowerShell لإزالة مخزن البيانات السرية ومجموعة الموارد المقابلة.

az group delete -g "myResourceGroup"
Remove-AzResourceGroup -Name "myResourceGroup"

التعليمة البرمجية العينة

package com.keyvault.secrets.quickstart;

import java.io.Console;

import com.azure.core.util.polling.SyncPoller;
import com.azure.identity.DefaultAzureCredentialBuilder;

import com.azure.security.keyvault.secrets.SecretClient;
import com.azure.security.keyvault.secrets.SecretClientBuilder;
import com.azure.security.keyvault.secrets.models.DeletedSecret;
import com.azure.security.keyvault.secrets.models.KeyVaultSecret;

public class App {
    public static void main(String[] args) throws InterruptedException, IllegalArgumentException {
        String keyVaultName = System.getenv("KEY_VAULT_NAME");
        String keyVaultUri = "https://" + keyVaultName + ".vault.azure.net";

        System.out.printf("key vault name = %s and key vault URI = %s \n", keyVaultName, keyVaultUri);

        SecretClient secretClient = new SecretClientBuilder()
            .vaultUrl(keyVaultUri)
            .credential(new DefaultAzureCredentialBuilder().build())
            .buildClient();

        Console con = System.console();

        String secretName = "mySecret";

        System.out.println("Please provide the value of your secret > ");

        String secretValue = con.readLine();

        System.out.print("Creating a secret in " + keyVaultName + " called '" + secretName + "' with value '" + secretValue + "' ... ");

        secretClient.setSecret(new KeyVaultSecret(secretName, secretValue));

        System.out.println("done.");
        System.out.println("Forgetting your secret.");

        secretValue = "";
        System.out.println("Your secret's value is '" + secretValue + "'.");

        System.out.println("Retrieving your secret from " + keyVaultName + ".");

        KeyVaultSecret retrievedSecret = secretClient.getSecret(secretName);

        System.out.println("Your secret's value is '" + retrievedSecret.getValue() + "'.");
        System.out.print("Deleting your secret from " + keyVaultName + " ... ");

        SyncPoller<DeletedSecret, Void> deletionPoller = secretClient.beginDeleteSecret(secretName);
        deletionPoller.waitForCompletion();

        System.out.println("done.");
    }
}

الخطوات التالية

في هذا التشغيل السريع، قمت بإنشاء مخزن مفاتيح، وتخزين سر، واسترداده، ثم حذفه. لمعرفة المزيد حول Key Vault وكيفية دمجه مع تطبيقاتك، تابع إلى هذه المقالات.