설명
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만 허용합니다. 이 정책 외의 권한과 키 접근도 검토해야 합니다.