유즈케이스 08 · 조직 가드레일

RCP: 조직 밖 접근 차단

버킷 정책 실수가 있어도 외부 접근을 막는 바닥판.

개발자DevOps 관리자외부 주체
STEP 1 / 4개발자

개발자: 실수로 연 버킷 정책

테스트하다가 Principal "*"로 GetObject를 열어 버렸다.

단계단계를 누르면 위 관계도가 그 단계로 바뀐다
  1. 테스트하다가 Principal "*"로 GetObject를 열어 버렸다.

    {
      "Effect": "Allow",
      "Principal": "*",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::zandi-assets/*"
    }
  2. 요청자가 내 조직이 아니고 AWS 서비스도 아니면 S3 · KMS 접근을 거부.

    {
      "Effect": "Deny",
      "Principal": "*",
      "Action": ["s3:*", "kms:*"],
      "Resource": "*",
      "Condition": {
        "StringNotEqualsIfExists": {"aws:PrincipalOrgID": "o-abc123"},
        "BoolIfExists": {"aws:PrincipalIsAWSService": "false"}
      }
    }
  3. 버킷 정책은 Allow지만 RCP의 Deny가 1번 관문에서 걸린다. 외부 principal에는 SCP가 안 먹히기 때문에 리소스 쪽 상한이 따로 필요한 것.

  4. dev Role의 요청은 PrincipalOrgID가 일치해서 RCP 조건에 해당하지 않는다.