Secrets Manager 비밀 접근 정책 점검

비밀정보에 접근할 주체와 작업을 필요한 범위로 제한하세요.

설명

Secrets Manager 비밀의 리소스 정책에서 주체나 작업을 너무 넓게 허용하면 비밀번호, 토큰, API 키에 대한 불필요한 접근이 가능해질 수 있습니다. 비밀 조회 권한과 변경·삭제 같은 관리 권한을 구분해 필요한 역할만 허용하세요.

실제 접근은 정책 조건, 다른 권한 통제와 필요한 KMS 권한에도 달려 있습니다. 비밀에 연결된 리소스 정책의 Resource: "*"는 그 비밀을 뜻하므로, 이 값만으로 계정의 모든 비밀에 대한 권한을 의미하지는 않습니다.

잠재적 영향

  • 불필요한 조회 권한으로 비밀정보가 유출되면 연결된 데이터베이스나 다른 서비스도 영향을 받을 수 있습니다.
  • 과도한 변경·삭제 권한은 비밀을 사용하는 서비스의 중단이나 인증 실패로 이어질 수 있습니다.

해결 방법

  • Principal을 승인된 역할로 제한하고 조회·교체·관리 목적에 맞는 작업만 허용하세요.
  • 리소스 정책과 IAM·KMS 권한을 함께 검토하고 필요한 접근 조건을 설정하세요.
  • 정상 사용과 미승인 접근 차단을 확인하세요. 실제 비밀 유출이 확인되면 값을 교체하고 사용하는 서비스도 갱신하세요.

예시

같은 비밀의 리소스 정책을 좁히는 발췌입니다. 역할 ARN은 실제 승인된 역할로 바꾸세요. 비밀 값 저장과 필요한 KMS 권한은 별도로 구성해야 합니다.

변경 전

hcl
resource "aws_secretsmanager_secret" "app_secret" {
  name = "not_secure_secret"
}

resource "aws_secretsmanager_secret_policy" "app_secret_policy" {
  secret_arn = aws_secretsmanager_secret.app_secret.arn

  policy = <<POLICY
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": "secretsmanager:*",
      "Resource": "*"
    }
  ]
}
POLICY
}

모든 AWS 주체에 secretsmanager:*를 허용합니다. 실제 적용되는 통제와 함께 검토하고 불필요한 허용을 제거하세요.

변경 후

hcl
resource "aws_secretsmanager_secret" "app_secret" {
  name = "not_secure_secret"
}

resource "aws_secretsmanager_secret_policy" "app_secret_policy" {
  secret_arn = aws_secretsmanager_secret.app_secret.arn

  policy = <<POLICY
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::123456789012:role/app-runtime"
      },
      "Action": "secretsmanager:GetSecretValue",
      "Resource": "*"
    }
  ]
}
POLICY
}

같은 비밀에 대해 지정한 역할의 GetSecretValue만 허용합니다. 이 정책 외의 권한과 키 접근도 검토해야 합니다.

참조