

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 限制對秘密的存取
<a name="limiting-access"></a>

安全性是 的首要任務 AWS。在 AWS Well-Architected Framework 中，[Store and use Secrets 安全](https://docs.aws.amazon.com/wellarchitected/latest/framework/sec_identities_secrets.html)最佳實務建議您限制對秘密的存取、記錄和稽核對秘密的存取，而且您可以透過 API 取得存取權，而不是將存取權授予人員。這與使用之前在本指南中討論[的使用產生隨機密碼 AWS Secrets Manager](generate-random-passwords.md)有關。

過去，用於驗證資料庫、第三方 APIs、字符和其他秘密的登入資料可能已內嵌在原始碼或環境檔案中。在許多組織中，資料庫管理員仍然可以存取所有資料庫使用者登入資料。不過，如果不這樣做會更安全。我們建議您：
+ 透過連接至 [AWS 服務角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html)或使用者 IAM 角色的 AWS Identity and Access Management (IAM) 政策，限制對 Secrets Manager 的存取。 [https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html)
+ 僅透過對 Secrets Manager 的 API 呼叫，擴展 Secrets Manager 中秘密的程式設計存取。
+ 避免使用硬式編碼的秘密。
+ 請勿在變數中傳遞登入資料值。
+ 確保秘密直接由應用程式或基礎設施使用，而不是由人類使用者使用。

下列程式碼範例顯示您可以在建立資料庫時用來保護敏感資料的方法。建立資料庫時，您可以要求使用者輸入做為密碼，然後輪換密碼，也可以從頭使用隨機密碼。從一開始產生隨機密碼可協助您更安全地處理和管理登入資料。

下列程式碼片段會建立資料庫資源，並從本機變數`password = local.passwddata`擷取密碼。

```
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
}
```

下列程式碼片段會建立隨機密碼或接受使用者提供的密碼。 會將此密碼Terraform儲存為本機變數，以便您稍後在程式碼中使用此密碼變數。

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