

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Gerenciar segredos usando a API do Secrets Manager e o AWS SDK para PHP versão 3
<a name="secretsmanager-examples-manage-secret"></a>

AWS Secrets ManagerO armazena e gerencia segredos compartilhados, como senhas, chaves de API e credenciais de banco de dados. Com o serviço Secrets Manager, os desenvolvedores podem substituir as credenciais de codificação rígida no código implantado por uma chamada integrada para o Secrets Manager.

O Secrets Manager oferece suporte nativo à rotação automática de credenciais para bancos de dados do Amazon Relational Database Service (Amazon RDS), aumentando a segurança da aplicação. O Secrets Manager também pode alternar perfeitamente segredos para outros bancos de dados e serviços de terceiros usando o AWS Lambda para implementação de detalhes específicos do serviço.

Os exemplos a seguir mostram como:
+ Criar um segredo usando [CreateSecret](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-secretsmanager-2017-10-17.html#createsecret).
+ Recuperar um segredo usando [GetSecretValue](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-secretsmanager-2017-10-17.html#getsecretvalue).
+ Listar todos os segredos armazenados pelo Secrets Manager usando [ListSecrets](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-secretsmanager-2017-10-17.html#listsecrets).
+ Obter detalhes sobre um segredo especificado usando [DescribeSecret](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-secretsmanager-2017-10-17.html#describesecret).
+ Atualizar um segredo especificado usando [PutSecretValue](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-secretsmanager-2017-10-17.html#putsecretvalue).
+ Configurar uma rotação de segredos usando [RotateSecret](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-secretsmanager-2017-10-17.html#rotatesecret).
+ Marcar um segredo para exclusão usando [DeleteSecret](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-secretsmanager-2017-10-17.html#deletesecret).

O código de exemplo completo do AWS SDK para PHP está disponível [aqui no GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code).

## Credenciais
<a name="examplecredentials"></a>

Antes de executar o código de exemplo, configure suas credenciais da AWS, conforme descrito em [Autenticando com o AWS uso da AWS SDK para PHP versão 3](credentials.md). Em seguida, importe o AWS SDK para PHP, conforme descrito em [Instalando a AWS SDK para PHP versão 3](getting-started_installation.md).

## Criar um segredo no Secrets Manager
<a name="create-a-secret-in-asm"></a>

Para criar um segredo no Secrets Manager, use a operação [CreateSecret](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-secretsmanager-2017-10-17.html#createsecret).

Neste exemplo, um nome de usuário e uma senha são armazenados como uma string JSON.

 **Importações** 

```
require 'vendor/autoload.php';
use Aws\SecretsManager\SecretsManagerClient;
use Aws\Exception\AwsException;
```

 **Código de exemplo** 

```
$client = new SecretsManagerClient([
    'profile' => 'default',
    'version' => '2017-10-17',
    'region' => 'us-west-2'
]);
$secretName = 'MySecretName';
$secret = json_encode([
    "username" => getenv("SMDEMO_USERNAME"),
    "password" => getenv("SMDEMO_PASSWORD"),
]);
$description = '<<Description>>';
try {
    $result = $client->createSecret([
        'Description' => $description,
        'Name' => $secretName,
        'SecretString' => $secret,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    echo $e->getMessage();
    echo "\n";
}
```

## Recuperar um segredo do Secrets Manager
<a name="retrieve-a-secret-from-asm"></a>

Para recuperar o valor de um segredo armazenado no Secrets Manager, use a operação [GetSecretValue](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-secretsmanager-2017-10-17.html#getsecretvalue).

Neste exemplo, `secret` é uma string que contém o valor armazenado. Se o valor para `username` é `<<USERNAME>>`, e o valor para `password` é `<<PASSWORD>>`, a saída de `secret` é:

```
{"username":"<<USERNAME>>","password":"<<PASSWORD>>"}
```

Use `json_decode($secret, true)` para acessar os valores da matriz.

 **Importações** 

```
require 'vendor/autoload.php';

use Aws\SecretsManager\SecretsManagerClient;
use Aws\Exception\AwsException;
```

 **Código de exemplo** 

```
$client = new SecretsManagerClient([
    'profile' => 'default',
    'version' => '2017-10-17',
    'region' => 'us-east-1',
]);

$secretName = 'MySecretName';

try {
    $result = $client->getSecretValue([
        'SecretId' => $secretName,
    ]);
} catch (AwsException $e) {
    $error = $e->getAwsErrorCode();
    if ($error == 'DecryptionFailureException') {
        // Secrets Manager can't decrypt the protected secret text using the provided AWS KMS key.
        // Handle the exception here, and/or rethrow as needed.
        throw $e;
    }
    if ($error == 'InternalServiceErrorException') {
        // An error occurred on the server side.
        // Handle the exception here, and/or rethrow as needed.
        throw $e;
    }
    if ($error == 'InvalidParameterException') {
        // You provided an invalid value for a parameter.
        // Handle the exception here, and/or rethrow as needed.
        throw $e;
    }
    if ($error == 'InvalidRequestException') {
        // You provided a parameter value that is not valid for the current state of the resource.
        // Handle the exception here, and/or rethrow as needed.
        throw $e;
    }
    if ($error == 'ResourceNotFoundException') {
        // We can't find the resource that you asked for.
        // Handle the exception here, and/or rethrow as needed.
        throw $e;
    }
}
// Decrypts secret using the associated KMS CMK.
// Depending on whether the secret is a string or binary, one of these fields will be populated.
if (isset($result['SecretString'])) {
    $secret = $result['SecretString'];
} else {
    $secret = base64_decode($result['SecretBinary']);
}
print $secret;
$secretArray = json_decode($secret, true);
$username = $secretArray['username'];
$password = $secretArray['password'];

// Your code goes here;
```

## Listar segredos armazenados no Secrets Manager
<a name="list-secrets-stored-in-asm"></a>

Obtenha uma lista de todos os segredos que estão armazenados no Secrets Manager usando a operação [ListSecrets](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-secretsmanager-2017-10-17.html#listsecrets).

 **Importações** 

```
require 'vendor/autoload.php';

use Aws\SecretsManager\SecretsManagerClient;
use Aws\Exception\AwsException;
```

 **Código de exemplo** 

```
$client = new SecretsManagerClient([
    'profile' => 'default',
    'version' => '2017-10-17',
    'region' => 'us-west-2'
]);

try {
    $result = $client->listSecrets([
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    echo $e->getMessage();
    echo "\n";
}
```

## Recuperar os detalhes sobre um segredo
<a name="retrieve-details-about-a-secret"></a>

Os segredos armazenados contêm metadados sobre as regras de rotação, quando foi o último acesso ou alteração, as tags criadas pelo usuário, e o nome de recurso da Amazon (ARN). Para obter os detalhes de um segredo especificado armazenado no Secrets Manager, use a operação [DescribeSecret](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-secretsmanager-2017-10-17.html#describesecret).

 **Importações** 

```
require 'vendor/autoload.php';

use Aws\SecretsManager\SecretsManagerClient;
use Aws\Exception\AwsException;
```

 **Código de exemplo** 

```
$client = new SecretsManagerClient([
    'profile' => 'default',
    'version' => '2017-10-17',
    'region' => 'us-west-2'
]);

$secretName = 'MySecretName';

try {
    $result = $client->describeSecret([
        'SecretId' => $secretName,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    echo $e->getMessage();
    echo "\n";
}
```

## Atualizar o valor do segredo
<a name="update-the-secret-value"></a>

Para armazenar um novo valor do segredo criptografado no Secrets Manager, use a operação [PutSecretValue](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-secretsmanager-2017-10-17.html#putsecretvalue).

Isso cria uma nova versão do segredo. Se uma versão do segredo já existir, adicione o parâmetro `VersionStages` com o valor em `AWSCURRENT` para garantir que o novo valor seja usado ao recuperar o valor.

 **Importações** 

```
require 'vendor/autoload.php';
use Aws\SecretsManager\SecretsManagerClient;
use Aws\Exception\AwsException;
```

 **Código de exemplo** 

```
$client = new SecretsManagerClient([
    'profile' => 'default',
    'version' => '2017-10-17',
    'region' => 'us-west-2'
]);
$secretName = 'MySecretName';
$secret = json_encode([
    "username" => getenv("SMDEMO_USERNAME"),
    "password" => getenv("SMDEMO_PASSWORD"),
]);
try {
    $result = $client->putSecretValue([
        'SecretId' => $secretName,
        'SecretString' => $secret,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    echo $e->getMessage();
    echo "\n";
}
```

## Alternar o valor de um segredo existente no Secrets Manager
<a name="rotate-the-value-to-an-existing-secret-in-asm"></a>

Para alternar o valor de um segredo existente armazenado no Secrets Manager, use uma função de rotação do Lambda e a operação [RotateSecret](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-secretsmanager-2017-10-17.html#rotatesecret).

Antes de começar, crie uma função do Lambda para alternar o segredo. O [Catálogo de exemplos de código da AWS](https://docs.aws.amazon.com/code-samples/latest/catalog/code-catalog-lambda_functions-secretsmanager.html) atualmente contém vários exemplos de código do Lambda para alternar as credenciais de banco de dados do Amazon RDS.

**nota**  
Para obter mais informações sobre a alternância de segredos, consulte [Alternar seus segredos do AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/rotating-secrets.html) no Guia do usuário do AWS Secrets Manager.

Depois de configurar a função do Lambda, configure uma nova rotação de segredos.

 **Importações** 

```
require 'vendor/autoload.php';

use Aws\SecretsManager\SecretsManagerClient;
use Aws\Exception\AwsException;
```

 **Código de exemplo** 

```
$client = new SecretsManagerClient([
    'profile' => 'default',
    'version' => '2017-10-17',
    'region' => 'us-west-2'
]);

$secretName = 'MySecretName';
$lambda_ARN = 'arn:aws:lambda:us-west-2:123456789012:function:MyTestDatabaseRotationLambda';
$rules = ['AutomaticallyAfterDays' => 30];

try {
    $result = $client->rotateSecret([
        'RotationLambdaARN' => $lambda_ARN,
        'RotationRules' => $rules,
        'SecretId' => $secretName,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    echo $e->getMessage();
    echo "\n";
}
```

Quando uma rotação for configurada, você poderá implementar uma rotação usando a operação [RotateSecret](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-secretsmanager-2017-10-17.html#rotatesecret).

 **Importações** 

```
require 'vendor/autoload.php';

use Aws\SecretsManager\SecretsManagerClient;
use Aws\Exception\AwsException;
```

 **Código de exemplo** 

```
$client = new SecretsManagerClient([
    'profile' => 'default',
    'version' => '2017-10-17',
    'region' => 'us-west-2'
]);

$secretName = 'MySecretName';

try {
    $result = $client->rotateSecret([
        'SecretId' => $secretName,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    echo $e->getMessage();
    echo "\n";
}
```

## Excluir um segredo do Secrets Manager
<a name="delete-a-secret-from-asm"></a>

Para remover um segredo especificado do Secrets Manager, use a operação [DeleteSecret](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-secretsmanager-2017-10-17.html#deletesecret). Para evitar a exclusão de um segredo acidentalmente, um stamp DeletionDate é adicionado automaticamente ao segredo que especifica uma janela de tempo de recuperação na qual você poderá reverter a exclusão. Se não for especificado o tempo para a janela de recuperação, o tempo padrão é de 30 dias.

 **Importações** 

```
require 'vendor/autoload.php';

use Aws\SecretsManager\SecretsManagerClient;
use Aws\Exception\AwsException;
```

 **Código de exemplo** 

```
$client = new SecretsManagerClient([
    'profile' => 'default',
    'version' => '2017-10-17',
    'region' => 'us-west-2'
]);

$secretName = 'MySecretName';

try {
    $result = $client->deleteSecret([
        'SecretId' => $secretName,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    echo $e->getMessage();
    echo "\n";
}
```

## Informações relacionadas
<a name="related-information"></a>

Os exemplos do AWS SDK para PHP usam as seguintes operações REST da Referência de API do AWS Secrets Manager:
+  [CreateSecret](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_CreateSecret.html) 
+  [GetSecretValue](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_GetSecretValue.html) 
+  [ListSecrets](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_ListSecrets.html) 
+  [DescribeSecret](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_DescribeSecret.html) 
+  [PutSecretValue](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_PutSecretValue.html) 
+  [RotateSecret](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_RotateSecret.html) 
+  [DeleteSecret](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_DeleteSecret.html) 

Para obter mais informações sobre o uso do AWS Secrets Manager, consulte o [Guia do usuário do AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/).