[클라우드 기초] AWS 정책(Policy)의 종류 및 JSON 구문의 의미

2024. 7. 16. 00:46정보보호 및 개인정보보호

728x90

AWS에는 다양한 정책(Policy) 유형이 존재합니다. 알아두면 좋은 AWS Policy유형과 종류에 대해 알아보겠습니다. 

정책 설명 포맷 정의 및 관리
아이덴티티 기반 정책
(Identity-based 정책)
관리형 및 인라인 정책을 IAM 보안 주체 'IAM User(사용자), IAM User(사용자)가 속한 Group(그룹) 또는 Role(역할)'에 할당되어 해당 주체의 권한을 규정합니다.  JSON IAM
관리형 정책( Managed policies )
 - AWS 계정에 속한 다수의 사용자, 그룹 및 역할에 독립적으로 연결할 수 있는 자격 증명 기반 정책입니다. 두 가지 유형의 관리형 정책이 있습니다.

  • AWS 관리형 정책( AWS managed policies )
     - AWS에서 생성 및 관리하는 관리형 정책입니다.
  • 고객 관리형 정책( Customer managed policies )
    - 사용자가 자신의 AWS 계정에서 생성 및 관리하는 관리형 정책입니다.
    - AWS 관리형 정책보다 더욱 정밀하게 정책을 제어할 수 있습니다
인라인 정책( Inline policies )
- 단일 사용자, 그룹 또는 역할에 직접 추가하는 정책입니다.
- (정책:자격 증명=1:1)의 1:1 관계를 유지하며, 자격 증명을 삭제하면 삭제됩니다.
리소스 기반 정책
(Resource-based 정책)
인라인 정책을 리소스에 연결하며, 정책이 할당될 리소스를 기준으로 어떤 보안주체가 할수 있거나 할수 없는 작업을 규정합니다. 보안주체는 리소스와 동일한 AWS Account 또는 다른 Account에 있을 수 있습니다.  JSON 개별 서비스
IAM Permission Boundary 정책 (권한 경계) 관리형 정책을 IAM 보안주체' IAM User(사용자) 또는 Role(역할)'별로 획득할 수 있는 권한의 최대치를 규정하는 권한 경계로 사용합니다. 자격 증명 기반 정책을 통해 엔터티에 부여할 수 있는 최대 권한을 정의하지만, 권한을 부여하지는 않으며, 리소스 기반 정책을 통해 부여할 수 있는 최대권한ㅇ을 정의하지는 않습니다.  JSON IAM
Organizations SCP AWS Organizations 서비스 제어 정책(SCP)을 사용하여 조직 또는 조직 단위(OU) 또는 개별 Account별로 권한의 최대치, 즉 최대 권한을 정의합니다. 
부여하는 권한을 제한하지만, 권한을 부여하지는 않습니다.
JSON Organization
세션(Session) 정책  임시 자격증명의 기존 퍼미션을 해당 세션에 대해서만 제한할 때 사용합니다. 생성된 세션에 대한 권한을 제한하지 않지만, 권한을 부여하지도 않습니다. JSON STS
액세스 제어 목록(ACL정책) 리소스 기준으로 정의하며, 주로 Cross-Account간의 리소스 공유 시 보안주체에 대한 접근을 규정합니다. 소스 기반 정책과 비슷하지만 JSON 정책 문서 구조를 사용하지 않은 유일한 정책 유형입니다. 동일 계정 내 엔터티(entitiy)에는 권한을 부여할 수 없습니다.  XML 개별 서비스
Endpoint 정책  VPC G/W Endpoint에 적용되는 접근제어 정책으로 일종의 리소스 기반 정책
(Resource-based 정책)입니다. 
JSON VPC

 

참고 : https://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/access_policies.html

 

IAM의 정책 및 권한 - AWS Identity and Access Management

IAM의 정책 및 권한 정책을 생성하고 IAM 자격 증명(사용자, 사용자 그룹 또는 역할) 또는 AWS 리소스에 연결하여 AWS에서 액세스를 관리합니다. 정책은 자격 증명이나 리소스와 연결될 때 해당 권한

docs.aws.amazon.com

 

 

JSON 정책 문서는 아래 이미지와 같은 구조를 가지게 되며, 요청 하나에 적용되는 정책이 여럿인 경우 OR을 적용하게 됩니다. 다만, AWS 정책의 경우 명시적 Deny > 명시적 Allow > 묵시적 Deny와 같이 기본적으로는 묵시적 Deny상태이며, 명시적 Allow와 명시적 Deny가 함께 올 경우 명시적 Deny가 가장 우선시 됩니다.또한 JSON에서 []의 경우 OR조건으로 확인하고, {}의 경우 AND조건으로 구분됩니다. 

  • 문서 상단에 위치하는 정책 전반의 선택적 정보
  • 하나 이상의 개별 문

출처 : JSON 정책 개요 https://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/access_policies.html#access_policies-json

 

더보기
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "FirstStatement",
      "Effect": "Allow",
      "Action": ["iam:ChangePassword"],
      "Resource": "*"
    },
    {
      "Sid": "SecondStatement",
      "Effect": "Allow",
      "Action": "s3:ListAllMyBuckets",
      "Resource": "*"
    },
    {
      "Sid": "ThirdStatement",
      "Effect": "Allow",
      "Action": [
        "s3:List*",
        "s3:Get*"
      ],
      "Resource": [
        "arn:aws:s3:::confidential-data",
        "arn:aws:s3:::confidential-data/*"
      ],
      "Condition": {"Bool": {"aws:MultiFactorAuthPresent": "true"}}
    }
  ]
}

JSON 예시 (아래 표 설명 참고)

 

Effect  명시된 정책에 대한 허용(Allow) 혹은 차단 (Deny) 여부를 확인할 수 있습니다.
"Effect": "Allow"
Principal (일부 상황에서만 필요) 접근을 허용(Allow) 혹은 차단 (Deny)하고자 하는 계정, 사용자, 역할 또는 페더레이션 사용자 등을 표현합니다. 
"Principal": { "AWS": "arn:aws:iam::123456789012:root" }
참고 [AWS] 계정 보안 주체 

Action  정책을 허용하거나 거부하는 작업 목록을 포함하게 됩니다. 
 "Action": [
        "s3:List*",
        "s3:Get*"
],
Resource (일부 상황에서만 필요) 요청의 대상이 되는 서비스로, IAM 권한 정책을 생성하는 경우 작업이 적용되는 리소스 목록을 지정하여 관리하여야 합니다. 
  {
      "Sid": "FirstStatement",
      "Effect": "Allow",
      "Action": ["iam:ChangePassword"],
      "Resource": "*"
    },
{
      "Sid": "ThirdStatement",
      "Effect": "Allow",
      "Action": [
        "s3:List*",
        "s3:Get*"
      ],
      "Resource": [
        "arn:aws:s3:::confidential-data",
        "arn:aws:s3:::confidential-data/*"
      ],
Condition (선택 사항) 명시된 조건으로 정책에서 권한을 부여하는 상황을 지정하여 유효하다고 판단될 수 있는 조건입니다.
"Condition": {"Bool": {"aws:MultiFactorAuthPresent": "true"}}
Version 사용하고자 하는 정책 언어의 버전을 지정합니다. 최신 2012-10-17 버전을 사용하는 것이 좋습니다
"Version": "2012-10-17"
Sid (선택 사항) 선택한 설명문 ID를 포함하여 설명문들을 구분합니다
"Sid": "SecondStatement",

 

728x90