IAM JSON 정책 언어의 문법

이 페이지에서는 IAM에서 JSON 정책 생성 시 사용되는 언어의 정규 문법에 대해 살펴보겠습니다. 이 문법에 대해 살펴본 후 정책의 체계적 작성 및 검증 방법에 대해 이해할 수 있게 될 것입니다.

정책 예는 다음 주제를 참조하세요.

다른 AWS 서비스의 정책 예는 해당 서비스 설명서를 참조하세요.

정책 언어 및 JSON

정책은 JSON으로 작성됩니다. JSON 정책을 생성하거나 편집할 때 IAM은 효과적인 정책을 생성하는 데 도움이 되는 정책 검증을 수행할 수 있습니다. IAM은 JSON 구문 오류를 식별하는 반면, IAM Access Analyzer는 정책을 더욱 구체화하는 데 도움이 되는 권장 사항과 함께 추가 정책 검사를 제공합니다. 정책 검증에 대한 자세한 내용은 IAM 정책 검증 섹션을 참조하세요. IAM Access Analyzer 정책 확인 및 실행 가능한 권장 사항에 대한 자세한 내용은 IAM Access Analyzer 정책 검증을 참조하세요.

여기에서는 유효한 JSON 구성에 대해 자세히 설명하지는 않지만 다음과 같이 몇 가지 기본 JSON 규칙을 소개합니다.

  • 각 개체 간에 공백을 넣을 수 있습니다.

  • 값은 인용 부호로 묶입니다. 숫자나 부울(Boolean) 값에서 인용 부호는 옵션입니다.

  • 대부분 요소(예: action_string_list, resource_string_list)는 JSON 배열을 값으로 사용할 수 있습니다. 배열은 하나 이상의 값을 갖습니다. 값이 2개 이상 추가되면 배열은 다음 예제와 같이 대괄호([])로 묶여 쉼표로 구분됩니다.

    "Action" : ["ec2:Describe*","ec2:List*"]

  • 기본 JSON 데이터 형식(부울, 숫자, 문자열)은 RFC 7159에 정의되어 있습니다.

JSON 문법에 사용되는 규칙

JSON 문법에는 다음과 같은 규칙이 사용됩니다.

  • 다음 문자는 JSON 토큰으로서 정책에 추가됩니다.

    { } [ ] " , :

  • 다음은 문법에 사용되는 특수 문자로서 정책에는 추가되지 않습니다.

    = < > ( ) |

  • 한 요소에 여러 값을 추가할 수 있는 경우에는 반복되는 값, 쉼표 구분자, 그리고 줄임표(...)를 사용하여 나타냅니다. 예:

    [<action_string>, <action_string>, ...]

    <principal_map> = { <principal_map_entry>, <principal_map_entry>, ... }

    여러 값이 허용되면 단일 값을 추가하는 것도 유효합니다. 값이 단 하나인 경우에는 마지막 쉼표를 반드시 생략해야 합니다. 요소가 배열([ ]로 표시)로 이루어지더라도 추가된 값이 단 하나일 때는 괄호가 선택 사항입니다. 예:

    "Action": [<action_string>]

    "Action": <action_string>

  • 요소 뒤에 나오는 물음표(?)는 요소가 선택 사항인 것을 나타냅니다. 예제

    <version_block?>

    하지만 선택 요소에 대한 자세한 내용은 문법 목록 이후에 나오는 참고 사항을 반드시 확인하시기 바랍니다.

  • 요소 사이의 수직선(|)은 다자간 택일을 나타냅니다. 이 문법에서는 괄호로 다자간 택일의 범위를 정의합니다. 예제

    ("Principal" | "NotPrincipal")

  • 리터럴 문자열 요소는 큰따옴표(")로 묶습니다. 예제

    <version_block> = "Version" : ("2008-10-17" | "2012-10-17")

기타 참고 사항은 문법 목록 다음 정책 문법 참고 사항 섹션을 참조하세요.

문법

다음 목록은 정책 언어 문법에 대한 설명입니다. 문법 목록에 사용된 규칙에 대해서는 앞의 섹션을 참��하세요. 그리고, 추가 정보는 이후 참고 사항을 참조하세요.

참고

이 문법은 버전이 2008-10-172012-10-17이라고 표시된 정책에 대한 설명입니다. Version 정책 요소는 정책 버전과 다릅니다. Version 정책 요소는 정책 내에서 사용되며 정책 언어의 버전을 정의합니다. 반면에 정책 버전은 IAM에서 고객 관리형 정책을 변경할 때 생성됩니다. 변경된 정책은 기존 정책을 덮어쓰지 않습니다. 대신 IAM에서 관리형 정책의 새 버전을 생성합니다. Version 정책 요소에 대한 자세한 정보는 IAM JSON 정책 요소: Version을 참조하세요. 정책 버전에 대한 자세한 정보는 IAM 정책 버전 관리 섹션을 참조하세요.

policy = { <version_block?> <id_block?> <statement_block> } <version_block> = "Version" : ("2008-10-17" | "2012-10-17") <id_block> = "Id" : <policy_id_string> <statement_block> = "Statement" : [ <statement>, <statement>, ... ] <statement> = { <sid_block?>, <principal_block?>, <effect_block>, <action_block>, <resource_block>, <condition_block?> } <sid_block> = "Sid" : <sid_string> <effect_block> = "Effect" : ("Allow" | "Deny") <principal_block> = ("Principal" | "NotPrincipal") : ("*" | <principal_map>) <principal_map> = { <principal_map_entry>, <principal_map_entry>, ... } <principal_map_entry> = ("AWS" | "Federated" | "Service" | "CanonicalUser") : [<principal_id_string>, <principal_id_string>, ...] <action_block> = ("Action" | "NotAction") : ("*" | [<action_string>, <action_string>, ...]) <resource_block> = ("Resource" | "NotResource") : : ("*" | <resource_string> | [<resource_string>, <resource_string>, ...]) <condition_block> = "Condition" : { <condition_map> } <condition_map> = { <condition_type_string> : { <condition_key_string> : <condition_value_list> }, <condition_type_string> : { <condition_key_string> : <condition_value_list> }, ... } <condition_value_list> = [<condition_value>, <condition_value>, ...] <condition_value> = (<condition_value_string> | <condition_value_string> | <condition_value_string>)

정책 문법 참고 사항

  • 단일 정책에는 다수의 문이 배열로 추가될 수 있습니다.

  • 정책은 추가되는 개체에 따라 2,048~10,240 사이에서 최대 문자 수를 갖습니다. 자세한 내용은 IAM 및 AWS STS 할당량 단원을 참조하십시오. 정책 크기 계산에 공백 문자는 포함되지 않습니다.

  • 개별 요소에는 동일한 키 인스턴스를 여러 개 추가할 수 없습니다. 예를 들어 동일한 문에 Effect 블록을 2개 추가할 수는 없습니다.

  • 블록은 순서에 상관없이 표시됩니다. 예를 들어 정책에서 version_blockid_block 뒤에 올 수 있습니다. 마찬가지로 effect_block, principal_blockaction_block 역시 동일 문에서 순서에 상관없이 표시됩니다.

  • 리소스 기반 정책에서는 id_block이 선택 사항입니다. ID 기반 정책에는 포함시킬 수 없습니다.

  • principal_block 요소는 리소스 기반 정책(예: Amazon S3 버킷 정책)과 IAM 역할의 신뢰 정책에 필요합니다. ID 기반 정책에는 포함시킬 수 없습니다.

  • Amazon S3 버킷 정책의 principal_map 요소에는 CanonicalUser ID가 포함될 수 있습니다. 대부분 리소스 기반 정책은 이러한 매핑을 지원하지 않습니다. 버킷 정책에서 표준 사용자 ID를 사용하는 방법에 대한 자세한 내용은 Amazon Simple Storage Service 사용 설명서정책에서 보안 주체 지정을 참조하세요.

  • 각 문자열 값(policy_id_string, sid_string, principal_id_string, action_string, resource_string, condition_type_string, condition_key_string, 그리고 condition_value의 문자열 버전)은 자체적인 최소/최대 길이 제한, 특정 허용 값 또는 필수 내부 포맷을 가질 수 있습니다.

문자열 값에 대한 참고 사항

이 섹션에서는 정책에서 각각 다른 요소에 사용되는 문자열 값에 대한 추가 정보에 대해 살펴보겠습니다.

action_string

서비스 네임스페이스, 콜론 및 작업 이름으로 구성됩니다. 작업 이름에는 와일드카드를 추가할 수 있습니다. 예:

"Action":"ec2:StartInstances" "Action":[ "ec2:StartInstances", "ec2:StopInstances" ] "Action":"cloudformation:*" "Action":"*" "Action":[ "s3:Get*", "s3:List*" ]
policy_id_string

정책 관련 정보를 전체적으로 추가하는 방법을 제공합니다. Amazon SQS나 Amazon SNS 같은 일부 서비스는 Id 요소를 예약 방식으로 사용합니다. 개별 서비스에서 달리 제한하지 않는다면 policy_id_string에 공백을 추가할 수 있습니다. AWS 계정 내에서 이 값의 고유성을 요구하는 서비스도 있습니다.

참고

id_block은 리소스 기반 정책에서는 허용되지만 ID 기반 정책에서는 사용할 수 없습니다.

이 문자열이 제한된 전체 정책 길이에 영향을 끼치기는 하지만 문자열 길이에 제한은 없습니다.

"Id":"Admin_Policy" "Id":"cd3ad3d9-2776-4ef1-a904-4c229d1642ee"
sid_string

개별 문에 대한 정보를 추가하는 방법을 제공합니다. IAM 정책의 경우 기본 영숫자 문자(A-Z,a-z,0-9)만 Sid 값의 문자로 허용됩니다. 리소스 정책을 지원하는 다른 AWS 서비스는 Sid 값 요구 사항이 다를 수 있습니다. 예를 들어 일부 서비스는 이 값이 특정 AWS 계정에서 고유할 것을 요구하며, 일부 서비스는 Sid 값으로 공백과 같은 문자를 추가로 허용합니다.

"Sid":"1" "Sid": "ThisStatementProvidesPermissionsForConsoleAccess"
principal_id_string

보안 주체는 AWS 계정, IAM 사용자, IAM 역할, 페더레이션 사용자, 또는 위임된 역할 사용자의 Amazon 리소스 이름(ARN)을 사용해 지정합니다. AWS 계정의 경우, 전체 ARN 대신 짧은 형식인 AWS:accountnumber를 사용할 수도 있습니다. AWS 서비스, 위임된 역할 등을 포함한 모든 옵션에 대해서는 보안 주체 지정 섹션을 참조하세요.

"모든 사용자/익명 사용자"를 지정할 때만 *를 사용할 수 있습니다. 이름이나 ARN의 일부를 지정하기 위해 사용할 수는 없습니다.

resource_string

대부분의 경우 Amazon 리소스 이름(ARN)으로 구성됩니다.

"Resource":"arn:aws:iam::123456789012:user/Bob" "Resource":"arn:aws:s3:::examplebucket/*"
condition_type_string

StringEquals, StringLike, NumericLessThan, DateGreaterThanEquals, Bool, BinaryEquals, IpAddress, ArnEquals 등 테스트할 조건 형식을 식별합니다. 조건 형식에 대한 전체 목록은 IAM JSON 정책 요소: 조건 연산자 섹션을 참조하세요.

"Condition": { "NumericLessThanEquals": { "s3:max-keys": "10" } } "Condition": { "Bool": { "aws:SecureTransport": "true" } } "Condition": { "StringEquals": { "s3:x-amz-server-side-encryption": "AES256" } }
condition_key_string

값을 테스트하여 조건 충족 여부를 판단할 수 있는 조건 키를 식별합니다. AWS은 aws:PrincipalType, aws:SecureTransportaws:userid를 포함해 모든 AWS 서비스에 사용할 수 있는 조건 키 집합을 정의합니다.

AWS 조건 키 목록에 대한 자세한 내용은 AWS 글로벌 조건 컨텍스트 키 섹션을 참조하세요. 서비스별 조건 키에 대한 자세한 내용은 다음과 같은 서비스 설명서를 참조하세요.

"Condition":{ "Bool": { "aws:SecureTransport": "true" } } "Condition": { "StringNotEquals": { "s3:x-amz-server-side-encryption": "AES256" } } "Condition": { "StringEquals": { "aws:ResourceTag/purpose": "test" } }
condition_value_string

조건이 충족되는지 여부를 결정하는 condition_key_string 값을 식별합니다. 조건 유형에 대한 유효한 값의 전체 목록은 IAM JSON 정책 요소: 조건 연산자 섹션을 참조하세요.

"Condition":{ "ForAnyValue:StringEquals": { "dynamodb:Attributes": [ "ID", "PostDateTime" ] } }