https://repost.aws/knowledge-center/cloudformation-accidental-updates
Restrict user ability to delete or update resources in a CloudFormation stack
I don't want users to delete or update the resources in my AWS CloudFormation stack.
repost.aws
DeletionPolicy attribute
DeletionPolicy
DeletionPolicy
는 스택(Stack)에서 리소스를 삭제할 때의 동작을 정의하는 Policy이다.
DeletionPolicy
을 통해 리소스가 스택에서 삭제될 때, 삭제 대신 다른 동작을 하도록 설정할 수 있다.
데이터를 저장하는 리소스(예: RDS 데이터베이스, S3 버킷)에 주로 사용된다. (실수로 데이터를 다 날려보내면 안되니까)
DeletionPolicy options
DeletionPolicy 주요 옵션:
- Retain
: 스택이 삭제되어도 해당 리소스를 그대로 유지한다.
- Snapshot
: 스택이 삭제될 때 리소스의 Snapshot을 생성하여 데이터 복구를 가능하게 한다.
- Delete
: 리소스를 삭제한다 (default, 기본 값으로 설정되어있다)
[YAML 파일 예시]
CloudFormation 템플릿의 Resources에 DeletionPolicy: Ratain
을 추가한다.
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
DeletionPolicy attribute - AWS CloudFormation
DeletionPolicy attribute With the DeletionPolicy attribute you can preserve, and in some cases, backup a resource when its stack is deleted. You specify a DeletionPolicy attribute for each resource that you want to control. If a resource has no DeletionPol
docs.aws.amazon.com
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"
}
]
}
CloudFormation stack policies - AWS Prescriptive Guidance
CloudFormation stack policies Stack policies can help prevent stack resources from being unintentionally updated or deleted during a stack update. A stack policy is a JSON document that defines the update actions that can be performed on designated resourc
docs.aws.amazon.com
🤔 Developer 문제
개발팀이 하나의 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 전체에는 추가하지 않는다.
🤔 SysOps 문제
SysOps 관리자가 AWS CloudFormation을 사용하여 프로덕션 VPC에 서버리스 애플리케이션을 배포했습니다.
애플리케이션은 AWS Lambda 함수, Amazon DynamoDB 테이블, Amazon API Gateway API로 구성되어 있습니다.
이제 SysOps 관리자는 DynamoDB 테이블을 삭제하지 않고 AWS CloudFormation 스택을 삭제해야 합니다.
스택을 삭제하기 전에 어떤 조치를 취해야 합니까?
- CloudFormation 스택의 DynamoDB 리소스에 Retain 삭제 정책(DeletionPolicy: Retain)을 추가한다.
- CloudFormation 스택의 DynamoDB 리소스에 Snapshot 삭제 정책(DeletionPolicy: Snapshot)을 추가한다.
- AWS CloudFormation 스택에 종료 보호(Termination Protection)를 활성화한다.
- 애플리케이션의 IAM 정책을 업데이트하여 dynamodb:DeleteTable 액션을 거부(Deny)하는 정책을 추가한다.
정답
정답. 1번