AWS Service Control Policies는 조직의 계정이 따를 수 있는 허용된 작업의 범위를 정의하여, 특정 액세스를 제한하고 규제 요구 사항을 충족하는 데 중요한 기능을 제공합니다. SCP는 특히 다양한 환경에서 컴퓨팅 격리, 운영 액세스 통제, API 감사 등 보안 요구 사항을 충족하는 데 효과적입니다.
일반적으로 고객들은 SCP를 사용하여 데이터 접근 및 변경을 제한하고, 민감한 작업에 대한 허용된 계정을 정의합니다. 이를 통해 고객은 규제 준수를 달성하고 보안 리스크를 줄이는 데 SCP가 중요한 역할을 합니다. AWS 조직 내에서 SCP를 통해 적용할 수 있는 다양한 보안 사례를 소개하고, 각 사례에 대한 세부 구성 방법 및 실전 코드를 제공함으로써 고객들이 AWS 환경을 더욱 안전하게 운영할 수 있도록 돕습니다.
SCP의 일반적인 사용 패턴은 AWS 계정의 액세스 권한을 중앙 집중적으로 관리하여 조직 전반에 걸친 일관된 보안 제어를 구현하는 것입니다. 이를 지원하기 위해 AWS는 콘솔을 통한 직관적인 관리 인터페이스, API를 활용한 자동화된 관리, AWS Config와 같은 모니터링 도구를 제공하여 SCP 정책을 쉽게 관리하고 적용할 수 있게 합니다.
이 글에서는 SCP가 어떤것인지 간단하게 이해하고, 보다 상세한 기능을 제한하기 위한 SCP 테스트 방법을 소개합니다.
예시를 통한 SCP 이해하기
SCP는 IAM과는 비슷하지만 다른 것으로 아래 시나리오에 따른 예시를 통해서 어떤 것이 다른지 확인합니다.
적용 시나리오
- Server Admin에 해당하는 User A가 있다. User A에게 IAM Policy로 EC2에 대한 “Admin”권한을 부여
- Account A에는 불필요한 비용이 발생하지 않도록 [EC2, RDS, S3]만 사용할 수 있도록 SCP를 작성하여 적용

적용 결과
- User A는 EC2에 대한 접근이 가능함
- 하지만, SCP에 의해 EC2가 아닌 것들에 대해서는 권한이 없어 엑세스 불가능함
- Ex. 로드 밸런서, Auto Scaling 그룹 등
그러면 위와 같이 SCP를 적용하기 위해서 SCP에는 어떤 구성요소가 있는지 알아보도록 하겠습니다.
SCP 구성요소 확인하기
AWS Organization에서 "정책" 메뉴를 통해서 아래와 같은 화면을 확인 할 수 있습니다.
- 정책 이름 : SCP의 이름을 작성하는 곳으로 아래의 규칙 안에서 자유롭게 작성하면 되나, 정책 이름을 통해 어떤것을 제한하는지 알 수 있는것이 가독성 편에서 좋습니다.
- Ex. DenyDB, DenyPublicAccess 등
- 정책 설명 : 단순하게 이름으로는 알아보기 어렵다면, 아래 설명에 작성이 가능합니다.
- SCP 이름이 DenyProduction01이라는 것이 있고 OU Prod에 적용할 경우 설명에는 "Admin 이외에는 접근이 불가하도록 하였습니다" 등으로 설명을 작성 할 수 있습니다.
- 태그 : 자원 식별을 위해 사용되는것입니다.

- Add Action Item : 정책이 허용하거나 거부할 AWS API 호출의 목록입니다.
- Ex. Delete Bucket, Delete Object, S3:* 등
- Add a resource : 정책이 적용되는 AWS 리소스를 지정하는 부분으로 S3 버킷, EC2 인스턴스, DynamoDB 테이블 등 AWS 서비스의 개별 객체를 가리킵니다.
- Ex. arn:aws:s3:::{BucketName} 등
- Add A condition : 정책이 적용되는 조건을 추가할 때 사용됩니다.
- Ex. "StringEquals": {"s3:x-amz-server-side-encryption": "AES256"} 등
지금까지 SCP에 대한 구성요소를 알아봤으며, SCP는 적용과 동시에 관리자/사용자에게 영향을 미치기 때문에 신중하게 적용해야 합니다.
그렇기에 SCP의 특징을 알아보도록 하겠습니다.
SCP를 적용하기 전 알아야하는 점
사용자의 행위에 대한 제한을 Account(계정) 또는 Organization(조직) 단위로 크게 적용하는 만큼 특징을 잘 알고 적용해야 합니다.
SCP 특징
- Organization(OU), Account, IAM에 대한 개념과 이해가 충분히 되어있어야 합니다.
- Organization, SCP를 활성화해야지만 SCP를 적용 할 수 있습니다.
- SCP는 Account당 최대 5개까지 적용 가능합니다.
- SCP는 5,120자까지만 작성이 가능합니다.
- SCP는 기본적으로 Deny를 지향하고 있어, 명시적으로 Allow를 선언하지 않으면 엑세스 거부 됩니다.
- SCP는 Management Account에는 적용되지 않습니다.
- 그 외 AWS Docs에서도 SCP가 적용되지 않는 목록에 대해서 제공합니다.
위 특징들 이외에도 SCP는 많은 특징을 갖고 있지만, 그 중 제약사항에 대해서 우회가 가능한 방법을 아래와 같이 해결 할 수 있는 것을 알아보겠습니다.
SCP 적용 개수 제한 해결하기
SCP는 Account당 최대 5개가 적용되는 제약사항에 대해서 상황별로 해결할 수 있는 방안은 아래와 같이 크게 2가지가 있습니다.
-
SCP의 내용을 합치는 방법
-
SCP는 최대 5,120자 까지 작성이 가능한 특징을 이용하여 다수의 SCP를 단일의 SCP로 합치는 방법이 가능합니다.
-
다만, 최대 적용 가능한 SCP 5개 모두 5,120자에 도달했거나, 합쳤을 경우에도 마찬가지 일 경우라면 아래 OU를 통한 상속을 이용해야 합니다.
-
-
OU를 통한 SCP 상속을 이용하는 방법
- Account에 직접 적용 가능한 SCP는 최대 5개이고, OU 또한 5개로 제한되어 있습니다.
- 하지만, 상위 OU에서 상속되는 SCP는 직접 적용하는 5개의 갯수에 포함되지 않기 때문에 아래와 같이 적용된 것을 확인 할 수 있습니다.
- Root에서 상속된 1개, LV1-OU에서 상속된 5개, LV2-OU에서 상속된 5개, LV3-OU에서 상속된 3개
- Account에 직접 적용된 5개
- SCP 총 19개가 해당 Account에 적용되었습니다.
지금까지는 SCP의 개념, 특징, 제약사항에 대해 확인하였습니다.
테스트 시나리오 2개를 기반으로 어떻게 SCP를 디테일하게 적용할 수 있는지 확인해보겠습니다.
디테일하게 SCP를 적용하기
AWS Console에서 보이는 메뉴나 기능들이 SCP를 작성할 때 사용되는 항목들과 완벽하게 일치하지 않을 수 있습니다.
SCP를 적용하여 요구 사항에 맞게 특정 API를 제한하려고 할 때, 아래와 같은 상황이 발생할 수 있습니다.
-
A 기능을 제한하기 위한 API A를 Deny 하였으나, 일부 기능이 작동하는 경우
-
API B, C 등을 함께 제한해야하는 경우가 있습니다.
-
-
A 기능을 제한하기 위한 API A를 Deny 하였으나, 다른 기능인 B, C가 정상 작동하지 못하는 경우
-
더 상세하게 컨트롤 가능한 API가 있는지 테스트 해봐야 하며 불가능한 경우도 존재합니다.
-
아래에서는 그러한 상황들이 AWS Console에서는 어떻게 보여지는지 간단히 예시를 통해 확인하고자 하며, 상세한 SCP를 적용하기 위해 아래와 같은 테스트 과정은 필수로 진행해야 합니다.
비용과 관련된 기능들을 제한하면서, 특정 기능 "절감형 플랜"에 대해서 상세하게 제한하기 위한 테스트 방법을 소개합니다.
테스트 환경
- 아래와 같은 SCP가 적용되어 있습니다.
- 절감형 플랜에 대한 기능이 제한하고자 하는 Action에서 큰 카테고리(Ex. Cost Explorer Service) 단위로 존재하지 않으며, "Cost Explorer Service" 하위에 엑세스 수준에서 "ce:GetSavingsPlansCoverage"와 같이 작은 단위로 더 상세한 API를 제공하고 있습니다.
- 테스트를 위해 해당하는 Cost Explrore Service와 관련된 API를 모두 "Deny"하도록 작성하였습니다.
- All actions로 모두 제한할 수 있지만, 어떤것이 원하는 기능(절감형 플랜)과 관련이 있는지 테스트 하기 위해 모든 항목을 직접 체크(작성)하는 형태로 테스트를 진행합니다.
위와같이 "Cost Explorer Service" 관련 API는 모두 제한된 상태에서 특정 기능에 대해 제외하는 테스트를 아래와 같이 진행합니다.
테스트1 : "절감형 플랜"의 기능 중 "권장사항"만 정상 접근이 가능하도록 SCP를 작성
현재 관련 API를 모두 제한하였기 떄문에, AWS Console에서 확인하면 아래와 같은 화면이 보이게 됩니다.
여기서 중요하게 봐야될 점은 화면 상단에 표시되는 경고(에러) 메시지를 참고하면 테스트를 조금 더 원활하게 할 수 있습니다.
- "AWS Cost Management 콘솔에서 ce:GetSavingsPlansPurchaseRecommendation 작업을 수행할 권한이 없습니다."
- 해당 경고 메시지에서 직접적으로 어떤 API가 필요한지를 알려주고 있습니다.

아래와 같이 동일한 페이지에 접속하였을 때 해당 기능에 대해 정상적인 접근이 가능함을 확인 할 수 있습니다.

테스트2 : "절감형 플랜"의 기능 중 "충당률 보고서"만 정상 접근이 가능하도록 SCP를 작성
현재 관련 API를 모두 제한하였기 떄문에, AWS Console에서 확인하면 아래와 같은 화면이 보이게 됩니다.
테스트1과 마찬가지로, 화면 상단에 표시되는 경고(에러) 메시지를 참고하면 테스트를 조금 더 원활하게 할 수 있습니다.
- "AWS Cost Management 콘솔에서 ce:GetSavingsPlansPurchaseRecommendation and ce:GetSavingsPlansCoverage" 2개에 대한 작업 권한이 없다고 표시되어있습니다.
절감형 플랜 : 충당률 보고서를 확인 하기 위해 AWS Console에서 경고된 메시지에서 알려준 API의 기능을 아래와 같이 Deny SCP에서 제외하면 아래와 같이 확인 할 수 있습니다.
아래와 같이 동일한 페이지에 접속하였을 때 해당 기능에 대해 정상적인 접근이 가능함을 확인 할 수 있습니다.
하지만, 이 테스트에서의 요구사항은 "충당률 보고서"만을 접근 가능하도록 제한하고자 하였으나 해당 기능을 위해 2개의 API를 제외하였습니다.
그렇기 때문에 아래와 같이 다른 기능인 "권장사항" 까지도 접근이 가능한 것을 확인 할 수 있습니다.
결론
SCP는 Organization을 통해 여러 Account를 관리할때 사용할 수 있기 때문에 단 한번의 적용에 따른 영향력이 크다는 것을 반드시 인지하고 적용해야 합니다.
그렇기 때문에 SCP를 통한 통제를 할때는 사전에 많은 테스트를 하여 확실하게 제한하고자 하는 기능에만 적용될 수 있도록 해야 합니다.
- SCP는 IAM과는 비슷하지만 다름을 인지하여야 합니다.
- SCP 적용시에는 제약사항(Account 당 최대 5개, 1개의 SCP는 최대 5,120자 등)을 고려해야 합니다.
- 모든 요구사항에 맞는 SCP를 적용할 수 없습니다.(테스트 2 참고)
AWS SCP에 대한 자세한 내용은 Docs에서 제공하므로 참고할 수 있습니다.