Almacenar secretos con keystore

Tradefed incluye el concepto de un almacén de claves , donde los secretos pueden almacenarse en un servicio de almacén de claves y solicitarse en el tiempo de ejecución de la prueba para su uso durante la prueba.

Usar un almacén de claves

Para usar un almacén de claves, primero debe definir la fuente del almacén de claves en su configuración global .

Una vez hecho esto, puede usar las claves almacenadas a través de: USE_KEYSTORE@{key}

JSONFileKeyStore

La implementación de muestra en el núcleo de Tradefed usa un almacén de claves JSON, JSONFileKeyStoreClient . Para usar este almacén de claves, debe definir un archivo de claves JSON que tenga asignaciones de clave a valor.

Por ejemplo, podría definir un archivo /path/to/keystore.json como

{
  "test_account": "foo@gmail.com",
  "test_account_pwd": "helloworld",
  "wifi_lab_ssid": "Google_private_AP",
  "wifi_lab_pwd": "secret123",
}

Luego agregaría las siguientes líneas en su archivo de configuración global de TF:

<key_store class="com.android.tradefed.util.keystore.JSONFileKeyStoreFactory">
<option name="json-key-store-file" value="/path/to/keystore.json" />
</key_store>

Al ejecutar pruebas relacionadas, ahora puede pasar valores como USE_KEYSTORE@test_account , cuyo TF luego consultará el almacén de claves y usará su valor como parte de la prueba.

Archivo de almacén de claves basado en host

Para definir pares clave-valor basados ​​en host, puede definir un archivo /path/to/keystore_ssid.json como

{
  "host_a.*\\.corp\\.com": {
    "wifi_lab_ssid": "ssid_a",
    "wifi_lab_pwd": "secret_a"
  },
  "host_b.*\\.corp\\.com": {
    "wifi_lab_ssid": "ssid_b",
    "wifi_lab_pwd": "secret_b"
  }
}

La clave de una entrada en el archivo es un patrón de expresión regular (regex) para el nombre de host y el valor es el conjunto de pares clave-valor para cualquier host con un nombre de host coincidente.

Luego, actualice su archivo de configuración global de TF para incluir el archivo de almacén de claves basado en host:

<key_store class="com.android.tradefed.util.keystore.JSONFileKeyStoreFactory">
<option name="json-key-store-file" value="/path/to/keystore.json" />
<option name="host-based-key-store-file" value="/path/to/keystore-ssid.json" />
</key_store>

El valor de una clave definida en un archivo de almacén de claves basado en host anula el definido en el archivo de almacén de claves especificado con json-key-store-file .

Cuando hay varios archivos de almacén de claves basados ​​en host en el almacén de claves, el orden es importante. Si el valor de una clave se define en varios archivos, el valor del último de esos archivos anula el resto.