

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 보안 암호에 대한 액세스 제한
<a name="limiting-access"></a>

보안이 최우선 순위입니다 AWS. AWS Well-Architected Framework에서 [보안 암호 저장 및 사용](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
}
```