일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- django rest framework
- Git
- web
- API
- HTML
- 알고리즘
- 알고리즘 풀이
- 장고
- 백준
- form
- django widget
- es6
- MAC
- js
- javascript
- Baekjoon
- 파이썬 알고리즘
- Django
- java
- Algorithm
- 알고리즘 문제
- 알고리즘 연습
- AWS
- PYTHON
- 파이썬
- c++
- react
- DRF
- CSS
- django ORM
- Today
- Total
수학과의 좌충우돌 프로그래밍
[AWS] IAM Policy - JSON을 통한 정책 생성, ARN, 정책의 종류 본문
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
- 작업이 적용되는 리소스 목록을 지정해야 합니다.
- 리소스 기반 정책을 생성하는 경우 선택 사항
- 이 요소를 포함하지 않으면 작업이 적용되는 리소스는 정책이 연결된 리소스
-
Condition
- Object
- 정책에서 권한을 부여하는 상황을 지정
- 선택 사항
- Condition에서 사용할 수 있는 문법 https://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html
전체적인 사용에 대한 예시입니다.
{
"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에서 정책 탭을 보면 정책 필터가 존재합니다.
그리고 정책 필터에서는 정책 유형을 선택해서 검색할 수 있는데 이 정책 유형은 무엇일까요?
우선 위 이미지에 보이는 정책에 대해서 간단히 알아봅시다.
고객 관리형
은 스스로 만든 정책을 의미합니다. 저 같은 경우 제가 만든 정책이 하나 있기 때문에 하나라고 표시가 되죠.
AWS 관리형
,AWS 관리-직무
는 AWS에서 만든 정책입니다. 둘의 차이는 직무의 같은 경우는 DatabaseAdministrator, DataScientist 등 직무에 맡게 권한이 모여있는 정책입니다.
이 밖에도 여러 정책이 많지만 중요한 2가지 정책이 있습니다.
- 자격 증명 기반 정책 (identity-based Policy)
- 리소스 기반 정책 (resource-based Policy)
자격 증명 기반 정책
자격 증명 기반 정책은 AWS 계정, 사용자, 그룹, 역할 등 보안주체가 수행할 수 있는 작업, 리소스 및 조건을 제어하는 정책입니다.
IAM 정책에서 조회되는 정책은 자격 증명 기반 정책입니다.
이 때는 정책에 연결된 보안주체가 Principal
이 되므로 Statement 에서도 Principal
을 따로 기재하지 않습니다.
리소스 기반 정책
자격 증명 기반 정책이 보안주체에게 연결하는 정책이었다면 리소스 기반 정책은 AWS 리소스에 연결하는 정책입니다.
AWS의 리소스 중에서 일부 서비스에서 사용되며 대표적으로 S3에서 사용이 됩니다.
'DevOps > AWS' 카테고리의 다른 글
[AWS] IAM 그룹, 사용자, 역할, 정책에 대해서 알아보자 (0) | 2020.08.09 |
---|---|
[AWS] Identity and Access Management, IAM 사용자 생성 (0) | 2020.08.06 |
[AWS] Simple Storage Service, S3 설정 및 이미지 업로드 (0) | 2020.08.03 |
[AWS] Relational Database Service, RDS 생성 및 접근방법 (0) | 2020.08.02 |