[AWS] CloudFormation 실수로 리소스를 삭제하는 것을 방지하는 방법 (CloudFormation DeletionPolicy, Stack Policy)
https://repost.aws/knowledge-center/cloudformation-accidental-updates
DeletionPolicy attribute
DeletionPolicy
DeletionPolicy
는 스택(Stack)에서 리소스를 삭제할 때의 동작을 정의하는 Policy이다.
DeletionPolicy
을 통해 리소스가 스택에서 삭제될 때, 삭제 대신 다른 동작을 하도록 설정할 수 있다.
데이터를 저장하는 리소스(예: RDS 데이터베이스, S3 버킷)에 주로 사용된다. (실수로 데이터를 다 날려보내면 안되니까)
DeletionPolicy options
DeletionPolicy 주요 옵션:
Retain
- 스택이 삭제되어도 해당 리소스를 그대로 유지한다.Snapshot
- 스택이 삭제될 때 리소스의 Snapshot을 생성하여 데이터 복구를 가능하게 한다.Delete
- 리소스를 삭제한다 (default, 기본 값으로 설정되어있다)
[YAML 파일 예시]
AWSTemplateFormatVersion: '2010-09-09'
Resources:
MyBucket:
Type: AWS::S3::Bucket
DeletionPolicy: Retain
즉, DeletionPolicy
는 중요한 리소스를 실수로 삭제하는 것을 방지하거나, 삭제 시 백업(스냅샷)을 생성하여 데이터 손실을 막기 위해 사용된다.
공식 문서: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-deletionpolicy.html
CloudFormation stack policies
Stack Policy
Stack Policy는 특정 AWS 리소스에 대한 변경(업데이트나 삭제)을 제어하여, 실수로 인해 중요한 리소스가 수정되거나 삭제되는 것을 방지하는 정책이다.
- Stack Policy를 설정함으로써 개발 팀이 AWS 리소스를 업데이트하는 것을 제한 할 수 있다.
- 이로써 스택을 업데이트하는 동안 의도치 않은 리소스를 변경이나 재생성을 방지할 수 있다
- Stack Policy는 특정 동작을 Allow하거나 Deny할 수 있다.
Configuring stack policies
Stack Policy 예시
Stack Policy를 설정할 때, Effect
, Action
, Principal
, Resource
를 포함해야된다.
(선택적으로 Condition
추가 가능)
MyDatabase라는 RDS 리소스에 대해 모든 업데이트를 거부하는 Stack Policy
{
"Statement": [
{
"Effect": "Deny",
"Action": "Update:*",
"Principal": "*",
"Resource": "LogicalResourceId/MyDatabase"
}
]
}
🤔 문제
개발팀이 하나의 AWS CloudFormation 템플릿을 사용하여 웹 애플리케이션을 유지 관리하고 있습니다. 이 템플릿에는 웹 서버와 Amazon RDS 데이터베이스가 정의되어 있습니다. 팀은 이 CloudFormation 템플릿을 사용해 서로 다른 환경에 스택을 배포하고 있습니다. 최근의 애플리케이션 배포 중 개발자가 주 개발 데이터베이스를 삭제하고 재생성하는 실수를 하여 데이터 손실이 발생했습니다. 팀은 앞으로 이러한 데이터베이스의 실수로 인한 삭제를 방지할 필요가 있습니다.
데이터베이스의 의도치 않은 삭제를 방지하기 위한 해결책을 선택하세요. (정답 2개)
- 데이터베이스 리소스에 Retain 값을 가진 CloudFormation Deletion Policy 속성을 추가합니다.
- CloudFormation stack policy을 업데이트하여 데이터베이스에 대한 업데이트를 방지합니다.
- 데이터베이스를 Multi-AZ 배포로 수정합니다.
- 웹 애플리케이션과 데이터베이스 배포를 위한 CloudFormation 스택 세트를 생성합니다.
- 스택에 Retain 값을 가진 CloudFormation Deletion Policy 속성을 추가합니다.
정답
정답. 1번, 2번
5번이 틀린 이유는 Deletion Policy는 개별의 리소스에 추가하는 것이다. Stack 전체에는 추가하지 않는다.