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-정책의-종류
'AWS' 카테고리의 다른 글
[Ansible] AWS EC2 Dynamic Inventory 사용하기 (0) | 2021.07.30 |
---|---|
AWS IAM을 통한 인증, 인가 (0) | 2021.07.24 |
[AWS] Root Volume을 다른 EC2 Instance에 붙이기 (2) | 2021.07.21 |
AWS와 Azure간 Transit Gateway을 통한 Site to Site VPN 연동 (2) | 2021.07.20 |
[AWS] Amazon EC2 Instance 유형 알아보기 (1) | 2021.06.05 |