Armazenar segredos com o keystore

O Tradefed inclui o conceito de um keystore, em que os secrets podem ser armazenados em um serviço de keystore e solicitados no tempo de execução do teste para uso durante o teste.

Usar um keystore

Para usar um keystore, primeiro defina a origem dele na configuração global.

Depois disso, você pode usar as chaves armazenadas com: USE_KEYSTORE@{key}

JSONFileKeyStore

A implementação de exemplo no núcleo do Tradefed usa um keystore JSON, JSONFileKeyStoreClient. Para usar esse keystore, defina um arquivo de chave JSON com mapeamentos de chave para valor.

Por exemplo, é possível definir um arquivo /path/to/keystore.json como

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

Em seguida, adicione as seguintes linhas ao arquivo de configuração global do TF:

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

Ao executar testes relacionados, agora é possível transmitir valores como USE_KEYSTORE@test_account. O TF vai consultar o keystore e usar o valor dele como parte do teste.

Arquivo keystore baseado em host

Para definir pares de chave-valor com base no host, defina um arquivo /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"
  }
}

A chave de uma entrada no arquivo é um padrão de expressão regular (regex) para o nome do host, e o valor é o conjunto de pares de chave-valor para qualquer host com um nome de host correspondente.

Em seguida, atualize o arquivo de configuração global do TF para incluir o arquivo de keystore baseado em 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>

O valor de uma chave definida em um arquivo de keystore baseado em host substitui o valor definido no arquivo de keystore especificado com json-key-store-file.

Quando há vários arquivos de keystore baseados em host no keystore, a ordem é importante. Se o valor de uma chave for definido em vários arquivos, o valor no último arquivo vai substituir o restante.