Service Role
- CloudFormation이 스택의 리소스를 생성/업데이트/삭제할 수 있도록 위임된 IAM 역할
- 사용자 대신 CloudFormation이 S3 버킷, EC2 인스턴스 등을 조작할 수 있게 해줌
- 사용자는 CloudFormation을 사용할 수는 있지만, 직접 리소스를 생성할 권한은 없음
- 대신 CloudFormation에게 역할을 맡기고, 사용자 본인은 최소한의 권한만 가짐
CAPABILITY
CloudFormation 템플릿을 실행할 때, IAM 리소스를 생성하거나 수정하려면 명시적으로 권한을 인정(capability)해야 한다
CAPABILITY_IAM
- CloudFormation 템플릿에서 IAM 사용자, 역할, 정책 등을 자동 생성/수정할 때 필요
- 생성되는 IAM 리소스에 명시적인 이름이 없는 경우
CAPABILITY_NAMED_IAM
CAPABILITY_IAM의 상위 버전- 사용자 정의 이름이 있는 IAM 리소스를 생성할 때 반드시 필요
CAPABILITY_AUTO_EXPAND
- 템플릿 내에 매크로(Macro) 또는 중첩된 스택(Nested Stack)이 있을 때 필요
- 동적 템플릿 변환을 허용함
- CloudFormation이 템플릿을 사전에 평가하여 변경 사항을 반영할 수 있도록 함
aws cloudformation create-stack \
--stack-name MyStack \
--template-body file://template.yaml \
--capabilities CAPABILITY_NAMED_IAM
삭제 정책 (Deletion Policy)
CloudFormation 스택에서 리소스가 삭제될 때의 동작을 제어하는 설정
기본적으로는 스택을 삭제하면 리소스도 같이 삭제됨
정책을 사용하면 동작을 다르게 만들 수 있음
| 정책 | 설명 | 사용 대상 예시 |
|---|---|---|
Delete |
기본값, 리소스 삭제 | EC2, 기본 리소스들 |
Retain |
리소스 보존, 직접 삭제해야 함 | S3, DynamoDB, 보안 그룹 등 |
Snapshot |
삭제 전 백업 스냅샷 생성 | EBS, RDS, ElastiCache, Redshift 등 |
주의사항
- S3 버킷은 비워야 삭제 가능 (비우는 작업은 자동 아님)
- Retain 설정된 리소스는 따로 수동 삭제 필요
- Snapshot은 지원하는 리소스에서만 사용 가능
스택 정책 (Stack Policy)
스택 정책은 CloudFormation 스택에 포함된 리소스가 업데이트되는 방식에 대해 정밀하게 제어할 수 있도록 해줌
- 목적: 특정 리소스를 업데이트로부터 보호하여 의도하지 않은 변경을 방지
기본 동작 (Default Behavior)
- 기본값: 모든 리소스가 업데이트 가능
스택 정책 예시
- 모든 리소스 업데이트 허용 (Allow updates for everything)
- 모든 리소스가 업데이트될 수 있도록 허용하는 설정
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "Update:*", "Resource": "*" } ] }- 특정 리소스 업데이트 거부 (Deny updates for specific resource)
예: 프로덕션 데이터베이스 보호ProductionDatabase리소스는 스택 업데이트 동안 절대 변경되지 않도록 보호
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "Update:*", "Resource": "arn:aws:rds:region:account-id:db:ProductionDatabase" } ] }
종료 보호 (Termination Protection)
목적: 실수로 클라우드 형식 스택을 삭제하는 것을 방지하는 안전장치
활성화: 종료 보호를 활성화하면 스택을 삭제할 수 없음
사용자 지정 리소스 (Custom Resources)
CloudFormation이 지원하는 리소스 타입들만 생성하거나 관리할 수 있음. 그런데 만약 CloudFormation에서 직접 지원하지 않는 리소스를 만들어야 한다면? 이때 사용하는 게 바로 Custom Resource
예를 들어, 온-프레미스 리소스나 타사 리소스의 경우, 또는 클라우드 형식의 생성/업데이트/삭제 과정에 사용자 지정 스크립트를 실행할 수 있다.
예시:
- 람다 함수 실행: 예를 들어, S3 버킷을 삭제하려고 할 때, 버킷이 비어 있어야 삭제가 가능하므로 람다 함수를 사용하여 버킷을 비우고 삭제를 진행할 수 있음.
Resources:
MyCustomResource:
Type: Custom::MyLambdaResource
Properties:
ServiceToken: arn:aws:lambda:region:account-id:function:my-lambda-function
BucketName: my-bucket
- ServiceToken: 사용자 지정 리소스를 처리할 람다 함수의 ARN을 지정
- 입력 파라미터: 람다 함수에 입력 데이터를 제공할 수 있음. 예) BucketName: my-bucket
동적 참조
클라우드 형식 템플릿 안에서 민감한 값(예: 비밀번호, API 키 등)을 직접 노출하지 않고, 외부 저장소(SSM Parameter Store, Secrets Manager 등)에서 값을 동적으로 불러오는 방법
| 참조 타입 | 설명 |
|---|---|
ssm |
SSM Parameter Store에 저장된 일반 텍스트 값 |
ssm-secure |
암호화된 SSM Parameter Store 값 (SecureString) |
secretsmanager |
Secrets Manager에 저장된 비밀 값 |
'Web' 카테고리의 다른 글
| AWS DOP - CloudFormation (3) (1) | 2025.04.19 |
|---|---|
| Route53에서 구입한 도메인 ACM발급 실패 (0) | 2025.04.19 |
| AWS DOP - CloudFormation (1) (0) | 2025.04.16 |
| AWS DOP - SDLC Automation 파트 개념 정리 (2) | 2025.04.15 |
| k8s 간략히 따라해보기 (0) | 2025.04.13 |