본문 바로가기

AWS

[AWS] IAM Policy JSON 알아보기

반응형

Example

먼저 아래의 예시를 살펴보자.

상위 레벨에는 Version, Statement가 있고 Statement는 List로 구성되어 있으며,

각 List의 Element에 Effect, Action, Resource, Condition, Principle 등으로 구성될 수 있다.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:ListAllMyBuckets",
        "s3:GetBucketLocation"
      ],
      "Resource": "arn:aws:s3:::*"
    },
    {
      "Effect": "Allow",
      "Action": "s3:ListBucket",
      "Resource": "arn:aws:s3:::BUCKET-NAME",
      "Condition": {"StringLike": {"s3:prefix": [
        "",
        "home/",
        "home/${aws:username}/"
      ]}}
    },
    {
      "Effect": "Allow",
      "Action": "s3:*",
      "Resource": [
        "arn:aws:s3:::BUCKET-NAME/home/${aws:username}",
        "arn:aws:s3:::BUCKET-NAME/home/${aws:username}/*"
      ]
    }
  ]
}

IAM Policy에 여러개의 Statement를 추가할 수 있으며, Statement 안에 Sid, Effect, Principle, Action, Resource, Condition Block 등의 Key를 추가할 수 있다.

 

- SID (String, Optional)
    Statement ID로써 각 Statement를 구분할 수 있다.


- Effect
    정책에서 Access를 허용할지 거부할지 나타낼 수 있다.
    Allow, Deny

 

- Principle (Object)
    액세스를 허용하거나 거부할 주체(계정, 사용자, 역할 등)을 지정한다.
    리소스 기반 정책에서만 사용한다.

 

- Action (String, Array)
    정책이 허용 혹은 거부하는 작업 목록을 나타낸다. (서비스:작업 형태로 나타냄)

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

- Resource
    Arn으로 설정
    작업이 적용되는 리소스 목록 지정
    리소스 기반 정책을 생성하는 경우는 선택 사항이다. (이 요소를 포함하지 않으면 작업이 적용되는 리소스는 정책이 연결된 리소스이다.)

- Condition (Object, Optional)
    정책에서 권한을 부여하는 상황을 지정

 

 

보충 자료

0. ARN (Amazon Resource Name)

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


# Example

# 특정 SQS 대기열
"Resource": "arn:aws:sqs:us-east-2:account-ID-without-hyphens:queue1"

# Bob이라는 IAM 사용자
"Resource": "arn:aws:iam::account-ID-without-hyphens:user/Bob"

# 경로가 /accounting인 IAM 사용자들
"Resource": "arn:aws:iam::account-ID-without-hyphens:user/accounting/*"

# DOC-EXAMPLE-BUCKET 버킷 내에 포함된 모든 Object들
"Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"

# 여러 리소스 지정, DynamoDB Table 2개
"Resource": [
    "arn:aws:dynamodb:us-east-2:account-ID-without-hyphens:table/books_table",
    "arn:aws:dynamodb:us-east-2:account-ID-without-hyphens:table/magazines_table"
]

# Usage Exm
{
  "Version": "2012-10-17",
  "Statement": {
    "Effect": "Allow",
    "Action": "dynamodb:*",
    "Resource": "arn:aws:dynamodb:us-east-2:ACCOUNT-ID-WITHOUT-HYPHENS:table/${aws:username}"
  }
}

- partition
    리소스가 존재하는 AWS 리전의 그룹
    aws | aws-cn | aws-us-gov

- service
    AWS 서비스 이름

- region
    리전 이름


- account-id
    aws 계정 id (123456789012)

- resource-id
    리소스의 이름 | 리소스의 ID | 리소스 경로
    리소스 식별자를 나타낸다.
    / 를 포함하여 리소스 경로를 나타낼 수 있으며, 문자, *도 사용이 가능하다.

1. 자격 증명 기반 정책

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

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

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

2. 리소스 기반 정책

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

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

 

 

- Ref

https://ssungkang.tistory.com/entry/AWS-IAM-Policy-JSON을-통한-정책-생성-ARN-정책의-종류

 

반응형