수학과의 좌충우돌 프로그래밍

[AWS] IAM Policy - JSON을 통한 정책 생성, ARN, 정책의 종류 본문

DevOps/AWS

[AWS] IAM Policy - JSON을 통한 정책 생성, ARN, 정책의 종류

ssung.k 2020. 8. 10. 04:32

IAM에서 정책, policy를 만들다보면 아래와 같이 두 가지 방법으로 편집이 가능합니다.

정책 생성

 

시각적 편집기에서 GUI로 생성할 수 도 있고 JSON으로 추가할 수 도 있습니다.

이번 포스팅에서는 JSON으로 만드는 방법과 각 키, 밸류들의 역할을 살펴보도록 하겠습니다.

추가적으로 정책들의 종류에 대해서 알아보겠습니다.

 

JSON을 통한 정책 생성

우선 다음과 같은 형태로 데이터를 이루게 됩니다.

전체 정책에 대한 Optional top-level elements가 있고 이에 여러 개의 Statement 를 추가할 수 있습니다.

정책에 대한 개념 이해

 

우선 Optional top-level elements 에는 두 개의 키가 존재합니다.

  • Version

    • String
    • "2012-10-17", "2008-10-17" 두 개의 버전이 있으며 각 버전마다 정책 언어가 다릅니다.
  • ID : 정책 식별자를 지정합니다.

 

각각의 Statement에는 6개의 키가 존재합니다.

  • SID

    • String
    • Statement ID로서 각 Statement를 구분합니다.
    • 선택사항
  • Effect

    • Allow| Deny
    • 정책에서 엑세스를 허용하는지 거부하는지를 나타냅니다.
  • Principal

    • Object
    • 액세스를 허용하거나 거부할 보안 주체(계정, 사용자, 역할 등)를 지정합니다.
    • 리소스 기반 정책에서만 사용
  • Action

    • String | Array<String>

    • 정책이 허용하거나 거부하는 작업 목록 혹은 목록들을 지정합니다.

    • 서비스:작업 의 형태로 작성합니다.

      "Action": [
          "s3:PutObject",
          "s3:GetObjectAcl",
          "s3:GetObject",
          "s3:ListBucket",
          "s3:DeleteObject",
          "s3:PutObjectAcl"
      ],
      
  • Resource

    • arn
    • 작업이 적용되는 리소스 목록을 지정해야 합니다.
    • 리소스 기반 정책을 생성하는 경우 선택 사항
    • 이 요소를 포함하지 않으면 작업이 적용되는 리소스는 정책이 연결된 리소스

 

전체적인 사용에 대한 예시입니다.

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

 

 

Amazon 리소스 이름, ARN

위에서 Resource 의 값을 보면 arn 이라고 되어있습니다.

그리고 아래 예시를 봐도"arn:aws:s3:::confidential-data" 값이 들어있죠.

arn이 어떤 것인지, 예시는 어떤 의미인지 알아보도록 합시다.

부제목에서 알 수 있듯이 ARN은 Amazon Resource Name의 줄임말로서 AWS의 리소스를 고유하게 식별하는 역할을 합니다.

아래는 ARN의 일반적인 형식입니다.

구체적인 형식은 리소스마다 다르고 위 예시와 같이 일부 리소스는 region, account-id가 생략되기도 합니다.

arn:partition:service:region:account-id:resource-id
arn:partition:service:region:account-id:resource-type/resource-id
arn:partition:service:region:account-id:resource-type:resource-id

 

각각에 대해서 살펴봅시다.

  • partition

    • aws | aws-cn | aws-us-gov
    • 리소스가 존재하는 AWS 리전의 그룹입니다.
  • service

    • aws service name (ex: s3)
    • AWS 서비스 네임스페이스입니다.
  • region

    • region (ex: ap-northest-2)
    • 리전입니다.
  • account-id

    • aws 계정 id (ex: 123456789012)
    • 리소스를 소유하고 있는 AWS 계정의 ID로 하이픈 없이 표기합니다.
  • resource-id

    • 리소스의 이름 | 리소스의 ID | 리소스 경로
    • 리소스 식별자를 나타냅니다.
    • / 를 포함하여 리소스 경로를 포함할 수 있으며 이 때 와일드카드 문자, *도 사용이 가능합니다.

 

 

IAM 정책의 종류

AWS IAM에서 정책 탭을 보면 정책 필터가 존재합니다.

그리고 정책 필터에서는 정책 유형을 선택해서 검색할 수 있는데 이 정책 유형은 무엇일까요?

IAM 정책 검색 화면

 

우선 위 이미지에 보이는 정책에 대해서 간단히 알아봅시다.

  • 고객 관리형은 스스로 만든 정책을 의미합니다. 저 같은 경우 제가 만든 정책이 하나 있기 때문에 하나라고 표시가 되죠.
  • AWS 관리형,AWS 관리-직무는 AWS에서 만든 정책입니다. 둘의 차이는 직무의 같은 경우는 DatabaseAdministrator, DataScientist 등 직무에 맡게 권한이 모여있는 정책입니다.

 

이 밖에도 여러 정책이 많지만 중요한 2가지 정책이 있습니다.

  • 자격 증명 기반 정책 (identity-based Policy)
  • 리소스 기반 정책 (resource-based Policy)

 

자격 증명 기반 정책

자격 증명 기반 정책은 AWS 계정, 사용자, 그룹, 역할 등 보안주체가 수행할 수 있는 작업, 리소스 및 조건을 제어하는 정책입니다.

IAM 정책에서 조회되는 정책은 자격 증명 기반 정책입니다.

이 때는 정책에 연결된 보안주체가 Principal이 되므로 Statement 에서도 Principal 을 따로 기재하지 않습니다.

 

리소스 기반 정책

자격 증명 기반 정책이 보안주체에게 연결하는 정책이었다면 리소스 기반 정책은 AWS 리소스에 연결하는 정책입니다.

AWS의 리소스 중에서 일부 서비스에서 사용되며 대표적으로 S3에서 사용이 됩니다.

 

Comments