Recuperar valores de segredos
Use o serviço IPC do gerenciador de segredos para recuperar valores secretos dos segredos no dispositivo principal. Você usa o componente gerenciador de segredos para implantar segredos criptografados nos dispositivos principais. Em seguida, você pode usar uma operação IPC para descriptografar o segredo e usar seu valor em seus componentes personalizados.
Versões mínimas do SDK
A tabela a seguir lista as versões mínimas do AWS IoT Device SDK que você deve usar para recuperar valores secretos de segredos no dispositivo principal.
SDK | Versão mínima |
---|---|
v1.2.10 |
|
v1.5.3 |
|
v1.17.0 |
|
v1.12.0 |
Autorização
Para usar o gerenciador de segredos em um componente personalizado, você deve definir políticas de autorização que permitam que seu componente obtenha o valor dos segredos que você armazena no dispositivo principal. Para obter informações sobre a definição de políticas de autorização, consulte Autorizar componentes a realizar operações de IPC.
As políticas de autorização do gerenciador de segredo têm as seguintes propriedades.
Identificador de serviço IPC: aws.greengrass.SecretManager
Operation | Descrição | Recursos |
---|---|---|
|
Permite que um componente obtenha o valor dos segredos criptografados no dispositivo principal. |
Um ARN secreto do Secrets Manager, ou |
Exemplos de política de autorização
Consulte o exemplo de política de autorização a seguir para configurar políticas de autorização para seus componentes.
exemplo Exemplo de política de autorização
O exemplo de política de autorização a seguir permite que um componente obtenha o valor de qualquer segredo no dispositivo principal.
nota
Recomendamos que, em um ambiente de produção, você reduza o escopo da política de autorização para que o componente recupere somente os segredos que ele usa. Você pode alterar o *
caractere curinga para uma lista de ARNs secretos ao implantar o componente.
{ "accessControl": { "aws.greengrass.SecretManager": { "
com.example.MySecretComponent
:secrets:1": { "policyDescription": "Allows access to a secret.", "operations": [ "aws.greengrass#GetSecretValue" ], "resources": [ "*" ] } } } }
GetSecretValue
Obtém o valor de um segredo que você armazena no dispositivo principal.
Essa operação é semelhante à operação do Secrets Manager que você pode usar para obter o valor de um segredo na Nuvem AWS. Para obter mais informações, consulte GetSecretValue na Referência de APIs do AWS Secrets Manager.
Solicitação
A solicitação dessa operação tem os seguintes parâmetros:
refresh
(Python:refresh
)-
(opcional): se o segredo solicitado deve ser sincronizado com o valor mais recente do serviço AWS Secrets Manager.
Quando definido como verdadeiro, o gerenciador secreto solicitará ao serviço AWS Secrets Manager o valor mais recente do rótulo secreto especificado e retornará esse valor como resposta. Caso contrário, o valor secreto que foi armazenado localmente será retornado.
Esse parâmetro não funcionará em conjunto com o parâmetro
versionId
na solicitação. Esse parâmetro funciona quando usado em conjunto com o Nucleus 2.13.0 e versões posteriores. secretId
(Python:secret_id
)-
O nome do segredo a ser obtido. É possível especificar o nome de recurso da Amazon (ARN) ou o nome amigável do segredo.
versionId
(Python:version_id
)-
(Opcional) O ID da versão do segredo a ser obtido.
Você pode especificar
versionId
ouversionStage
.Se você não especificar
versionId
ouversionStage
, essa operação usará como padrão a versão com o rótuloAWSCURRENT
. versionStage
(Python:version_stage
)-
(Opcional) O rótulo de preparação da versão a ser obtida.
Você pode especificar
versionId
ouversionStage
.Se você não especificar
versionId
ouversionStage
, essa operação usará como padrão a versão com o rótuloAWSCURRENT
.
Resposta
A resposta dessa operação tem as seguintes informações:
secretId
(Python:secret_id
)-
O ID do segredo.
versionId
(Python:version_id
)-
O ID dessa versão do segredo.
versionStage
(Python:version_stage
)-
A lista de etiquetas de preparação anexadas a essa versão do segredo.
secretValue
(Python:secret_value
)-
O valor dessa versão do segredo. Esse objeto,
SecretValue
, contém as informações a seguir.secretString
(Python:secret_string
)-
A parte descriptografada das informações secretas protegidas que você forneceu ao Secrets Manager como uma string.
secretBinary
(Python:secret_binary
)-
(Opcional) A parte descriptografada das informações secretas protegidas que você forneceu ao Secrets Manager como dados binários na forma de uma matriz de bytes. Essa propriedade contém os dados binários como uma string codificada em base64.
Essa propriedade não será usada se você criou o segredo no console do Secrets Manager.
Exemplos
Os exemplos a seguir demonstram como chamar essa operação no código do componente personalizado.
Exemplos
Use os exemplos a seguir para aprender a usar o serviço IPC do gerenciador secreto em seus componentes.
Esse componente de exemplo imprime o valor de um segredo que você implanta no dispositivo principal.
Importante
Esse componente de exemplo imprime o valor de um segredo, portanto, use-o somente com segredos que armazenam dados de teste. Não use esse componente para imprimir o valor de um segredo que armazena informações importantes.
Fórmula
O exemplo de fórmula a seguir define um parâmetro secreto de configuração do ARN e permite que o componente obtenha o valor de qualquer segredo no dispositivo principal.
nota
Recomendamos que, em um ambiente de produção, você reduza o escopo da política de autorização para que o componente recupere somente os segredos que ele usa. Você pode alterar o *
caractere curinga para uma lista de ARNs secretos ao implantar o componente.
Artefatos
O exemplo de aplicação Python a seguir demonstra como usar o serviço IPC do gerenciador de segredos para obter o valor de um segredo no dispositivo principal.
import concurrent.futures import json import sys import traceback import awsiot.greengrasscoreipc from awsiot.greengrasscoreipc.model import ( GetSecretValueRequest, GetSecretValueResponse, UnauthorizedError ) TIMEOUT = 10 if len(sys.argv) == 1: print('Provide SecretArn in the component configuration.', file=sys.stdout) exit(1) secret_id = sys.argv[1] try: ipc_client = awsiot.greengrasscoreipc.connect() request = GetSecretValueRequest() request.secret_id = secret_id operation = ipc_client.new_get_secret_value() operation.activate(request) future_response = operation.get_response() try: response = future_response.result(TIMEOUT) secret_json = json.loads(response.secret_value.secret_string) print('Successfully got secret: ' + secret_id) print('Secret value: ' + str(secret_json)) except concurrent.futures.TimeoutError: print('Timeout occurred while getting secret: ' + secret_id, file=sys.stderr) except UnauthorizedError as e: print('Unauthorized error while getting secret: ' + secret_id, file=sys.stderr) raise e except Exception as e: print('Exception while getting secret: ' + secret_id, file=sys.stderr) raise e except Exception: print('Exception occurred when using IPC.', file=sys.stderr) traceback.print_exc() exit(1)
Uso
Você pode usar esse componente de exemplo com o componente gerenciador de segredos para implantar e imprimir o valor de um segredo em seu dispositivo principal.
Para criar, implantar e imprimir um segredo de teste
-
Criar um segredo do Secrets Manager com dados de teste.
Salve o ARN do segredo para usar nas próximas etapas
Para obter mais informações, consulte Criar um segredo no Guia do usuário do AWS Secrets Manager.
-
Implante o componente do gerenciador secreto (
aws.greengrass.SecretManager
) com a seguinte atualização de mesclagem de configuração. Especifique o ARN do segredo criado anteriormente.{ "cloudSecrets": [ { "arn": "
arn:aws:secretsmanager:us-west-2:123456789012:secret:MyTestGreengrassSecret-abcdef
" } ] }Para obter mais informações, consulte Implantar componentes AWS IoT Greengrass em dispositivos ou o comando de implantação da CLI do Greengrass.
-
Crie e implante o componente de exemplo nesta seção com a seguinte atualização de mesclagem de configuração. Especifique o ARN do segredo criado anteriormente.
{ "SecretArn": "
arn:aws:secretsmanager:us-west-2:123456789012:secret:MyTestGreengrassSecret
", "accessControl": { "aws.greengrass.SecretManager": { "com.example.PrintSecret:secrets:1": { "policyDescription": "Allows access to a secret.", "operations": [ "aws.greengrass#GetSecretValue" ], "resources": [ "arn:aws:secretsmanager:us-west-2:123456789012:secret:MyTestGreengrassSecret-abcdef
" ] } } } }Para ter mais informações, consulte Criar componentes do AWS IoT Greengrass.
-
Visualize os logs do software AWS IoT Greengrass principal para verificar se as implantações foram bem-sucedidas e veja o log do
com.example.PrintSecret
componente para ver o valor secreto impresso. Para ter mais informações, consulte Monitore AWS IoT Greengrass logs.