단일 값 vs 다중 값 컨텍스트 키

단일 값 vs 다중 값 컨텍스트 키

조건 키가 요청에서 단일 값을 가지는지 여러 값을 가지는지에 따라 AWS가 조건을 평가하는 방식이 달라져요. 이 페이지는 두 경우의 평가 논리 차이를 설명해요.

출처: 문서

본문

정책 조건에서 컨텍스트 키가 단일 값을 가지는지(단일 값 컨텍스트 키) 여러 값을 가지는지(다중 값 컨텍스트 키)는 조건 평가에 중요해요.

단일 값 컨텍스트 키

대부분의 컨텍스트 키는 요청 컨텍스트에서 단일 값을 가져요. 예를 들어 aws:SourceIp는 요청이 시작된 IP 주소 하나를, aws:username은 사용자 이름 하나를 나타내요.

단일 값 키를 검사할 때는 단순 비교 연산자(StringEquals, NumericLessThan 등)를 사용하면 돼요. 조건 키 값과 정책의 값을 직접 비교해요.

다중 값 컨텍스트 키

일부 컨텍스트 키는 여러 값을 가질 수 있어요. 예를 들어 aws:TagKeys는 요청에 포함된 모든 태그 키를, s3:prefix는 특정 요청에서 여러 접두사를 나타낼 수 있어요. dynamodb:Attributes도 요청에 나열된 여러 속성을 나타내요.

다중 값 키를 검사할 때는 집합 연산자(set operators)를 사용해 평가 방식을 명시하는 게 필요해요.

  • ForAllValues — 요청의 모든 값이 정책의 값 중 하나와 매칭되어야 해요.
  • ForAnyValue — 요청의 값 중 하나 이상이 정책의 값과 매칭되어야 해요.

집합 연산자 없이 다중 값 키를 사용하면, 훨씬 보수적인(또는 예상치 못한) 기본 동작이 적용돼요. 정책 작성 시 다중 값 키에는 의도한 의미로 ForAllValues 또는 ForAnyValue를 명시하는 것이 안전해요.

예시 비교

aws:TagKeys가 요청에 environment와 costcenter 두 값을 가진 경우를 생각해 볼게요.

ForAnyValue를 쓰면 값 중 하나라도 매칭되면 조건이 참이에요.

"Condition": {
    "ForAnyValue:StringEquals": {
        "aws:TagKeys": "environment"
    }
}

이 경우 요청에 environment가 있으므로 참이에요.

ForAllValues를 쓰면 모든 값이 매칭되어야 해요.

"Condition": {
    "ForAllValues:StringLike": {
        "aws:TagKeys": ["environment", "costcenter*"]
    }
}

environment는 environment와, costcenter는 costcenter*와 매칭되므로 두 값 모두 매칭돼 참이에요.

집합 연산자에 대한 자세한 내용은 다중 값 컨텍스트 키용 집합 연산자를 참고하세요.

더 알아보기 (Learn more)