Allowed AMIs로 Amazon EC2에서 AMI의 검색·사용 제어하기

Allowed AMIs로 Amazon EC2에서 AMI의 검색·사용 제어하기

AWS 계정 안의 사용자가 Amazon Machine Image(AMI)를 검색하고 사용하는 것을 제어하려면 Allowed AMIs 기능을 사용할 수 있어요. AMI가 계정 안에서 보이고 사용 가능해지기 위해 충족해야 하는 기준(criteria)을 지정해요. 기준을 활성화하면 사용자가 인스턴스를 실행할 때 지정된 기준을 준수하는 AMI만 보고 접근할 수 있어요. 예를 들어 신뢰할 수 있는 AMI 제공자 목록을 기준으로 지정하면, 이 제공자들의 AMI만 보이고 사용할 수 있어요.

출처: 문서

본문

Allowed AMIs 설정을 활성화하기 전에 **감사 모드(audit mode)**를 활성화해 어떤 AMI가 보이고 사용 가능해질지 미리 볼 수 있어요. 이렇게 하면 의도한 AMI만 계정의 사용자에게 보이고 사용 가능하도록 기준을 다듬을 수 있어요. 또한 describe-instance-image-metadata 명령을 사용해 지정된 기준을 충족하지 않는 AMI로 실행된 인스턴스를 찾을 수 있어요. 이 정보는 실행 구성을 준수하는 AMI로 업데이트할지(예: 시작 템플릿에서 다른 AMI 지정), 기준을 조정해 이 AMI들을 허용할지 결정하는 데 도움이 돼요.

Allowed AMIs 설정은 계정 수준에서 지정하며, 계정에서 직접 또는 선언적 정책(declarative policy)으로 지정해요. 이 설정은 AMI 사용을 제어하려는 각 AWS 리전에서 구성해야 해요. 선언적 정책을 사용하면 여러 리전과 여러 계정에 동시에 설정을 적용할 수 있어요. 선언적 정책을 사용 중이면 계정 안에서 설정을 직접 수정할 수 없어요. 이 주제는 계정 안에서 직접 설정을 구성하는 방법을 설명해요. 선언적 정책 사용에 대한 자세한 내용은 AWS Organizations 사용 설명서의 Declarative policies 항목을 참고하세요.

참고 — Allowed AMIs 기능은 공개 AMI 또는 계정과 공유된 AMI의 검색·사용만 제어해요. 계정이 소유한 AMI는 제한하지 않아요. 어떤 기준을 설정하든 계정이 만든 AMI는 항상 계정의 사용자가 검색하고 사용할 수 있어요.

Allowed AMIs의 주요 이점

  • 규정 준수 및 보안: 사용자는 지정된 기준을 충족하는 AMI만 검색·사용할 수 있어, 비준수 AMI 사용의 위험을 줄여요.
  • 효율적인 관리: 허용된 AMI 수를 줄이면 나머지 AMI를 관리하기가 더 쉽고 효율적이 돼요.
  • 중앙 집중식 계정 수준 구현: Allowed AMIs 설정을 계정 수준에서 직접 또는 선언적 정책을 통해 구성해, 전체 계정에서 AMI 사용을 제어하는 중앙 집중적이고 효율적인 방법을 제공해요.

목차

  • Allowed AMIs가 동작하는 방식
  • Allowed AMIs 구현 모범 사례
  • 필수 IAM 권한
  • Allowed AMIs 설정 관리

Allowed AMIs가 동작하는 방식

계정에서 검색·사용할 수 있는 AMI를 제어하려면 AMI를 평가할 기준 집합을 정의해요. 기준은 다음 다이어그램에 표시된 것처럼 하나 이상의 ImageCriterion으로 구성돼요.

구성에는 세 가지 수준이 있어요.

  1. 파라미터 값 — 다중 값 파라미터: ImageProviders, ImageNames, MarketplaceProductCodes. AMI는 파라미터 안의 아무 값을 매치하면 허용될 수 있어요. 예시: ImageProviders = amazon OR account 111122223333 OR account 444455556666(파라미터 값의 평가 로직은 다이어그램에 표시되지 않음). 단일 값 파라미터: ImageWatermarks, CreationDateCondition, DeprecationTimeCondition.
  2. ImageCriterion — 여러 파라미터를 AND 로직으로 그룹화해요. AMI는 ImageCriterion 안의 모든 파라미터를 매치해야 허용돼요. 예시: ImageProviders = amazon AND CreationDateCondition = 300일 이하.
  3. ImageCriteria — 여러 ImageCriterion을 OR 로직으로 그룹화해요. AMI는 아무 ImageCriterion에 매치하면 허용될 수 있어요. AMI가 평가되는 완전한 구성을 형성해요.

주제

  • Allowed AMIs 파라미터
  • Allowed AMIs 구성
  • 기준이 평가되는 방식
  • 한도 (Limits)
  • Allowed AMIs 작업

Allowed AMIs 파라미터

ImageCriterion을 만들기 위해 구성할 수 있는 파라미터는 다음과 같아요.

ImageProviders — AMI가 허용되는 AMI 제공자. 유효한 값은 AWS가 정의한 별칭과 AWS 계정 ID예요.

  • amazon – Amazon 또는 검증된 제공자가 만든 AMI를 식별하는 별칭.
  • aws-marketplace – AWS Marketplace의 검증된 제공자가 만든 AMI를 식별하는 별칭.
  • aws-backup-vault – 논리적으로 에어갭된(air-gapped) AWS Backup 볼트 계정에 있는 백업 AMI를 식별하는 별칭. AWS Backup 논리적 에어갭 볼트 기능을 사용한다면 이 별칭을 AMI 제공자로 포함해야 해요.
  • AWS 계정 ID – 하나 이상의 12자리 AWS 계정 ID.
  • none – 여러분의 계정이 만든 AMI만 검색·사용할 수 있음을 나타냄. 공개 또는 공유 AMI는 검색·사용할 수 없어요. 지정하면 다른 기준은 지정할 수 없어요.

ImageNames — 정확히 일치하거나 와일드카드(? 또는 *)를 사용하는 허용된 AMI 이름.

MarketplaceProductCodes — 허용된 AMI의 AWS Marketplace 제품 코드.

CreationDateCondition — 허용된 AMI의 최대 수명.

DeprecationTimeCondition — 허용된 AMI의 사용 중지 후 최대 기간.

ImageWatermarks — 워터마크 필터 목록. AMI의 워터마크가 필터 항목과 일치하면(OR 로직) AMI가 허용돼요. 각 필터는 다음 필드를 포함할 수 있어요.

  • WatermarkKey – 매치할 워터마크 키(account-id:watermark-name)
  • SourceImageRegion – 워터마크를 원래 연결한 AMI의 리전
  • MaximumDaysSinceSourceImageCreated – 워터마크를 적용했을 때 소스 AMI의 최대 수명
  • MaximumDaysSinceWatermarkCreated – 워터마크를 적용한 이후 최대 일수

각 기준의 유효한 값과 제약 조건은 Amazon EC2 API Reference의 ImageCriterionRequest를 참고하세요.

Allowed AMIs 구성

Allowed AMIs의 핵심 구성은 허용된 AMI에 대한 기준을 정의하는 ImageCriteria 구성이에요. 다음 JSON 구조는 지정할 수 있는 파라미터를 보여줘요.

{
    "State": "enabled" | "disabled" | "audit-mode",  
    "ImageCriteria" : [
        {
            "ImageProviders": ["string",...],
            "MarketplaceProductCodes": ["string",...],           
            "ImageNames":["string",...],
            "CreationDateCondition" : {
                "MaximumDaysSinceCreated": integer
            },
            "DeprecationTimeCondition" : {
                "MaximumDaysSinceDeprecated": integer
            },
            "ImageWatermarks": [
                {
                    "WatermarkKey": "string",
                    "SourceImageRegion": "string",
                    "MaximumDaysSinceSourceImageCreated": integer,
                    "MaximumDaysSinceWatermarkCreated": integer
                },...
            ]
         },
         ...
}

ImageCriteria 예시

다음 ImageCriteria 예시는 5개의 ImageCriterion을 구성해요. AMI는 이 ImageCriterion 중 아무 하나와 매치하면 허용돼요. 기준이 평가되는 방식에 대한 자세한 내용은 기준이 평가되는 방식 문서를 참고하세요.

{
    "ImageCriteria": [
        // ImageCriterion 1: Allow AWS Marketplace AMIs with product code "abcdefg1234567890"
        {
            "MarketplaceProductCodes": [
                "abcdefg1234567890"
            ]
        },
        // ImageCriterion 2: Allow AMIs from providers whose accounts are
        // "123456789012" OR "123456789013" AND AMI age is less than 300 days
        {
            "ImageProviders": [
                "123456789012",
                "123456789013"
            ],
            "CreationDateCondition": {
                "MaximumDaysSinceCreated": 300
            }
        },
        // ImageCriterion 3: Allow AMIs from provider whose account is "123456789014" 
        // AND with names following the pattern "golden-ami-*"
        {
            "ImageProviders": [
                "123456789014"
            ],
            "ImageNames": [
                "golden-ami-*"
            ]
        },
        // ImageCriterion 4: Allow AMIs from Amazon or verified providers 
        // AND which aren't deprecated
        {
            "ImageProviders": [
                "amazon"
            ],
            "DeprecationTimeCondition": {
                "MaximumDaysSinceDeprecated": 0
            }
        },
        // ImageCriterion 5: Allow AMIs that carry an approved watermark
        // from account "111122223333" AND the watermark was applied less than 90 days ago
        {
            "ImageWatermarks": [
                {
                    "WatermarkKey": "111122223333:prod-baseline",
                    "MaximumDaysSinceWatermarkCreated": 90
                }
            ]
        }
    ]
}

기준이 평가되는 방식

다음 표는 AMI가 허용되는지 결정하는 평가 규칙을 설명하고, 각 수준에서 AND 또는 OR 연산자가 적용되는 방식을 보여줘요.

평가 수준 연산자 Allowed AMI가 되기 위한 요건
ImageProviders, ImageNames, MarketplaceProductCodes, ImageWatermarks의 파라미터 값 OR AMI는 각 파라미터 목록의 값 중 최소 하나와 매치해야 함
ImageCriterion AND AMI는 각 ImageCriterion의 모든 파라미터와 매치해야 함
ImageCriteria OR AMI는 ImageCriterion 중 아무 하나와 매치해야 함

앞의 평가 규칙을 ImageCriteria 예시에 어떻게 적용하는지 살펴볼게요.

  • ImageCriterion 1: AWS Marketplace 제품 코드 abcdefg1234567890를 가진 AMI를 허용 또는
  • ImageCriterion 2: 다음 두 기준을 모두 충족하는 AMI를 허용
    • 계정 123456789012 또는 123456789013이 소유
    • 그리고 최근 300일 안에 생성됨 또는
  • ImageCriterion 3: 다음 두 기준을 모두 충족하는 AMI를 허용
    • 계정 123456789014이 소유
    • 그리고 golden-ami-* 패턴의 이름 또는
  • ImageCriterion 4: 다음 두 기준을 모두 충족하는 AMI를 허용
    • Amazon 또는 검증된 제공자(amazon 별칭으로 지정)가 게시
    • 그리고 사용 중지되지 않음(사용 중지 후 최대 일수가 0) 또는
  • ImageCriterion 5: 다음 워터마크와 일치하는 워터마크를 가진 AMI를 허용
    • 워터마크 키 111122223333:prod-baseline
    • 그리고 90일 전 이내에 워터마크를 적용

한도 (Limits)

ImageCriteria는 최대 다음을 포함할 수 있어요.

  • ImageCriterion 10개

각 ImageCriterion은 최대 다음을 포함할 수 있어요.

  • ImageProviders 값 200개
  • ImageNames 값 50개
  • MarketplaceProductCodes 값 50개
  • ImageWatermarks 값 50개

한도 예시

앞의 ImageCriteria 예시를 사용하면:

  • ImageCriterion이 5개 있어요. 한도 10개까지 최대 5개를 더 추가할 수 있어요.
  • 첫 번째 ImageCriterion에는 MarketplaceProductCodes 값이 1개 있어요. 한도 50개까지 이 ImageCriterion에 49개를 더 추가할 수 있어요.
  • 두 번째 ImageCriterion에는 ImageProviders 값이 2개 있어요. 한도 200개까지 이 ImageCriterion에 198개를 더 추가할 수 있어요.
  • 세 번째 ImageCriterion에는 ImageNames 값이 1개 있어요. 한도 50개까지 이 ImageCriterion에 49개를 더 추가할 수 있어요.

Allowed AMIs 작업

Allowed AMIs 기능에는 이미지 기준을 관리하기 위한 세 가지 운영 상태가 있어요: enabled, disabled, audit mode.

활성화 (Enabled)

Allowed AMIs가 활성화되면:

  • ImageCriteria가 적용돼요.
  • EC2 콘솔과 이미지를 사용하는 API(예: 이미지를 설명·복사·저장하거나 이미지를 사용하는 작업)에서 허용된 AMI만 검색 가능해요.
  • 허용된 AMI로만 인스턴스를 실행할 수 있어요.

비활성화 (Disabled)

Allowed AMIs가 비활성화되면:

  • ImageCriteria가 적용되지 않아요.
  • AMI 검색·사용에 제한이 없어요.

감사 모드 (Audit mode)

감사 모드에서는:

  • ImageCriteria가 적용되지만 AMI 검색·사용에는 제한이 없어요.
  • EC2 콘솔에서 각 AMI의 Allowed image 필드에 Yes 또는 No가 표시돼, Allowed AMIs가 활성화될 때 그 AMI가 계정 사용자에게 검색·사용 가능해질지 나타내요.
  • 명령줄에서 describe-image 작업의 응답에 "ImageAllowed": true 또는 "ImageAllowed": false가 포함돼, Allowed AMIs가 활성화될 때 그 AMI가 계정 사용자에게 검색·사용 가능해질지 나타내요.
  • EC2 콘솔에서 AMI Catalog는 Allowed AMIs가 활성화될 때 계정 사용자에게 검색·사용 가능해지지 않을 AMI 옆에 Not allowed를 표시해요.

Allowed AMIs 구현 모범 사례

Allowed AMIs를 구현할 때, 원활한 전환을 보장하고 AWS 환경에 잠재적인 중단을 최소화하려면 다음 모범 사례를 고려하세요.

  • 감사 모드 활성화 — Allowed AMIs를 감사 모드로 시작하세요. 이 상태는 접근을 실제로 제한하지 않고 기준의 영향을 받을 AMI를 볼 수 있게 해 주므로, 위험 없는 평가 기간을 제공해요.
  • Allowed AMIs 기준 설정 — 조직의 보안 정책, 규정 준수 요구 사항, 운영 요구 사항과 일치하는 AMI 제공자를 신중하게 정하세요.

참고 — Amazon ECS, Amazon EKS, AWS Lambda Managed Instances 같은 AWS 관리 서비스를 사용할 때는 AWS가 만든 AMI를 허용하도록 amazon 별칭을 지정할 것을 권장해요. 이 서비스들은 인스턴스를 실행하기 위해 Amazon이 게시한 AMI에 의존해요.

AMI에 대해 CreationDateCondition 제한을 설정할 때는 주의하세요. 지나치게 엄격한 날짜 조건(예: AMI가 5일 미만이어야 함)을 설정하면, AWS든 다른 제공자든 지정된 기간 안에 AMI가 업데이트되지 않을 경우 인스턴스 실행이 실패할 수 있어요.

더 나은 제어와 특이성(specificity)을 위해 ImageNames를 ImageProviders와 함께 사용할 것을 권장해요. ImageNames만 사용하면 AMI를 고유하게 식별하지 못할 수 있어요.

  • 예상 비즈니스 프로세스에 대한 영향 확인 — 콘솔이나 CLI를 사용해 지정된 기준을 충족하지 않는 AMI로 실행된 인스턴스를 식별할 수 있어요. 이 정보는 실행 구성을 준수하는 AMI로 업데이트할지(예: 시작 템플릿에서 다른 AMI 지정), 또는 기준을 조정해 이 AMI들을 허용할지 결정하는 데 도움이 돼요.
    • 콘솔: ec2-instance-launched-with-allowed-ami AWS Config 규칙을 사용해 실행 중 또는 중지된 인스턴스가 Allowed AMIs 기준을 충족하는 AMI로 실행되었는지 확인하세요. AMI가 기준을 충족하지 않으면 규칙은 NON_COMPLIANT, 충족하면 COMPLIANT예요. 이 규칙은 Allowed AMIs 설정이 enabled 또는 audit mode로 설정된 경우에만 작동해요.
    • CLI: describe-instance-image-metadata 명령을 실행하고 응답을 필터링해 지정된 기준을 충족하지 않는 AMI로 실행된 인스턴스를 식별하세요.
    • 콘솔과 CLI 지침은 허용되지 않은 AMI로 실행된 인스턴스 찾기 문서를 참고하세요.
  • Allowed AMIs 활성화 — 기준이 예상 비즈니스 프로세스에 부정적인 영향을 미치지 않을 것임을 확인한 뒤 Allowed AMIs를 활성화하세요.
  • 인스턴스 실행 모니터링 — 애플리케이션과 Amazon EMR, Amazon ECR, Amazon EKS, AWS Elastic Beanstalk 같은 사용 중인 AWS 관리 서비스 전체에서 AMI로 인한 인스턴스 실행을 계속 모니터링하세요. 예기치 않은 문제가 있는지 확인하고 Allowed AMIs 기준을 필요에 따라 조정하세요.
  • 새 AMI 파일럿 테스트 — 현재 Allowed AMIs 설정을 준수하지 않는 타사 AMI를 테스트하려면 AWS는 다음 접근 방식을 권장해요.
    • 별도의 AWS 계정 사용: 비즈니스 중요 리소스에 접근할 수 없는 계정을 만드세요. 이 계정에서 Allowed AMIs 설정이 활성화되지 않았거나, 테스트하려는 AMI가 명시적으로 허용되도록 하세요.
    • 다른 AWS 리전에서 테스트: 타사 AMI는 사용할 수 있지만 Allowed AMIs 설정을 아직 활성화하지 않은 리전을 사용하세요.

이 접근 방식들은 새 AMI를 테스트하는 동안 비즈니스 중요 리소스를 안전하게 유지하는 데 도움이 돼요.

필수 IAM 권한

Allowed AMIs 기능을 사용하려면 다음 IAM 권한이 필요해요.

  • GetAllowedImagesSettings
  • EnableAllowedImagesSettings
  • DisableAllowedImagesSettings
  • ReplaceImageCriteriaInAllowedImagesSettings

더 알아보기

  • Linux용 공유 AMI 사용 준비하기
  • Allowed AMIs 설정 관리하기