IAM JSON 정책 언어의 문법 - AWS Identity and Access Management

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" ] } }