본문 바로가기

AWS/IAM

AWS IAM 정책(policy) 과 역할(role) 의 차이

반응형

이번 포스팅에서는 역할에 대해 알아보고자 합니다. 역할은 정책과 차이를 가지는 개념으로서 이 두 개의 차이가 무엇인지에 대해 알아보고자 합니다. 

 

우선 AWS 에서 정의하는 역할의 뜻은 아래와 같습니다. 

 

계정에서 생성할 수 있는 특정 권한을 가진 IAM 자격 증명입니다. IAM 역할은 IAM 사용자와 몇 가지 점에서 유사합니다. 역할과 사용자 모두 AWS에서 자격 증명으로 할 수 있는 것과 할 수 없는 것을 결정하는 권한 정책을 포함하는 AWS 자격 증명입니다. 그러나 역할은 한 사람과만 연관되지 않고 해당 역할이 필요한 사람이라면 누구든지 맡을 수 있어야 합니다. 또한 역할에는 그와 연관된 암호 또는 액세스 키와 같은 표준 장기 자격 증명이 없습니다. 대신에 역할을 맡은 사람에게는 해당 역할 세션을 위한 임시 보안 자격 증명이 제공됩니다.

 

다시 한번 풀어서 설명해보면

 

계정에서 생성할 수 있는 특정 권한을 가진 IAM 자격 증명입니다. IAM 역할은 IAM 사용자와 몇 가지 점에서 유사합니다. 역할과 사용자 모두 AWS에서 자격 증명으로 할 수 있는 것과 할 수 없는 것을 결정하는 권한 정책을 포함하는 AWS 자격 증명입니다.

-> 정책은 역할과 IAM 사용자에게 부여할 수 있다.

 

그러나 역할은 한 사람과만 연관되지 않고 해당 역할이 필요한 사람이라면 누구든지 맡을 수 있어야 합니다.

-> 정책은 한 사람 한 그룹 단위로 할당해주지만 역할은 다수의 사람이 역할을 맡을 수 있다.

 

또한 역할에는 그와 연관된 암호 또는 액세스 키와 같은 표준 장기 자격 증명이 없습니다.

-> 엑세스 키 또는 암호를 알고 있다면 일부로 이를 바꾸지 않는 한 영원한 크리덴셜이다. 

 

대신에 역할을 맡은 사람에게는 해당 역할 세션을 위한 임시 보안 자격 증명이 제공됩니다. 

-> 임시 보안 자격 증명은 유효한 시간이 지난 후에는 사용불가능한 크리덴셜이다. IAM 사용자가 역할을 맡는다는 것은 임시 보안 자격 증명을 통해 임시적인 시간(예 1시간) 동안만 역할을 맡고 그 이후에는 역할을 반납한다. 정책은 한번 부여한 뒤 회수하지 않는 한 영구적으로 권한을 부여받는다.

 

정리하자면 아래와 같은 차이점들이 있습니다. 

정책 역할
하나의 IAM 사용자, 그룹 단위에 부여 역할을 부여받은 모든 대상
장기 또는 영구적 자격 증명 임시 보안 자격 증명
정책을 부여받은 동안 권한 획득 특정시간 동안만 권한 획득

예를 들어 IAM 사용자가 S3 버킷에 접근 하고 싶습니다. 이때 두 가지 방식으로 권한을 부여할 수 있습니다. 

 

1. 정책을 사용자에게 할당한다.

2. 역할을 위임 받는다. 

 


{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowS3ReadWrite",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::bizhubcentrify"
            ]
        },
        {
            "Sid": "AllowList",
            "Effect": "Allow",
            "Action": [
                "s3:ListAllMyBuckets",
                "s3:GetBucketLocation"
            ],
            "Resource": "*"
        }
    ]
}

 

bizhubcentrify라는 S3 버킷에 대해 읽기 쓰기 권한을 얻는 정책을 만들었습니다. 그리고 이 정책을 IAM 사용자에게 할당하겠습니다. 

 

정책을 할당받기 전에는 S3 console 에서 아무것도 보이지 않는 상태입니다. 

 

S3에 접근할 수 있는 정책을 IAM 사용자에게 부여했습니다.

 

권한이 생겨 S3 버킷에 접근이 가능하게 되었습니다. 

IAM 사용자가 정책을 부여 받지 못해 S3에 접근하지 못하는 상태입니다. 

정책을 부여 받은 후 S3에 접근이 가능합니다. 

 

정리하면 정책을 부여받은 IAM 사용자는 S3에 접근 권한을 가지게 됩니다. 해당 권한을 회수하기 위해서는 IAM 사용자로부터 정책을 회수해야 하며 정책이 부여되는 기간 동안 지속적으로 권한을 유지하게 됩니다.  


이번에는 정책(Policy)이 아닌 역할(Role)을 통해 권한을 부여하는 방식에 대해 알아보겠습니다. 역할을 생성한 뒤 정책을 연결합니다. 그리고 이 역할을 IAM 사용자에게 임시적으로 부여할 것입니다. 

 

{
	"Version": "2012-10-17",
	"Statement": [
		{
			"Effect": "Allow",
			"Principal": {
				"AWS": "arn:aws:iam::598944169130:user/root"
			},
			"Action": "sts:AssumeRole"
		}
	]
}

부여받은 정책도 없고 역할에 위임되어 있지 않은 상태입니다. 

역할을 위임 받은 후 S3에 접근한 상태입니다. IAM 사용자가 SAccessS3 assume 역할을 위임받은 것을 볼 수 있습니다. 이 역할은 1시간 뒤에 반납되게 됩니다. 1시간 뒤에는 다시 아무런 권한을 가지지 못한 상태로 남게 됩니다. 

 

 

 

 

역할을 사용하게 되면 정책을 부여하는 방식과 권한을 따로 회수하지 않아도 되는 장점이 있습니다. 예를 들어 제가 S3 버킷에 파일 하나를 업로드하려 합니다. 저는 S3버킷 쓰기 역할을 위임받은 후 필요한 작업을 완료하면 됩니다. 1시간이 지난 후 자동으로 역할에서 해제되게 됩니다. 

 

역할이 아닌 정책을 부여받았다고 한다면 IAM 관리자는 정책을 다시 회수하는 작업이 필요합니다. 만약 관리자가 정책 회수하는 것을 깜빡했다면 그리고 누군가 저의 계정을 해킹했다면 S3 쓰기 권한을 통해 어떤 악의적 사용이 가능할 것입니다. 

 

하지만 역할을 통해 임시적으로 부여받았다면? 저의 계정을 해킹해도 아무런 권한이 없습니다. 역할을 다시 위임 받기 위해서는 MFA  인증을 통해야만 가능합니다. 

 

정책 역할
1. 정책을 생성한다. 1. 역할을 생성한다.
2. 정책을 IAM 사용자에게 부여한다. 2. 정책을 역할에 부여한다.
3. 사용자는 해당 권한을 정책이 부여된 동안 지속적으로 가지고 있다 3. 사용자는 역할을 위임받는다.
4. IAM 사용자에게 해당 권한을 회수하기 위해서는 부여된 정책을 회수한다. 4. 정해진 시간 뒤 역할은 자동적으로 회수된다.

 


정리

정책은 부여,회수를 통해 권한 관리가 가능합니다. AWS에서는 사용자에게 부여된 정책이 언제 사용되고 얼마 동안 사용되지 않은지를 보여주는 Access manager를 통해 정책의 관리를 도와주고 있습니다. 그만큼 정책관리는 매우 중요한 업무입니다. 역할을 통해 권한 관리를 하게 되면 위와 같은 관리 측면에서 매우 편리하게 됩니다. 정책과 역할을 잘 관리할 수 있느냐는 클라우드 보안에 있어 매우 중요한 부분을 차지하고 있습니다. 

 

 

반응형