AMI 워터마크로 AMI 추적·식별하기
AMI 워터마크로 AMI 추적·식별하기 (Use AMI watermarks to track and identify AMIs)
AMI 워터마크는 비공개 AMI에 붙여서 출처(provenance)를 추적하고 거버넌스 정책을 적용하는 데 쓰는 식별자예요. 워터마크는 AMI 전체 수명 주기에 걸쳐 유지돼요.
출처: 문서
본문
워터마크는 다음 경우에도 그대로 전달돼요.
- 워터마크가 있는 AMI에서 시작한 실행 중인 인스턴스로 새 AMI를 만들면 새 AMI가 워터마크를 물려받아요.
- 워터마크가 있는 AMI를 복사하면 복사본도 워터마크를 지녀요.
- 워터마크가 있는 AMI를 다른 계정과 공유하면 수신자에게 워터마크가 계속 보여요.
주요 이점
- 계정과 리전에 걸쳐 출처를 추적해, 승인된 기본 이미지에서 파생된 AMI를 식별할 수 있어요.
- 계정 전반에서 관련 AMI를 필터링하고 찾을 수 있어요.
- AMI 소비자가 프로젝트나 조직과 연결된 신뢰할 수 있는 AMI를 발견·식별하는 데 도움을 줘요.
- 워터마크를 Allowed AMIs와 결합해 승인된 워터마크가 있는 AMI로만 인스턴스 시작을 제한함으로써 거버넌스를 적용할 수 있어요.
AMI 워터마크의 동작 방식 (How AMI watermarks work)
AMI 워터마크는 AMI에 붙이는 구조화된 식별자예요. 주요 특징은 다음과 같아요.
- 유지(Persists) – 워터마크를 AMI에 붙이면 모든 파생 AMI로 전달돼요.
- 소유자만(Owner-only) – AMI 소유자만 AMI에 워터마크를 붙일 수 있어요.
- 모두에게 공개(Visible to everyone) – AMI에 접근 권한이 있는 사람은 누구나 워터마크를 볼 수 있어요.
- 최대 5개(Limit of 5) – AMI 하나에 최대 총 5개의 워터마크를 붙일 수 있어요.
- 공용 AMI에서는 불가(Not available on public AMIs) – 공용 AMI에는 워터마크를 붙일 수 없고, 워터마크가 있는 AMI는 공용으로 만들 수 없어요.
- 필터 가능(Filterable) –
describe-images를 쓸 때 워터마크로 AMI를 필터링할 수 있어요.
워터마크 형식 (Watermark format)
워터마크는 다음 필드를 가진 구조화된 객체예요.
WatermarkKey– 워터마크의 고유 식별자로,account-id:watermark-name형식이에요. 계정 ID 부분은 AMI 소유자의 12자리 AWS 계정 ID이고, 워터마크 이름 부분은 사용자가 지정한 이름이에요.SourceImageRegion– 원래 워터마크를 붙인 AMI의 리전이에요.SourceImageId– 원래 워터마크를 붙인 AMI예요.SourceImageCreationDate– 원래 워터마크를 붙인 AMI의 생성 날짜예요.WatermarkCreationTime– 워터마크를 적용한 시점의 타임스탬프예요.
워터마크 이름은 3~128자여야 하며, 영숫자, 괄호(()), 대괄호([]), 공백, 마침표(.), 슬래시(/), 하이픈(-), 작은따옴표('), at 기호(@), 밑줄(_)을 포함할 수 있어요.
필요한 권한 (Required permissions)
AMI 워터마크를 다루려면 다음 IAM 권한이 필요해요.
ec2:AttachImageWatermark– AMI에 워터마크를 붙일 때.ec2:DetachImageWatermark– AMI에서 워터마크를 뗄 때.ec2:DescribeImages– AMI의 워터마크를 볼 때.
AMI에 워터마크 붙이기 (Attach a watermark to an AMI)
콘솔: 콘솔에서 AMIs를 선택하고, AMI를 선택한 뒤, Details 탭의 Watermarks 섹션에서 Manage watermarks를 선택하고 워터마크 이름을 입력한 다음 Attach를 선택해요.
AWS CLI: attach-image-watermark 명령을 사용해요.
aws ec2 attach-image-watermark \
--image-id ami-1111111111EXAMPLE \
--image-watermark-name "prod-baseline"
다음은 예시 출력이에요.
{
"WatermarkKey": "123456789012:prod-baseline"
}
PowerShell: Add-EC2ImageWatermark cmdlet을 사용해요.
Add-EC2ImageWatermark `
-ImageId ami-1111111111EXAMPLE `
-ImageWatermarkName "prod-baseline"
AMI 하나에는 최대 5개의 워터마크를 붙일 수 있어요.
AMI에서 워터마크 떼기 (Detach a watermark from an AMI)
콘솔: AMIs에서 AMI를 선택하고, Details 탭의 Watermarks 섹션에서 Manage watermarks를 선택한 뒤 제거할 워터마크를 선택하고 Remove를 선택해요.
AWS CLI: detach-image-watermark 명령을 사용해요.
aws ec2 detach-image-watermark \
--image-id ami-1111111111EXAMPLE \
--image-watermark-key "111122223333:prod-baseline"
PowerShell: Remove-EC2ImageWatermark cmdlet을 사용해요.
Remove-EC2ImageWatermark `
-ImageId ami-1111111111EXAMPLE `
-ImageWatermarkKey "111122223333:prod-baseline"
참고: AMI에서 워터마크를 떼도 이미 워터마크를 물려받은 파생 AMI에서는 제거되지 않아요. 워터마크가 유지되도록 하려면
ec2:DetachImageWatermark권한을 워터마크를 관리해야 하는 신뢰할 수 있는 관리자에게만 부여하세요.
AMI 워터마크 보기 (View AMI watermarks)
콘솔: AMIs에서 AMI를 선택하고 Details 탭의 Watermarks 섹션에서 워터마크를 확인해요.
AWS CLI: describe-images 명령을 사용해요.
aws ec2 describe-images \
--image-ids ami-046863d776a820ccd \
--region us-east-1
응답에 각 AMI의 ImageWatermarks 배열이 포함돼요.
{
"Images": [
{
"ImageId": "ami-046863d776a820ccd",
"Public": false,
"OwnerId": "123456789012",
...
"ImageWatermarks": [
{
"WatermarkKey": "111122223333:prod-baseline",
"Region": "us-east-1",
"SourceImageId": "ami-0b752bf1df193a6c4",
"SourceImageCreationDate": "2024-07-10T08:15:00",
"CreationDate": "2024-07-12T14:30:00"
},
{
"WatermarkKey": "222222222222:security-approved",
"Region": "eu-north-1",
"SourceImageId": "ami-12345678",
"SourceImageCreationDate": "2024-06-01T10:00:00",
"CreationDate": "2024-06-05T09:45:00"
}
]
}
]
}
PowerShell: Get-EC2Image cmdlet을 사용해요.
(Get-EC2Image -ImageId ami-046863d776a820ccd).ImageWatermarks
워터마크로 AMI 필터링하기 (Filter AMIs by watermark)
콘솔: AMIs에서 검색 표시줄의 Watermark key 필터를 선택하고 워터마크 키 값을 입력해요.
AWS CLI: describe-images 명령에 image-watermark-key 필터를 사용해요.
aws ec2 describe-images \
--filters "Name=image-watermark-key,Values=111122223333:prod-baseline"
이렇게 하면 접근 권한이 있는 AMI 중 지정한 워터마크를 지닌 모든 AMI가 반환돼요. 복사 작업으로 물려받은 파생 AMI도 포함돼요.
PowerShell: Get-EC2Image cmdlet에 -Filter 파라미터를 사용해요.
Get-EC2Image `
-Filter @{Name="image-watermark-key"; Values="111122223333:prod-baseline"}