Amazon Web Services 한국 블로그

AWS Control Tower 업데이트 — 데이터 레지던시를 위한 리전 거부 및 가드 레일

규제가 엄격한 산업 및 공공 부문의 고객과 같은 많은 고객은 데이터가 저장되고 처리되는 위치를 제어하려고 합니다. AWS는 이미 현지 법률 및 규정을 준수하기 위한 많은 도구와 기능을 제공하고 있지만, 데이터 레지던시 요구 사항을 단일 및 다중 계정 환경에 적용할 수 있는 제어 기능으로 변환하는 간소화된 방법을 제공하려고 합니다.

오늘부터 AWS Control Tower를 사용하여 가드 레일이라고 하는 데이터 레지던시 예방탐지 제어 기능을 배포할 수 있습니다. 이러한 가드 레일은 AWS Control Tower에서 빌드 및 관리하는 서비스 제어 정책(SCP)을 통해 AWS API에 대한 액세스를 제한함으로써 원치 않는 AWS 리전에 리소스를 프로비저닝하는 것을 예방합니다. 이러한 방식으로 인프라 수준에서 선택한 리전 외부에 콘텐츠를 생성하거나 리전 외부로 콘텐츠를 전송할 수 없습니다. 이 맥락에서 콘텐츠는 처리 또는 저장을 위해 AWS에 호스트되는 소프트웨어(머신 이미지 포함), 데이터, 텍스트, 오디오, 비디오 또는 이미지일 수 있습니다. 예를 들어 독일의 AWS 고객은 프랑크푸르트 외부 리전의 AWS 서비스에 대한 액세스를 거부할 수 있습니다. 단, AWS Identity and Access Management(IAM)AWS Organizations와 같은 글로벌 서비스는 예외입니다.

또한 AWS Control Tower는 기본 AWS 서비스 옵션에서 데이터 레지던시를 추가로 제어할 수 있는 가드 레일(예를 들어 Amazon Simple Storage Service(Amazon S3) 교차 리전 복제 차단 또는 인터넷 게이트웨이 생성 차단)을 제공합니다.

AWS Control Tower 관리에 사용되는 AWS 계정은 새로운 리전 거부 설정에 의해 제한되지 않습니다. 리전 거부를 활성화하기 전에 원치 않는 리전에 데이터가 있는 경우 해당 계정을 수정에 사용할 수 있습니다.

탐지 가드 레일은 AWS Config 규칙을 통해 구현되며 허용해서는 안 되는 예기치 않은 구성 변경을 추가로 탐지할 수 있습니다.

애플리케이션 수준에서 데이터 레지던시에 대한 공동 책임 모델을 계속 유지하지만, 이러한 제어를 통해 인프라 및 애플리케이션 팀이 AWS에서 수행할 수 있는 작업을 제한할 수 있습니다.

AWS Control Tower에서 데이터 레지던시 가드 레일 사용
새로운 데이터 레지던시 가드 레일을 사용하려면 AWS Control Tower를 사용하여 랜딩 존을 생성해야 합니다. 자세한 내용은 AWS Control Tower 랜딩 존 계획을 참조하세요.

사용 가능한 새로운 제어 기능을 모두 살펴보려면 AWS Control Tower 콘솔의 왼쪽 창에서 [가드 레일(Guardrails)]을 선택한 다음, [데이터 레지던시(Data Residency)] 범주에서 확인할 수 있습니다. 여기서는 [동작(Behavior)]을 기준으로 결과를 정렬합니다. [예방(Prevention)] 동작이 있는 가드 레일은 SCP로 구현됩니다. [탐지(Detection)] 동작이 있는 가드 레일은 AWS Config 규칙으로 구현됩니다.

콘솔 스크린샷.

가장 흥미로운 가드 레일은 아마도 요청된 AWS 리전을 기반으로 AWS에 대한 액세스를 거부하는 가드 레일일 것입니다. 목록에서 가드 레일을 선택하고, 해당 가드 레일이 모든 조직 단위(OU)에 영향을 주며 여기에서 활성화할 수 없지만 랜딩 존 설정에서 활성화해야 하기 때문에 다른 가드 레일과 다르다는 것을 알았습니다.

콘솔 스크린샷.

[개요(Overview)] 아래의 [가드 레일 구성 요소(Guardrail components)]에는 이 가드 레일의 전체 SCP에 대한 링크가 있습니다. 그리고 이 설정을 사용하도록 지정해도 비관리 리전에 대해 계속 허용될 AWS API 목록을 볼 수 있습니다. 요구 사항에 따라 Amazon CloudFront 또는 AWS Global Accelerator와 같은 일부 서비스는 사용자 지정 SCP에 의해 추가로 제한될 수 있습니다.

[랜딩 존 설정(Landing zone settings)]에서 리전 거부 가드 레일은 현재 사용하도록 설정되어 있지 않습니다. [설정 수정(Modify settings)]을 선택한 다음, [리전 거부 설정(Region deny settings)]을 사용하도록 설정합니다.

콘솔 스크린샷.

리전 거부 설정 아래에는 랜딩 존에 의해 관리되는 AWS 리전 목록이 있습니다. 해당 리전은 리전 거부를 사용하도록 설정할 때 허용되는 리전이 됩니다.

콘솔 스크린샷.

여기서는 다음과 같이 네 개의 관리 리전이 있습니다. 두 개는 미국에, 두 개는 유럽에 있습니다.

  • 미국 동부(버지니아 북부) – 랜딩 존의 홈 리전이기도 함
  • 미국 서부(오레곤)
  • 유럽(아일랜드)
  • 유럽(프랑크푸르트)

하단에서 [랜딩 존 업데이트(Update landing zone)]를 선택합니다. 랜딩 존 업데이트를 완료하는 데 몇 분 정도 걸립니다. 이제 대부분의 AWS API는 관리 리전 중 하나로 연결되지 않으면 차단됩니다. 몇 가지 테스트를 해보겠습니다.

샌드박스 계정에서 리전 거부 테스트
AWS Single Sign-On을 사용함으로써 AWSAdministratorAccess 권한이 있는 샌드박스 계정을 사용하기 위한 AWS 자격 증명을 복사합니다. 터미널에서 해당 자격 증명을 사용하도록 환경 변수를 설정하는 명령을 붙여넣습니다.

콘솔 스크린샷.

이제 비관리 리전 중 하나인 미국 동부(오하이오)에서 새로운 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스를 시작하려고 합니다. 랜딩 존에서 기본 VPC는 ​​AWS Control Tower에서 관리하는 VPC로 대체됩니다. 인스턴스를 시작하려면 VPC 서브넷을 지정해야 합니다. 사용할 수 있는 서브넷 ID를 찾아보겠습니다.

aws ec2 describe-subnets --query 'Subnets[0].SubnetId' --region us-east-2

An error occurred (UnauthorizedOperation) when calling the DescribeSubnets operation:
You are not authorized to perform this operation.

예상대로 미국 동부(오하이오)에서 이 작업을 수행할 권한이 없습니다. 서브넷 ID를 전달하지 않고 EC2 인스턴스를 시작하려고 해보겠습니다.

aws ec2 run-instances --image-id ami-0dd0ccab7e2801812 --region us-east-2 \
    --instance-type t3.small                                     

An error occurred (UnauthorizedOperation) when calling the RunInstances operation:
You are not authorized to perform this operation.
Encoded authorization failure message: <ENCODED MESSAGE>

다시 말하지만, 권한이 없습니다. 이 문서에 설명된 대로 디코딩할 수 있는 인코딩된 권한 부여 실패 메시지에 추가 정보가 포함되어 있습니다.

aws sts decode-authorization-message --encoded-message <ENCODED MESSAGE>

디코딩된 메시지(간결함을 위해 생략함)는 요청에 대한 명시적 거부가 있었음을 알려 주며 거부를 야기한 전체 SCP를 포함하고 있습니다. 이 정보는 이러한 종류의 오류를 디버깅하는 데 매우 유용합니다.

이제 네 개의 관리 리전 중 하나인 미국 동부(버지니아 북부)에서 시도해보겠습니다.

aws ec2 describe-subnets --query 'Subnets[0].SubnetId' --region us-east-1
"subnet-0f3580c0c5e56c210"

이번에는 명령이 요청에 의해 반환된 첫 번째 서브넷의 서브넷 ID를 반환합니다. 이 서브넷을 사용하여 미국 동부(버지니아 북부)에서 인스턴스를 시작하겠습니다.

aws ec2 run-instances --image-id  ami-04ad2567c9e3d7893 --region us-east-1 \
    --instance-type t3.small --subnet-id subnet-0f3580c0c5e56c210

예상대로 인스턴스가 작동하며, 콘솔에서 실행 중인 EC2 인스턴스를 확인할 수 있습니다.

콘솔 스크린샷.

마찬가지로, 다른 AWS 서비스용 API는 리전 거부 설정에 따라 제한됩니다. 예를 들어 비관리 리전에서 S3 버킷을 생성할 수 없습니다.

콘솔 스크린샷.

버킷을 생성하려고 하면 액세스 거부 오류가 발생합니다.

콘솔 스크린샷.

예상대로 관리 리전에서는 S3 버킷 생성이 작동합니다.

누군가가 이 계정에 비관리 리전의 버킷에 대한 액세스 권한을 부여하더라도 해당 버킷에 어떠한 데이터도 복사할 수 없습니다.

다른 예방 가드 레일은 데이터 레지던시를 강화할 수 있습니다. 예를 들면 다음과 같습니다.

  • Amazon EC2, Amazon CloudFront, AWS Global Accelerator에 대한 교차 리전 네트워킹 허용 안 함
  • 고객이 관리하는 Amazon VPC 인스턴스에 대한 인터넷 액세스 허용 안 함
  • Amazon 가상 사설 네트워크(VPN) 연결 허용 안 함

이제 탐지 가드 레일이 어떻게 작동하는지 알아보겠습니다.

샌드박스 계정에서 탐지 가드 레일 테스트
샌드박스 OU의 모든 계정에 대해 다음 가드 레일을 사용하도록 설정합니다.

  • 모든 AWS 계정에서 Amazon EBS 스냅샷을 복원할 수 있는지 탐지
  • 인터넷 게이트웨이의 라우팅 테이블에 퍼블릭 경로가 있는지 탐지

이제 이러한 가드 레일에 위배되면 어떻게 되는지 알아보려고 합니다. EC2 콘솔에서 이전에 시작한 EC2 인스턴스의 볼륨에 대한 EBS 스냅샷을 생성합니다. 그런 다음, 해당 스냅샷을 모든 AWS 계정과 공유하도록 권한을 수정합니다.

콘솔 스크린샷.

그런 다음, VPC 콘솔에서 인터넷 게이트웨이를 생성하여 AWS Control Tower 관리형 VPC에 연결하고 프라이빗 서브넷 중 하나의 라우팅 테이블을 업데이트하여 인터넷 게이트웨이를 사용하도록 합니다.

콘솔 스크린샷.

몇 분 후 샌드박스 계정의 규정 미준수 리소스가 탐지 가드 레일에 의해 발견됩니다.

콘솔 스크린샷.

가드 레일에서 제공한 정보를 살펴보고 구성을 업데이트하여 문제를 수정합니다. 다중 계정 설정에서는 계정 소유자에게 연락하여 수정을 요청합니다.

가용성 및 요금
데이터 레지던시 가드 레일을 사용하여 AWS 리전의 리소스를 제어할 수 있습니다. 랜딩 존을 생성하려면 AWS Control Tower가 제공되는 리전 중 하나에서 시작해야 합니다. 자세한 내용은 AWS 리전 서비스 목록을 참조하세요. 이 기능에 대한 추가 비용은 없습니다. 사용된 다른 서비스(예: AWS Config)의 비용을 지불하면 됩니다.

이 기능은 데이터 레지던시 요구 사항을 해결하는 다중 계정 환경을 설정하기 위한 제어 프레임워크 및 가이드를 제공합니다. 사용 사례에 따라 새로운 데이터 레지던시 가드 레일의 하위 집합을 사용할 수 있습니다.

AWS Control Tower를 사용하여 데이터 레지던시 요구 사항에 따라 가드 레일을 설정하세요.

Danilo