설명
CloudFormation 스택 정책이 없거나 필요한 보호를 제공하지 않으면, 허용된 스택 업데이트가 중요한 리소스를 변경·교체하거나 제거할 수 있습니다. 데이터베이스처럼 복구 비용이 큰 리소스에는 업데이트 보호 범위를 명확히 정하는 것이 좋습니다.
스택 정책은 스택 업데이트 중의 작업을 제한합니다. DeleteStack이나 서비스 API를 통한 직접 변경을 막는 권한 정책은 아닙니다. 작업에서 정책을 생략했다고 기존 스택의 정책이 없어진다고 볼 수도 없습니다.
잠재적 영향
- 템플릿 변경으로 중요한 리소스가 교체되어 서비스 중단이나 데이터 손실이 발생할 수 있습니다.
- 업데이트 보호 범위가 잘못되면 필요한 변경까지 차단되어 운영이 지연될 수 있습니다.
해결 방법
보호할 논리 리소스 ID에 맞춰 스택 정책을 설정하세요. 인라인 JSON은 stack_policy_body에, 정책 파일 경로는 stack_policy에 지정하세요. 허용할 업데이트를 명시하고 중요한 리소스의 변경·교체·제거를 제한하세요. 변경 세트를 검토하고 IAM 권한, 스택 삭제 보호와 백업도 별도로 관리하세요.
예시
실제 템플릿 URL을 사용하고 PrimaryDatabase가 보호할 리소스의 논리 ID와 일치하는지 확인하세요. disable_rollback은 생성 실패 시 처리에 관한 별도 옵션이므로 운영 요구사항에 맞게 검토하세요.
변경 전
- name: CloudFormation 스택 생성
amazon.aws.cloudformation:
stack_name: ansible-cloudformation
state: present
region: us-east-1
disable_rollback: true
template_url: https://s3.amazonaws.com/my-bucket/cloudformation.template
이 작업에는 스택 정책이 없습니다. 실제 스택에 적용된 정책과 중요한 리소스의 보호 요구사항을 확인하세요.
변경 후
- name: CloudFormation 스택 생성
amazon.aws.cloudformation:
stack_name: ansible-cloudformation
stack_policy_body: |
{
"Statement": [
{
"Effect": "Allow",
"Action": "Update:*",
"Principal": "*",
"Resource": "*"
},
{
"Effect": "Deny",
"Action": "Update:*",
"Principal": "*",
"Resource": "LogicalResourceId/PrimaryDatabase"
}
]
}
state: present
region: us-east-1
disable_rollback: true
template_url: https://s3.amazonaws.com/my-bucket/cloudformation.template
일반 업데이트를 허용하면서 PrimaryDatabase의 모든 업데이트 작업을 거부합니다. 명시적 Allow 없이 Deny만 두면 다른 리소스의 업데이트도 기본적으로 거부되므로 정책 전체를 검토하세요.