Skip to content

CloudFormation 레지스트리 사용


CloudFormation 레지스트리를 사용하면 AWS 계정에서 사용할 수 있는 리소스, 모듈 및 후크와 같은 퍼블릭 및 프라이빗 익스텐션을 모두 관리할 수 있다. 현재 AWS 레지스트리에서 리소스 유형, 모듈, 후크 등의 익스텐션 유형을 사용할 수 있다. 레지스트리를 사용하면 AWS 제공 리소스를 사용하는 것과 같은 방식으로 AWS CloudFormation 템플릿에서 익스텐션을 더 쉽게 검색하고 프로비저닝할 수 있다.


1. 퍼블릭 및 프라이빗 익스텐션

익스텐션 유형은 퍼블릭 또는 프라이빗으로 등록된다. 현재 레지스트리에서는 다음과 같은 익스텐션 유형을 제공한다.

  • 리소스 유형 - CloudFormation의 스택을 사용하여 사용자 지정 로직을 리소스로 모델링하고 프로비저닝한다.

  • 모듈 - 투명하고 관리 가능하며 반복 가능한 방식으로 스택 템플릿 전체에 포함할 리소스 구성을 패키징한다.

  • 후크 - 프로비저닝하기 전에 AWS 리소스의 구성을 사전에 검사한다.

1) 퍼블릭 익스텐션 유형

퍼블릭 익스텐션은 모든 CloudFormation 사용자가 사용할 수 있도록 레지스트리에 공개적으로 게시된 익스텐션이다. 여기에는 AWS 및 타사 익스텐션 게시자가 게시한 익스텐션이 포함된다.

퍼블릭 익스텐션에는 2가지 종류가 있다.

  • AWS 퍼블릭 익스텐션 - AWS가 게시한 익스텐션은 항상 퍼블릭이고 기본적으로 활성화되어 있으므로 계정에서 사용하기 전에 별도의 조치를 취하지 않아도 된다. 또한 AWS는 익스텐션의 버전 관리를 제어하므로 항상 사용 가능한 최신 버전을 사용하고 있다.

  • 타사 퍼블릭 익스텐션 - AWS 이외의 게시자가 일반적으로 사용할 수 있도록 만든 익스텐션이다.

자세한 내용을 알아보려면 퍼블릭 익스텐션 사용을 참조한다.

2) 프라이빗 익스텐션 유형

프라이빗 익스텐션은 AWS 계정에서 사용하기 위해 명시적으로 활성화한 타사 익스텐션이다.

프라이빗 익스텐션에는 2가지 종류가 있다.

  • 활성화된 프라이빗 익스텐션 - 사용자의 계정과 리전에 대해 활성화한 타사 익스텐션의 로컬 사본이다. 타사 퍼블릭 익스텐션을 활성화하면 CloudFormation은 계정 레지스트리에 해당 익스텐션의 로컬 사본을 생성한다.

  • 등록된 프라이빗 익스텐션 - 퍼블릭 CloudFormation 레지스트리에 나열되지 않은 프라이빗 익스텐션도 활성화할 수 있다. 이는 사용자가 직접 생성한 익스텐션 또는 조직이나 다른 타사에서 사용자와 공유한 익스텐션일 수 있다. 이러한 프라이빗 익스텐션을 계정에서 사용하려면 먼저 등록해야 한다. 익스텐션을 등록하면 계정의 CloudFormation 레지스트리에 익스텐션의 사본이 업로드되고 활성화된다.

자세한 내용을 알아보려면 프라이빗 익스텐션 사용을 참조한다.


2. CloudFormation 레지스트리를 통해 익스텐션 관리

CloudFormation 레지스트리를 사용하여 계정에서 다음과 같은 익스텐션을 관리한다.

  • 사용 가능하고 활성화된 익스텐션 보기

  • 프라이빗 익스텐션 등록

  • 퍼블릭 익스텐션 활성화

1) CloudFormation 콘솔에서 익스텐션 보기

  1. AWS Management Console에 로그인하여 https://console.aws.amazon.com/cloudformation에서 AWS CloudFormation 콘솔을 연다.

  2. CloudFormation 탐색 창의 Registry(레지스트리) 아래에서 보려는 익스텐션 범주를 선택한다.

    • Public extensions(퍼블릭 익스텐션)는 계정에서 사용할 수 있는 퍼블릭 익스텐션을 표시한다.

      a. Resource types(리소스 유형), Modules(모듈) 또는 Hooks(후크) 중 원하는 익스텐션 유형을 선택한다.

      b. AWS 또는 Third party(타사) 중 원하는 게시자를 선택한다.

      c. Filter(필터) 옵션을 사용하여 보려는 익스텐션을 추가로 선택한다.

    • Activated extensions(활성화된 익스텐션)는 계정에서 활성화된 퍼블릭 및 프라이빗 익스텐션을 표시한다.

      a. Resource types(리소스 유형), Modules(모듈) 또는 Hooks(후크) 중 원하는 익스텐션 유형을 선택한다.

      b. Filter(필터) 드롭다운 메뉴를 사용하여 보려는 익스텐션을 추가로 선택한다.

      • AWS - AWS에서 게시한 익스텐션을 나열한다. AWS에서 게시하는 익스텐션은 기본적으로 활성화되어 있다.

      • Third-party(타사) - 이 계정에서 활성화한 AWS 이외의 게시자의 모든 퍼블릭 익스텐션을 나열한다.

      • Registered(등록) - 이 계정에서 활성화한 모든 프라이빗 익스텐션을 나열한다.

    • Publisher(게시자)는 이 계정을 사용하여 게시한 모든 퍼블릭 익스텐션을 표시한다. 자세한 내용을 알아보려면 User Guide for Extension Development(익스텐션 개발을 위한 사용 설명서)의 Publishing extensions(익스텐션 게시)를 참조한다.

  3. 익스텐션 이름을 검색하거나 선택하여 익스텐션 세부 정보를 본다.


3. AWS Config에서 리소스 유형 기록

AWS Config가 프라이빗 리소스 유형을 자동으로 추적하고 해당 리소스의 변경 내용을 구성 항목으로 기록하도록 지정할 수 있다. 이렇게 하면 이러한 프라이빗 리소스 유형에 대한 구성 기록을 볼 수 있을 뿐 아니라 AWS Config Rules 규칙을 작성하여 구성 모범 사례를 확인할 수 있다. 후크 연장에는 AWS Config가 필요하다.

AWS Config가 프라이빗 리소스 유형을 자동으로 추적하도록 하려면 다음과 같이 한다.

  • CloudFormation을 통해 리소스를 관리한다. 여기에는 CloudFormation을 통한 모든 리소스 생성, 업데이트 및 삭제 작업이 포함된다.

    Note

    IAM 역할을 사용하여 스택 작업을 수행하는 경우 해당 IAM 역할에 다음 AWS Config 작업을 호출할 권한이 있어야 한다.

  • 모든 리소스 유형을 기록하도록 AWS Config를 구성한다. 자세한 내용을 알아보려면 AWS Config 개발자 안내서의 타사 리소스에 대한 구성 기록을 참조한다.

    Note

    AWS Config는 필수 및 쓰기 전용으로 정의된 속성을 포함하는 프라이빗 리소스의 기록을 지원하지 않는다.

    설계상, 쓰기 전용으로 정의된 리소스 속성은 AWS Config 구성 항목을 생성하는 데 사용되는 스키마에서 반환되지 않는다. 따라서 쓰기 전용과 필수로 정의된 속성을 포함하면 필수 속성이 없으므로 구성 항목 생성에 실패한다. 구성 항목을 생성하는 데 사용할 스키마를 보려면 DescribeType 작업의 schema 속성을 검토할 수 있다.

구성 항목에 대한 자세한 내용을 알아보려면 AWS Config 개발자 안내서의 구성 항목을 참조한다.

1) 구성 항목에 민감한 속성이 기록되지 않도록 방지

리소스 유형에는 구성 항목의 일부로 기록하지 않으려는 암호, 시크릿 또는 기타 민감한 데이터와 같은 민감한 정보를 고려하는 속성이 포함될 수 있다. 구성 항목에 속성이 기록되지 않도록 하려면 리소스 유형 스키마의 writeOnlyproperties 목록에 해당 속성을 포함할 수 있다. writeOnlyproperties로 나열된 리소스 속성은 사용자가 지정할 수 있지만 read 또는 list 요청에 의해 반환되지 않는다.

자세한 내용을 알아보려면 CloudFormation Command Line Interface User Guide(CloudFormation Command Line Interface 사용 설명서)의 Resource Provider Schema(리소스 공급자 스키마)를 참조한다.


4. 혼동된 대리자 방지

혼동된 대리자 문제는 작업을 수행할 권한이 없는 엔터티가 권한이 더 많은 엔터티에 작업을 수행하도록 강요할 수 있는 보안 문제이다. AWS에서는 교차 서비스 가장으로 인해 혼동된 대리자 문제가 발생할 수 있다. 교차 서비스 가장은 한 서비스(호출하는 서비스)가 다른 서비스(호출되는 서비스)를 호출할 때 발생할 수 있다. 호출하는 서비스는 다른 고객의 리소스에 대해 액세스 권한이 없는 방식으로 작동하게 권한을 사용하도록 조작될 수 있다. 이를 방지하기 위해 AWS에서는 계정의 리소스에 대한 액세스 권한이 부여된 서비스 보안 주체를 사용하여 모든 서비스에 대한 데이터를 보호하는 데 도움이 되는 도구를 제공한다.

AWS CloudFormation가 익스텐션에 다른 서비스를 제공하는 권한을 제한하려면 리소스 정책에서 aws:SourceArnaws:SourceAccount 글로벌 조건 컨텍스트 키를 사용하는 것이 좋다. 만약 aws:SourceArn 값에 Amazon S3 버킷 Amazon 리소스 이름(ARN)과 같은 계정 ID가 포함되어 있지 않은 경우 권한을 제한하려면 두 전역 조건 컨텍스트 키를 모두 사용해야 한다. 두 전역 조건 컨텍스트 키와 계정을 포함한 aws:SourceArn 값을 모두 사용하는 경우, aws:SourceAccount 값 및 aws:SourceArn 값의 계정은 동일한 정책 명령문에서 사용할 경우 반드시 동일한 계정 ID를 사용해야 한다. 하나의 리소스만 교차 서비스 액세스와 연결되도록 허용하려는 경우 aws:SourceArn을(를) 사용한다. 해당 계정의 모든 리소스가 교차 서비스 사용과 연결되도록 허용하려는 경우 aws:SourceAccount을(를) 사용한다.

aws:SourceArn 값은 익스텐션의 ARN을 사용해야 한다.

혼동된 대리자 문제로부터 보호하는 가장 효과적인 방법은 리소스의 전체 ARN이 포함된 aws:SourceArn 글로벌 조건 컨텍스트 키를 사용하는 것이다. 익스텐션의 전체 ARN을 모를 경우 또는 여러 익스텐션을 지정하는 경우 ARN의 알 수 없는 부분에 대해 와일드카드(*)를 포함한 aws:SourceArn 글로벌 조건 컨텍스트 키를 사용한다. 예: arn:aws:cloudformation:*:123456789012:*.

Note

레지스트리 서비스의 경우 CloudFormation은 AWS Security Token Service(AWS STS)를 호출하여 계정에서 역할을 수임한다. 이 역할은 RegisterType 작업의 ExecutionRoleArnLoggingConfig 작업에 설정된 LogRoleArn에 대해 구성된다.

다음 예는 AWS CloudFormation에서 aws:SourceArnaws:SourceAccount 글로벌 조건 컨텍스트 키를 사용하여 혼동된 대리자 문제를 방지하는 방법을 보여준다.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": [
          "resources.cloudformation.amazonaws.com"
        ]
      },
      "Action": "sts:AssumeRole",
      "Condition": {
        "StringEquals": {
          "aws:SourceAccount": "123456789012"
        },
        "StringLike": {
          "aws:SourceArn": "arn:aws:cloudformation:us-east-1:123456789012:type/resource/Organization-Service-Resource/*"
        }
      }
    }
  ]
}

References