Identity Access Management의 약자이다.
글자 그대로 해석하자면 어떤 주체에 접근권한을 부여하는 것을 의미한다. 크게 두가지로 나뉜다.
자격증명-기반 정책(Id-Based Policy,이하 IB) / 리소스-기반 정책(Resource-Based Policy, 이하 RB)
IB는 aws 계정, iam 사용자 그룹, 역할 등에 적용된다. 즉 특정 주체의 접근 범위를 명시하는 거라고 보면된다. "이 정책과 연결된 보안주체는 어떤 대상에 대해 이러한 권한이 부여된다" 라고 이해하면 된다. 그래서 정책을 부여한 주체가 보안주체이니 principle 속성이 필요 없다.
IB는 특정 aws계정, aws 그룹(사용자 그룹), aws 역할(aws서비스, 외부 앱) 에 적용가능하다.
RB는 특정 리소스 안에서 명시되는 정책이다. 예를 들어, s3안에서 이 정책이 명시되면 s3의 접근권한에 대한 정보를 알 수 있다. "이 대상에 대해 이러한 권한이 누구누구에게 부여가 된다" 로 이해하면된다. 그래서 "누구누구" 에 대한 정보가 필요한데 그 정보가 principle에 명시되어 있다.
그리고 iam 정책은 json의 형태로 나타난다.
{
"Version": "2008-10-17",
"Id": "PolicyForCloudFrontPrivateContent",
"Statement": [
{
"Sid": "1",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity E36E6CTWWW86E5"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::budify.buddy.net/*"
}
]
}
여러가지 용어가 있는데 중요한 용어들 간단히 살펴보자.
emum: Allow | Deny
string | Array<string>
object
5.Sid
위의 예시로 적힌 iam 정책을 한 문장으로 해석하면 아래와 같다.
S3 버킷
budify.buddy.net
에 업로드된 모든 오브젝트를 읽을 권한(s3:GetObject)를CloudFront Origin Access Identity E36E6CTWWW86E5
에 부여한다.
(참고로 위의 정책은 principal이 들어감으로 RB이다. 그래서 budify-was ec2에 iam 역할을 부여하고 그 역할을 principal로 설정해보자!)
정책은 쉽게 말해, "어떤 condition을 만족할때 어떤 resource에 대해서 어떤 action을 할 수 있게 허용/불허(effect)한다" 를 명시하는 것이라고 보면 된다.
참고로 요 링크에 접속하면 iam 정책을 쉽게 만들 수 있다.