

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Limitare l'accesso ai segreti
<a name="limiting-access"></a>

La sicurezza è la massima priorità in AWS. Nel AWS Well-Architected Framework, [la best practice Store and use secrets](https://docs.aws.amazon.com/wellarchitected/latest/framework/sec_identities_secrets.html) securely consiglia di limitare l'accesso ai segreti, registrare e controllare l'accesso ai segreti e di ottenere l'accesso tramite un'API anziché concedere l'accesso a una persona. Ciò è correlato alla [generazione di password casuali mediante utilizzo Gestione dei segreti AWS](generate-random-passwords.md), illustrata in precedenza in questa guida.

In passato, le credenziali utilizzate per l'autenticazione su database APIs, token di terze parti e altri segreti potevano essere incorporate nel codice sorgente o nei file di ambiente. In molte organizzazioni, gli amministratori dei database possono ancora accedere a tutte le credenziali utente del database. Tuttavia, è più sicuro se non lo fanno. Ti consigliamo di:
+ Limita l'accesso a Secrets Manager tramite una policy AWS Identity and Access Management (IAM) collegata a un [ruolo di AWS servizio](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html) o a un [ruolo IAM per gli utenti](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html).
+ Estendi l'accesso programmatico ai segreti in Secrets Manager solo tramite chiamate API a Secrets Manager.
+ Evita di usare segreti codificati.
+ Non passate valori di credenziali nelle variabili.
+ Assicurati che i segreti vengano utilizzati direttamente dall'applicazione o dall'infrastruttura, anziché da un utente umano.

Il seguente esempio di codice mostra un approccio che è possibile utilizzare per proteggere i dati sensibili durante la creazione di un database. Quando si crea il database, è possibile richiedere l'immissione dell'utente come password e quindi ruotare la password, oppure è possibile utilizzare una password casuale dall'inizio. La generazione di una password casuale fin dall'inizio può aiutarvi a gestire e gestire le credenziali in modo più sicuro.

Il seguente frammento di codice crea una risorsa di database e `password = local.passwddata` recupera la password da una variabile locale.

```
resource "aws_db_instance" "default" {
  count                  = var.createdb == true ? 1 : 0
  allocated_storage      = 20
  identifier             = var.identifier
  db_name                = var.databasename
  engine                 = "mysql"
  engine_version         = "8.0.32"
  instance_class         = "db.t3.micro"
  username               = "admin"
  password               = local.passwddata 
  skip_final_snapshot    = true
  publicly_accessible    = false
  vpc_security_group_ids = [aws_security_group.db.id]
  db_subnet_group_name   = aws_db_subnet_group.db.0.name
}
```

Il seguente frammento di codice crea una password casuale o accetta la password fornita dall'utente. Terraformmemorizza questa password come variabile locale in modo da poterla utilizzare più avanti nel codice.

```
locals {
  passwddata = var.passwddata != null ? var.passwddata : data.aws_secretsmanager_random_password.test.random_secrets
}
```