AWS 리소스 제어 정책(RCPs) 설명: 리소스 수준 보안을 위한 실용 가이드

발행: (2026년 1월 14일 오후 05:54 GMT+9)
10 min read
원문: Dev.to

Source: Dev.to

위에 제공된 링크에 있는 전체 글을 번역하려면, 번역할 텍스트를 그대로 복사해서 여기 붙여 주세요.
링크 자체와 코드 블록, URL은 그대로 두고, 본문 내용만 한국어로 번역해 드리겠습니다.

현대 AWS 거버넌스와 리소스 제어 정책 (RCP)

현대 AWS 환경은 규모에 맞게 설계되었습니다 — 여러 계정, 공유 팀, 경계를 넘어 운영해야 하는 리소스 등. 이러한 유연성은 민첩성을 제공하지만, 중요한 거버넌스 문제도 발생시킵니다: IAM 정책과 SCP가 올바르게 구성되어 있어도 리소스 정책이 잘못 구성될 수 있어, 과도한 접근 권한이나 의도치 않은 노출이 발생합니다.

이 격차를 정확히 해소하기 위해 **리소스 제어 정책 (Resource Control Policies, RCP)**이 만들어졌습니다.

RCP가 하는 일

RCP는 리소스에 직접 적용되는 절대적인 규칙을 강제할 수 있게 합니다, 예를 들어:

  • 이 리소스는 조직 외부에 절대 공유될 수 없습니다.
  • 승인된 정체성만이 여기에서 역할을 맡을 수 있습니다.
  • 관리자조차도 이 규칙을 어길 수 없습니다.

Note: RCP는 IAM이나 SCP를 대체하는 것이 아니라 — 마지막으로 부족한 거버넌스 레이어를 채웁니다.

레이어제어 대상
IAM조직 가드레일 내에서 어떤 주체가 어떤 리소스에 어떤 작업을 수행할 수 있는지
SCP계정 또는 OU 내 IAM 주체가 가질 수 있는 최대 권한; 제한은 하지만 권한을 부여하지는 않음
RCP계정 또는 OU 내 특정 리소스에 적용될 수 있는 최대 권한, 호출 주체와 무관하게

실습 데모

⚠️ RCP를 프로덕션에 적용하기 전에 개발/테스트 계정에서 테스트하는 것이 강력히 권장됩니다. 루트 레벨에 직접 적용하지 마세요.

이 데모에서는 두 가지 시나리오를 다룹니다:

  1. 모든 S3 버킷에 대해 HTTPS‑only 접근을 강제
  2. 외부 계정이 KMS 키를 복호화하지 못하도록 방지 (또는 KMS 키의 교차 계정 사용 비활성화)

시나리오 #1 – S3 버킷에 HTTPS‑only 적용

1. 과도하게 허용된 버킷 정책 생성

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "S3rcppolicy",
      "Effect": "Allow",
      "Principal": "*",
      "Action": [
        "s3:GetObject",
        "s3:GetObjectVersion",
        "s3:PutObject"
      ],
      "Resource": "arn:aws:s3:::XXXX-XXXXX-demo-XXXXXXX/*"
    }
  ]
}

버킷에는 RCP HTTPS test 라는 텍스트가 들어 있는 간단한 파일이 있습니다.

2. HTTP와 HTTPS 모두 동작하는지 확인

  • HTTP 테스트

    HTTP 접근

  • HTTPS 테스트

    HTTPS 접근

3. 계정 수준에 HTTPS만 허용하는 RCP 적용

S3에 연결된 RCP

4. 결과 확인

  • HTTP 요청 → AccessDenied (스크린샷에 강조 표시)

    RCP 적용 후 HTTP 오류

  • HTTPS 요청 → 성공

핵심: RCP가 적용되면 기존 및 새로 생성된 리소스 정책 모두에 적용됩니다. RCP를 강제하기 전에 조직 전체에서 의도적으로 공유되는 리소스가 무엇인지 반드시 검토하세요.

시나리오 #2 – 외부 계정이 KMS 키를 복호화하지 못하도록 방지

이 예제는 키 정책에 화이트리스트된 주체를 제외한 모든 주체에 대해 AWS KMS 키 복호화를 차단합니다.

1. 교차 계정 접근을 허용하는 샘플 KMS 키 정책

{
  "Sid": "Enable IAM User Permissions",
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::714XXXXXXXXX:root"
  },
  "Action": "kms:*",
  "Resource": "*"
},
{
  "Sid": "Allow use of the key",
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::599XXXXXXXXX:root"
  },
  "Action": [
    "kms:Encrypt",
    "kms:Decrypt",
    "kms:ReEncrypt*",
    "kms:GenerateDataKey*",
    "kms:DescribeKey"
  ],
  "Resource": "*"
}

2. RCP 없이 복호화 테스트

  • 파일 암호화계정 A(714XXXXXXXXX)의 KMS 키 사용

  • 파일 복호화 – 두 계정 모두 시도

    • 계정 A(동일 계정) – 성공
    • 계정 B(599XXXXXXXXX) – 교차 계정 권한 때문에 성공

계정 A 복호화 결과

KMS 복호화 – 계정 A

계정 B 복호화 결과 (생략)

KMS 복호화 – 계정 B

3. 교차 계정 복호화를 금지하는 RCP 적용

계정 또는 OU 수준에 적절한 RCP를 연결하면 계정 B가 키를 복호화하려는 시도는 거부되고, 계정 A는 여전히 키를 사용할 수 있습니다.

결과: RCP가 “최대 권한”을 강제하여 교차 계정 복호화를 차단합니다.

” KMS 리소스에 대한 규칙을 적용하여 외부 주체에 대한 관대함 키 정책을 무시합니다.

요약

  • IAM누가 무엇을 어떤 리소스에 대해 할 수 있는지를 제어합니다.
  • SCP는 계정/OU에서 IAM 주체가 가질 수 있는 최대 권한을 설정합니다.
  • RCP는 호출자와 관계없이 특정 리소스에 적용될 수 있는 최대 권한을 설정합니다.

RCP를 추가하면 최종 거버넌스 격차를 메우게 되며, 완벽하게 작성된 IAM 정책이나 SCP조차도 잘못 구성된 리소스 정책에 의해 우회될 수 없도록 보장합니다. 비생산 계정에서 충분히 테스트한 후, 가장 중요한 리소스를 보호하도록 전략적으로 배포하십시오.

kms-policy

계정 A에 RCP 적용

{
  "Effect": "Deny",
  "Principal": "*",
  "Action": [
    "kms:Decrypt",
    "kms:Encrypt",
    "kms:GenerateDataKey"
  ],
  "Resource": "*",
  "Condition": {
    "StringNotEquals": {
      "aws:PrincipalAccount": [
        "714XXXXXXXXX"
      ]
    }
  }
}

kms-deny

리소스 제어 정책(RCP) 구현 전

RCP는 데이터 경계를 설계하기 위한 강력한 AWS 기능입니다. 데이터 보호, 침해 차단, 실제 클라우드 경계 강제화가 가능하지만, 부주의하게 배포하면 프로덕션 워크로드를 중단시킬 수도 있습니다.

중요한 워크로드에 적용하기 전에 RCP를 생성하고 테스트해야 합니다.

어떤 RCP를 배포하기 전에 반드시 정식 테스트 사이클을 거치세요.

테스트 항목

AWS IAM Access Analyzer를 사용하여 다음을 파악합니다:

  • 현재 공개된 리소스는 무엇인지
  • 외부와 공유된 리소스는 무엇인지
  • 교차 계정 접근에 의존하는 아이덴티티는 누구인지

이를 통해 정상적인 접근 경로가 끊어지는 일을 방지할 수 있습니다.

그 다음 정책 논리를 검증합니다:

  • IAM Policy Simulator
  • 제어된 샌드박스 계정
  • 프로덕션 전에 개발 OU

또한 Service Control Policies (SCP)와 RCP 간의 상호 작용도 테스트하세요.

기억하세요: 둘 중 하나에서 거부가 발생하면 접근이 차단됩니다.

탐색할 기타 고영향 RCP 사용 사례

AWS는 훌륭한 실제 RCP 패턴 저장소를 유지하고 있습니다:

  • 🔐 조직 전용 STS 접근 강제
  • 🔑 OIDC 제공자 잠금 (GitHub Actions 등)
  • 🗄️ 데이터 스토어 외부 공유 차단

신중하게 사용하면 RCP는 데이터 접근, 교차 계정 신뢰 및 구성 오류와 관련된 마지막 남은 격차를 메워줍니다.

좋은 보안은 사람을 신뢰하는 것이 아니라, 실수가 발생해도 안전하게 유지되는 시스템을 설계하는 것입니다.

읽어 주셔서 감사합니다 — 이 내용이 더 안전하고 탄력적인 AWS 환경을 구축하는 데 도움이 되길 바랍니다.

Back to Blog

관련 글

더 보기 »

기술은 구원자가 아니라 촉진자다

왜 사고의 명확성이 사용하는 도구보다 더 중요한가? Technology는 종종 마법 스위치처럼 취급된다—켜기만 하면 모든 것이 개선된다. 새로운 software, ...

에이전틱 코딩에 입문하기

Copilot Agent와의 경험 나는 주로 GitHub Copilot을 사용해 인라인 편집과 PR 리뷰를 수행했으며, 대부분의 사고는 내 머리로 했습니다. 최근 나는 t...