기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
보안 암호에 대한 액세스 제한
보안이 최우선 순위입니다 AWS. AWS Well-Architected Framework에서 보안 암호 저장 및 사용 모범 사례에서는 보안 암호에 대한 액세스를 제한하고, 보안 암호에 대한 액세스를 로깅 및 감사하고, 사용자에게 액세스 권한을 부여하는 대신 API를 통해 액세스할 것을 권장합니다. 이는이 가이드에서 앞서 설명한 를 사용하여 무작위 암호를 생성하는 AWS Secrets Manager 것과 관련이 있습니다.
과거에는 데이터베이스, 타사 APIs, 토큰 및 기타 보안 암호에 인증하는 데 사용되는 자격 증명이 소스 코드 또는 환경 파일에 포함되었을 수 있습니다. 많은 조직에서 데이터베이스 관리자는 여전히 모든 데이터베이스 사용자 자격 증명에 액세스할 수 있습니다. 하지만 그렇지 않으면 더 안전합니다. 다음을 수행하는 것이 좋습니다.
-
AWS 서비스 역할 또는 사용자의 IAM 역할에 연결된 AWS Identity and Access Management (IAM) 정책을 통해 Secrets Manager에 대한 액세스를 제한합니다. 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 }