JSON 작성 가이드

정책은 자격 증명 기반 정책과 리소스 기반 정책으로 구분됩니다.

  • 자격 증명 기반 정책: 사용자, 그룹, 역할 등 액션을 수행하는 주체(Principal)에 부여되는 정책
  • 리소스 기반 정책: 리소스에 부여되는 정책으로써 특정 자원(Resource)에 대한 행동(Action)을 주체(Principal)에 한하여 허용 또는 거부(Effect)하도록 결정하는 정책

리소스 기반 정책

리소스 기반 정책은 지정된 주체(요청자)에게 해당 리소스에 대한 특정 작업을 수행할 수 있도록 권한을 부여하는 정책입니다. 따라서 리소스 기반 정책은 리소스에 정책을 직접 부여하며 정책에 정의된 사용자만 정책을 수행할 수 있으며, 정책이 부여된 사용자가 보안 주체가 됩니다.

주의
리소스 기반 정책은 Principal 속성을 통해 주체를 지정하므로 정책 생성 시 반드시 Principal 속성을 기입해야 합니다.
배경색 변경
{
  "Version": "2024-07-01",
  "Statement": [
        {
            "Sid": "statement1",
            "Action": ["object-store:UploadObject"],
            "Principal": {
                "scp":"srn:e::1234:::scp-iam:user/abc3d3442"
            },
            "Effect": "Allow",
            "Resource": "srn:e:::::object-store:bucket/foo"
        }
    ]
}
{
  "Version": "2024-07-01",
  "Statement": [
        {
            "Sid": "statement1",
            "Action": ["object-store:UploadObject"],
            "Principal": {
                "scp":"srn:e::1234:::scp-iam:user/abc3d3442"
            },
            "Effect": "Allow",
            "Resource": "srn:e:::::object-store:bucket/foo"
        }
    ]
}
# bucket 자원 fool에게 해당 bucket에 UploadObject 액션을 특정 사용자에 한해서 만 허용하는 예시

리소스 기반 정책 구조

리소스 기반 정책의 문법 구조와 항목별 설명은 다음과 같습니다.

배경색 변경
{
  "Version": "2024-07-01",                                 # 정책 문법의 버전(2024-07-01로 고정)
  "Statement": [
    {
      "Sid": "statement1",                                 # 정책 요소 ID
      "Effect": "Allow",                                   # 정책 효과
      "Action": ["iam:showUser"],                          # 정책에 정의되는 액션 내용
      "Principal": {
          "scp":"srn:e::1234:::iam:user/ROOT"              # 정책의 대상이 되는 주체
      }
      "Resource": "srn:e::kr-west1:::scp-iam:group/foo",   # 정책 액션이 허용되는 자원
      "Condition": {                                       # 정책 조건
          "StringEquals": {
            "iam:userName": [   
              "scp_test_user"
              ]
          }
        }     
    }
  ]
}
{
  "Version": "2024-07-01",                                 # 정책 문법의 버전(2024-07-01로 고정)
  "Statement": [
    {
      "Sid": "statement1",                                 # 정책 요소 ID
      "Effect": "Allow",                                   # 정책 효과
      "Action": ["iam:showUser"],                          # 정책에 정의되는 액션 내용
      "Principal": {
          "scp":"srn:e::1234:::iam:user/ROOT"              # 정책의 대상이 되는 주체
      }
      "Resource": "srn:e::kr-west1:::scp-iam:group/foo",   # 정책 액션이 허용되는 자원
      "Condition": {                                       # 정책 조건
          "StringEquals": {
            "iam:userName": [   
              "scp_test_user"
              ]
          }
        }     
    }
  ]
}
리소스 기분 정책 문법 구조
항목설명필수여부
Version
  • “정책 언어의 버전을 정의
  • 정책 버전과는 다른 의미로 사용되며 현재 버전은 ““2024-07-01”
필수
Statement정책의 주요 요소 정보필수
Statement.Sid정책 요소 ID ( 동일한 정책 내 요소에 대한 고유 ID)선택
Statement.Effect정책 적용 효과 ( Allow : 허용 /  Deny : 거부 ) 필수
Statement.Principal보안 주체필수
Statement.Action정책 적용 대상 액션 (Action/NotAction 중 하나는 반드시 기술)선택
Statement.Resource정책 판단 대상이 되는 자원 목록필수
Statement.Condition정책 판단 조건 정보선택
표. 정책 구조 항목별 설명

Version

Version은 정책 버전과는 다른 의미로 사용되며 현재 버전은 “2024-07-01"입니다.

{
   "Version" : "2024-07-01"
}

Statement

Statement는 정책의 주요 요소에 대한 정보로써 단일 요소 또는 개별 요소의 배열 형태로 정의할 수 있습니다.

"Statement" : [{statement}]
"Statement" : [{statement}, {statement}, {statement}]
참고
정책 요소가 2개 이상인 경우에는 배열 안에 여러 요소를 작성하세요. 이때 각 요소 간 동작은 OR로 정의됩니다.

Statement.Effect

Statement.Effect는 정책 동작의 허용 여부를 정의합니다.

"Effect" : "Allow" # 허용
"Effect" : "Deny"  # 거부
주의
대소문자를 구분하여 작성합니다.

Statement.Principal

Statement.Principal은 리소스 기반 정책에서 리소스에 대한 엑세스가 허용되거나 거부되는 주체를 지정합니다.
Principal 요소에서 지정할 수 있는 주체는 다음과 같습니다.

  • 루트 사용자
  • IAM 사용자
  • IAM 역할
  • 서비스 계정
주의
  • Principal은 하나 이상의 값을 가질 수 있으며, 하나 이상의 경우에는 배열로 작성하세요.
  • Principal은 와일드 카드(*)를 사용할 수 없습니다.
"Principal" : { "scp": "srn:e::1234:::iam:user/root_user_id" }

"Principal" : {
    "scp": [
        "srn:e::1234:::iam:user/abc33333",
        "srn:e::1234:::iam:user/kef12344"
    ]
}

"Principal": {
    "Service": [
      "apigateway.samsungsdscloud.com"
    ]
}

Statement.Action

Statement.Action은 정책 검사에 평가될 액션을 정의합니다.

  • 대소문자를 구분하여 작성하세요.
  • 액션은 action definition에 정의되어 있는 액션 이름의 형식대로 작성하세요.
주의
액션은 해당 리소스를 제공하는 서비스의 액션만 입력할 수 있습니다(단, 공통 기능에서 제공하는 태그 추가, 통합 자원 조회 등의 액션은 추가 가능).
"Action" : ["{action_expression}"]                               # 단일 액션
"Action" : ["{action_expression}", "{action_expression}", ... ]  # 다수 액션

Statement.Resource

Statement.Resource는 정책이 적용되는 특정 리소스 또는 리소스 집합을 지정하는 SRN을 정의합니다.

  • 대소문자를 구분하여 작성하세요.
  • resource_expression은 와일드 카드("*") 또는 SRN 형식으로 작성하세요.
주의
  • 리소스 기반 정책이 부여된 자원의 SRN이 반드시 포함되어야 하며, 해당 자원의 하위 자원이 있는 경우에는 하위 자원을 포함하여 작성할 수 있습니다.
  • 정책에 정의된 액션 정의(Action definition)에 기술된 자원에 한하여 Resources에 작성할 수 있으며, 정의되지 않은 자원의 경우에는 정책 평가 시 무시됩니다.
  • 하위 자원에도 와일드 카드(*)를 사용할 수 있습니다.
"Resource" : ["{resource_expression}"]                                 # 단일 자원
"Resource" : ["{resource_expression}", "{resource_expression}", ... ]  # 다수 자원
참고

resource_expression에선 SRN 각 요소에서도 wildcard 형태로 표시할 수 있으며, 요소의 종류에 따라 지원 형태가 달라집니다.

  • wildcard 미지원 SRN 요소 SRN 요소 중 offering, account_id, service-type은 wildcard를 지원하지 않습니다.
"Resource" : ["srn:*::9b7653f6f47a42e38055934a0575a813:kr-west1::scp-compute:instance/d12937a6db0940499fdb0e18ad57b101"]   # offering wildcard 표기 (X)
"Resource" : ["srn:e::*:kr-west1::scp-compute:instance/d12937a6db0940499fdb0e18ad57b101"]                                  # account wildcard 표기 (X)   
"Resource" : ["srn:e::9b7653f6f47a42e38055934a0575a813:kr-west1::*:instance/d12937a6db0940499fdb0e18ad57b101"]   # service type 표기 (X)   
  • wildcard 지원 SRN 요소
    • SRN 요소 중 resource-type, resource-identifier, region은 전체 또는 부분에 대한 wildcard를 지원합니다.
    • 부분 wildcard의 경우에는 “foo , foo*, foo, fo” 와 같은 표현식으로 작성 할 수 있습니다.
#  region 
"Resource" : ["srn:e::9b7653f6f47a42e38055934a0575a813:*::scp-compute:instance/d12937a6db0940499fdb0e18ad57b101"]     # 전체 (O)
"Resource" : ["srn:e::9b7653f6f47a42e38055934a0575a813:kr-*::scp-compute:instance/d12937a6db0940499fdb0e18ad57b101"]  # 부분 (O)

# resource-type
"Resource" : ["srn:e::9b7653f6f47a42e38055934a0575a813:kr-west1::scp-compute:*/d12937a6db0940499fdb0e18ad57b101"]     # 전체 (O)
"Resource" : ["srn:e::9b7653f6f47a42e38055934a0575a813:kr-west1::scp-compute:ins*/d12937a6db0940499fdb0e18ad57b101"]  # 부분 (O)

# resource-identifier
"Resource" : ["srn:e::9b7653f6f47a42e38055934a0575a813:kr-west1::scp-compute:instance/*"]                             # 전체 (O)
"Resource" : ["srn:e::9b7653f6f47a42e38055934a0575a813:kr-west1::scp-compute:instance/d12*101"]                       # 부분 (O)

단일 자원일 경우, user 조회에 대한 action_definition resources 정의 형태

배경색 변경
kind: scp-iam:action-definition
service: iam
paths:
  /v1/users/{user_id}:
    get:
      resources:
      - "iam:user":
           resource_id: "path['user_id']"  # 사용자 조회 액션에서 지원되는 자원의 범위
kind: scp-iam:action-definition
service: iam
paths:
  /v1/users/{user_id}:
    get:
      resources:
      - "iam:user":
           resource_id: "path['user_id']"  # 사용자 조회 액션에서 지원되는 자원의 범위
단일 자원의 경우, resources 정의 예시
배경색 변경
{
  "Version": "2024-07-01",
  "Statement": [
        {
            "Sid": "statement1",
            "Action": ["iam:showUser"], 
            "Effect": "Allow",
            "Resource": [ 
                    "*",  #  전체 자원에 대한 표현,
                    "srn:e:::::scp-iam:user/94c2ae8e7d5d471683a6135446183a12", # 특정 사용자 자원에 대한 표현 
                    "srn:e:::::scp-iam:policy/c23fb561c689455993874fa5d5ed4a2f" # 특정 정책 자원에 대한 표현 -> 사용자 조회 액션에서 해당 자원을 기술  경우 작성된 내용은 정책 평가  무시 된다.  
             ]  
        }
    ]
}
{
  "Version": "2024-07-01",
  "Statement": [
        {
            "Sid": "statement1",
            "Action": ["iam:showUser"], 
            "Effect": "Allow",
            "Resource": [ 
                    "*",  #  전체 자원에 대한 표현,
                    "srn:e:::::scp-iam:user/94c2ae8e7d5d471683a6135446183a12", # 특정 사용자 자원에 대한 표현 
                    "srn:e:::::scp-iam:policy/c23fb561c689455993874fa5d5ed4a2f" # 특정 정책 자원에 대한 표현 -> 사용자 조회 액션에서 해당 자원을 기술  경우 작성된 내용은 정책 평가  무시 된다.  
             ]  
        }
    ]
}
단일 자원 시 정책 자원의 정의 예시

여러 자원일 경우, user 정책 조회에 대한 action_definition resources 정의 형태

서로 다른 여러 자원을 정의할 경우, 정책에 작성된 자원 유형을 정의하세요.

주의
  • 정책 판단 시 액션 정의 파일에 정의된 자원을 기준으로 정책에 작성된 내용이 조건에 만족한 경우에만 성공으로 판단합니다.
  • 액션 정의 파일에 정의된 모든 자원이 정책에 작성되어 있지 않은 경우, 정책 조건에 맞지 않음으로 판단합니다.
kind: scp-iam:action-definition
service: iam
paths:
  /v1/user/{user_id}/policy/{policy_id}
    get:
      resources:
      - "iam:user":
         resource_id : "path['user_id']"
      - "iam:policy":
         resource_id : "path['policy_id']"
  • 정상: 특정 사용자의 특정 policy 예시
배경색 변경
{
  "Version": "2024-07-01",
  "Statement": [
        {
            "Sid": "statement1",
            "Action": ["iam:ShowUserPolicy"],
            "Effect": "Allow",
            "Resource": [
                    "srn:e:::::iam:user/94c2ae8e7d5d471683a6135446183a12",  # 특정 사용자 자원에 대한 표현
                    "srn:e:::::iam:policy/c23fb561c689455993874fa5d5ed4a2f" # 특정 정책 자원에 대한 표현
             ] 
        }
    ]
}
{
  "Version": "2024-07-01",
  "Statement": [
        {
            "Sid": "statement1",
            "Action": ["iam:ShowUserPolicy"],
            "Effect": "Allow",
            "Resource": [
                    "srn:e:::::iam:user/94c2ae8e7d5d471683a6135446183a12",  # 특정 사용자 자원에 대한 표현
                    "srn:e:::::iam:policy/c23fb561c689455993874fa5d5ed4a2f" # 특정 정책 자원에 대한 표현
             ] 
        }
    ]
}
정상: 특정 사용자의 특정 policy 예시
  • 정상: 모든 사용자의 특정 policy 예시

    배경색 변경
    {
      "Version": "2024-07-01",
      "Statement": [
            {
                "Sid": "statement1",
                "Action": ["iam:ShowUserPolicy"],
                "Effect": "Allow",
                "Resource": [
                        "srn:e:::::iam:user/*",                                 # 모든 사용자 자원에 대한 표현
                        "srn:e:::::iam:policy/c23fb561c689455993874fa5d5ed4a2f" # 특정 정책 자원에 대한 표현
                 ] 
            }
        ]
    }
    {
      "Version": "2024-07-01",
      "Statement": [
            {
                "Sid": "statement1",
                "Action": ["iam:ShowUserPolicy"],
                "Effect": "Allow",
                "Resource": [
                        "srn:e:::::iam:user/*",                                 # 모든 사용자 자원에 대한 표현
                        "srn:e:::::iam:policy/c23fb561c689455993874fa5d5ed4a2f" # 특정 정책 자원에 대한 표현
                 ] 
            }
        ]
    }
    정상: 모든 사용자의 특정 policy 예시

  • 비정상: user 자원 미기술 예시

    배경색 변경
    {
      "Version": "2024-07-01",
      "Statement": [
            {
                "Sid": "statement1",
                "Action": ["iam:ShowUserPolicy"],
                "Effect": "Allow",
                "Resource": [
                        "srn:e:::::iam:policy/c23fb561c689455993874fa5d5ed4a2f" # 특정 정책 자원에 대한 표현
                 ] 
            }
        ]
    }
    {
      "Version": "2024-07-01",
      "Statement": [
            {
                "Sid": "statement1",
                "Action": ["iam:ShowUserPolicy"],
                "Effect": "Allow",
                "Resource": [
                        "srn:e:::::iam:policy/c23fb561c689455993874fa5d5ed4a2f" # 특정 정책 자원에 대한 표현
                 ] 
            }
        ]
    }
    비정상: user 자원 미기술 예시

Statement.Condition

Statement.Condition은 정책 내에서 정책이 적용될 특정 대상에 대한 적용 조건을 정의합니다.

  • 대소문자를 구분하여 작성하세요.
  • 조건 연산자를 사용하여 정책에 정의된 자원의 속성 조건 키(또는 글로벌 조건 키), 값이 실제 요청(또는 자원의 속성)값과 비교하기 위한 조건 표현식을 작성하세요.
"Condition" : { 
	"{qualifier:}{operator}" : { 
    	"{condition-key}" : ["{condition-value}"],
	    "{condition-key2}" : ["{condition-value}"] 
	} 
}
항목필수 여부대소문자 구분설명
operator필수O조건 연산자
  • operator가 2개 이상 정의된 경우, AND로 동작
condition-key필수X정책 조건 키(글로벌 조건 키, 자원 속성 조건 키)
  • condition-key가 2개 이상 정의된 경우, AND로 동작
condition-value필수연산자에 따라 다름정책 조건값
qualifier선택O
  • 한정자, 요청 컨텍스트에서 추출된 조건의 값이 2개 이상일 경우
  • operand와 비교 조건에 대한 정의 방법
표. Statement.Condition 옵션 항목별 설명
안내

동일한 Condition Operator의 Condition Key에 Value가 2개 이상 정의된 경우, Value간 판단은 OR로 동작합니다. 단, Operator가 부정 연산자(Negative Operator) 유형인 경우에는 연산이 OR가 아닌 NOR로 동작합니다.

  • 긍정 연산자(Positive Operator) 유형 및 예시(userName이 “foo” 또는 “bar"이고 company가 “Samsung"인 경우)
    긍정 연산자(Positive Operator) 유형
"Condition": {
   "StringEquals": {
      "iam:userName": [  # User의 이름이 foo 또는 bar인 경우
          "foo", "bar"
      ], 
      "iam:userCompany": [  # User의 회사가 Samsung인 경우
          "Samsung"
      ]
   }
 }
  • 부정 연산자(Negative Operator) 유형 및 예시(IP가 1.1.1.1/24 와 2.2.2.2/24가 대역이 아닌 모든 IP)
    부정 연산자(Negative Operator) 유형
"Condition": {
   "NotIpAddress": {
      "scp:SourceIp": [  # 요청 IP가 1.1.1.1, 2.2.2.2 모두 아닌 경우 
          "1.1.1.1/24", "2.2.2.2/24"
      ]
   }
 }

조건 연산자(operator)

조건 연산자는 7가지(문자열, 숫자, 날짜, Bool, IP, SRN, Null) 연산자를 제공합니다.

  • 문자열 연산자 

    조건 연산자연산자 유형설명
    StringEquals긍정 연산자정확한 일치, 대소문자 구분
    StringNotEquals부정 연산자불일치
    StringEqualsIsIgnoreCase긍정 연산자정확한 일치, 대소문자 무시
    StringNotEqualsIsIgnoreCase부정 연산자불일치, 대소문자 무시
    StringLike긍정 연산자대소문자 구분 일치, 문자열 다중 문자 일치(*)인 와일드 카드를 값에 포함 가능
    StringNotLike부정 연산자대소문자 구분 불일치, 문자열 다중 문자 일치(*)인 와일드 카드를 값에 포함 가능 
    표. 문자열 연산자

  • 숫자 연산자

    조건 연산자연산자 유형설명
    NumericEquals  긍정 연산자일치
    NumericNotEquals부정 연산자불일치
    NumericLessThan  긍정 연산자미만 일치
    NumericLessThanEquals  긍정 연산자이하 일치
    NumericGreaterThan긍정 연산자초과 일치
    NumericGreaterThanEquals 긍정 연산자이상 일치
    표. 숫자 연산자

  • 날짜 연산자

    조건 연산자연산자 유형설명
    DateEquals  긍정 연산자특정 날짜 일치
    DateNotEquals부정 연산자불일치
    DateLessThan긍정 연산자특정 날짜/시간 이전에 일치
    DateLessThanEquals긍정 연산자특정 날짜/시간 또는 이전에 일치
    DateGreaterThan긍정 연산자특정 날짜/시간 이후에 일치
    DateGreaterThanEquals긍정 연산자특정 날짜/시간 또는 이후에 일치
    표. 날짜 연산자

  • Bool 연산자

    조건 연산자연산자 유형설명
    Bool긍정 연산자True, False 일치
    표. Bool 연산자

  • IP 연산자

    조건 연산자연산자 유형설명
    IpAddress  긍정 연산자지정된 IP 주소 또는 범위
    NotIpAddress부정 연산자지정된 IP 주소 또는 범위를 제외한 모든 IP 주소
    표. IP 연산자

  • SRN 연산자

    조건 연산자연산자 유형설명
    SrnEquals, SrnLike  긍정 연산자SRN 일치
    SrnNotEquals, SrnNotLike 부정 연산자SRN 불일치
    표. SRN 연산자

  • Null 연산자

    조건 연산자연산자 유형설명
    Null긍정 연산자
    • 키가 부재 하거나 값이 null인 경우 \→ True
    • 키가 존재하고 값이 null이 아닌 경우 \→ False
    표. Null 연산자

조건 키(condition-key)

조건 키는 전역 조건 키과 자원 속성 키로 구분됩니다.

참고
조건 키는 대소문자를 구분하지 않습니다.
전역 조건 키(Global condition key)

Samsung Cloud Platform에 사전 정의된 조건 키로써 요청 정보, 자원 공통 정보(ex-tag), 네트워크 정보 등의 데이터를 정의합니다.

조건 키데이터 유형단수/복수설명예제
scp:UserIdstringsingle요청 사용자 id“scp:UserId” : [“efda56a968cd45b2873d9bf5fab58e95”]
scp:UserNamestringsingle요청 사용자 명“scp:UserName” : [“foo”]
scp:MultiFactorAuthPresentboolstringMFA 인증을 통한 요청 여부“scp:MultiFactorAuthPresent” : [“True”]
scp:RequestedRegionstringsingle요청 region “scp:RequestedRegion” : [“kr-west1”]
scp:RequestAttribute/{AttributeKey}stringsingle요청 속성 값(AttributeKey)
  • body
  • query
  • header
“scp:RequestAttribute/body[‘foo’]” : [“true”]
scp:TagKeysstringsingle / multiple요청 태그 키“scp:TagKeys” : [“tag-key”]
scp:RequestTagstringsingle요청 태그 키 값“scp:RequestTag/tag-key” : [“tag-value”]
scp:ResourceTag/{TagKey}stringsingle자원의 태그 키 값“scp:ResourceTag/foo” : [“bab”]
scp:SourceIpip_addresssingle현재 요청하는 주체의 IP“scp:SourceIp” : [“1.1.1.1/24”]
scp:CurrentTimedatetimesingle요청 시간(UTC 기준, ISO 8601 format)“scp:CurrentTime” : [“2025-11-06T16:10:38Z”]
표. 지원되는 전역 조건 키의 유형 및 형식
자원 속성 키(Resource attribute key)

고유 자원에 대한 속성 키로써 자원의 속성값을 기준으로 조건값을 검사할 때 사용합니다.

"{service}:{resource_type}{attribute_name}"
안내
자원의 속성은 Resource definition에서 정의된 attributesabac:true인 대상의 속성에 한해서만 정의할 수 있으며 정의되지 않은 속성값을 입력할 경우, 해당 condition 정책은 무시됩니다(Not found).
  • 자원 속성명 사용 예시
"iam:userLastname"  (O) # 자원에 정의된 속성명 (service: iam, resource: user, attribute_name : lastname)
"iam:userLASTNAME"  (O) # 자원에 정의된 속성명 (대소문자 관계 없음)
"iam:userLast_name" (X) # 자원에 정의된 속성명이 아닌 경우 ㅎ
"iam:userEmail"     (X) # abac이 false인 경우 
"iam:state"         (X) # abac 필드가 정의되어 있지 않은 경우  
배경색 변경
kind: scp-resourcemanager:resource-definition
service_type: scp-iam
name: scp-iam:user
resources_uri: /v1/users
resource_type: user
display_name:
  ko: '사용자'
  en: 'User'
product_id: IAM
attributes:
  state:
    type: string
    uri: /v1/users/{resource_id}
    method: GET
    jsonpath: $.state
  firstname:
    type: string
    uri: /v1/users/{resource_id}
    method: GET
    jsonpath: $.first_name
    abac: true
  lastname:
    type: string
    uri: /v1/users/{resource_id}
    method: GET
    jsonpath: $.last_name
    abac: true
  email:
    type: string
    uri: /v1/users/{resource_id}
    method: GET
    jsonpath: $.email
    abac: false
kind: scp-resourcemanager:resource-definition
service_type: scp-iam
name: scp-iam:user
resources_uri: /v1/users
resource_type: user
display_name:
  ko: '사용자'
  en: 'User'
product_id: IAM
attributes:
  state:
    type: string
    uri: /v1/users/{resource_id}
    method: GET
    jsonpath: $.state
  firstname:
    type: string
    uri: /v1/users/{resource_id}
    method: GET
    jsonpath: $.first_name
    abac: true
  lastname:
    type: string
    uri: /v1/users/{resource_id}
    method: GET
    jsonpath: $.last_name
    abac: true
  email:
    type: string
    uri: /v1/users/{resource_id}
    method: GET
    jsonpath: $.email
    abac: false
scp-iam:user resource_definition 예시
참고
  • 자원의 속성명은 Resource definition에서 정의된 attributes에 정의된 속성 데이터를 사용합니다.
  • Resource definition에 대한 자세한 내용은 Resource Definition 가이드를 참고하세요.
Condition Key 정의 예시
  • 전역 조건 키(Global condition key) 예시: 특정 정책 자원 태그의 키(Environment)의 값이 “Local” 또는 “Dev"인 경우에만 그룹 상세 조회를 허용하는 정책
배경색 변경
{
  "Version": "2024-07-01",
  "Statement": [
    {
      "Sid": "statement1",
      "Action": ["iam:showPolicy"],
      "Effect": "Allow",
      "Resource": ["*"],
      "Condition": {
          "StringEquals": {
            "scp:ResourceTag/Environment": [  # 전역 조건 키(scp:ResourceTag)를 사용한 정의 형태
              "Local", "Dev"
            ]
          }
      }      
    }
  ]
}
{
  "Version": "2024-07-01",
  "Statement": [
    {
      "Sid": "statement1",
      "Action": ["iam:showPolicy"],
      "Effect": "Allow",
      "Resource": ["*"],
      "Condition": {
          "StringEquals": {
            "scp:ResourceTag/Environment": [  # 전역 조건 키(scp:ResourceTag)를 사용한 정의 형태
              "Local", "Dev"
            ]
          }
      }      
    }
  ]
}
전역 조건 키(Global condition key) 예시
  • 자원 속성 키(Resource attribute key) 예시
    배경색 변경
    {
      "Version": "2024-07-01",
      "Statement": [
        {
          "Sid": "statement1",
          "Action": ["server:showInstance"],
          "Effect": "Allow",
          "Resource": ["*"],
          "Condition" : {
               "StringEquals" : {
                   "virtual-servers:instanceFlavor" : ["m1.small"] # virtual-servers 서비스의 intance 리소스의 flavor 속성이 "m1.small" 경우
                }          
           }
        }
      ]
    }
    {
      "Version": "2024-07-01",
      "Statement": [
        {
          "Sid": "statement1",
          "Action": ["server:showInstance"],
          "Effect": "Allow",
          "Resource": ["*"],
          "Condition" : {
               "StringEquals" : {
                   "virtual-servers:instanceFlavor" : ["m1.small"] # virtual-servers 서비스의 intance 리소스의 flavor 속성이 "m1.small" 경우
                }          
           }
        }
      ]
    }
    자원 속성 키(Resource attribute key) 예시

정책 조건값(condition-value)

조건 키에 대한 값을 정의합니다.

참고
여러 개의 정책 조건값이 정의되어 있는 경우에는 각 조건값은 OR로 동작합니다.
"Condition" :  {
   "StringEquals" : {
        "scp:resourceTag/key1": ["value1", "value2", "value3"]    # 리소스의 태그 키가 key1인 값이 value1 또는 value2 또는 value3인 경우
 }

한정자(quailfier)

Condition key로부터 추출된 요청 컨텍스트값이 여러 개의 값을 가진인 경우에 동작 방법을 정의합니다.(요청 컨텍스트값이 1개일 경우에는 생략)
한정자는 ForAnyValue, ForAllValues로 구분되며 한정자를 작성하지 않을 경우, ForAnyValue가 기본값으로 정의됩니다.

  • ForAnyValue: 요청 컨텍스트에 추출된 값들이 Condition에 정의된 Operand와 1개 이상 일치할 경우 True
  • ForAllValues: 요청 컨텍스트에 추출된 값들이 Condition에 정의된 Operand 리스트의 하위 집합일 경우 True
{
  ...
  "Condition" :  {
       "ForAllValues:StringEquals" : {
            "scp:TagKeys": ["key1", "key2", "key3"] 
        }
  }   
}
한정자 동작 예시
  • “scp:TagKeys”로 부터 추출되는 요청값이 1개인 경우: 한정자와 관계없이 Operand별로 OR로 동작
  • “scp:TagKeys”로 부터 추출되는 요청값이 2개 이상인 경우: 한정자에 따라 결과 차이
배경색 변경
# 추출되는 요청 컨텍스트값이 ["key1", "key2", "key4"]  경우
Operand: ["key1", "key2", "key3"]  
   # 요청 컨텍스트값  key1 Operand에 포함되므로 True
   # 요청 컨텍스트값  key2 Operand에 포함되므로 True
   # 요청 컨텍스트값  key4 Operand에 포함되지 않으므로 False 
 
ForAnyValue는 3개의 요청 컨텍스트   1개라도 일치할 경우엔 True로 판단
ForAllValues는 3개의 요청 컨텍스트 값이 모두 True  경우에만 최종 True로 판단
# 추출되는 요청 컨텍스트값이 ["key1", "key2", "key4"]  경우
Operand: ["key1", "key2", "key3"]  
   # 요청 컨텍스트값  key1 Operand에 포함되므로 True
   # 요청 컨텍스트값  key2 Operand에 포함되므로 True
   # 요청 컨텍스트값  key4 Operand에 포함되지 않으므로 False 
 
ForAnyValue는 3개의 요청 컨텍스트   1개라도 일치할 경우엔 True로 판단
ForAllValues는 3개의 요청 컨텍스트 값이 모두 True  경우에만 최종 True로 판단
ForAnyValue, ForAllValues 동작 예시
My Info.
Release Note