IAM의 권한 및 정책
AWS IAM의 액세스 관리를 통해 계정에서 보안 주체 엔터티에 허용된 권한을 정의할 수 있다. 보안 주체 엔터티란 IAM 엔터티(사용자 또는 역할)를 사용하여 인증된 사람 또는 애플리케이션이다. 액세스 관리를 흔히 권한 부여(Authorization)라고 한다. 정책을 생성하고 IAM 아이덴터티(사용자, 사용자 그룹 또는 역할) 또는 AWS 리소스에 연결하여 AWS에서 액세스를 관리한다. 정책은 아이덴터티나 리소스와 연결될 때 해당 권한을 정의하는 AWS의 객체이다. AWS는 IAM 엔터티(사용자 또는 역할)가 요청을 보낼 때 이러한 정책을 평가한다. 정책에서 권한은 요청이 허용되거나 거부되는지를 결정한다. 대부분의 정책은 AWS에 JSON 문서로서 저장된다.
1. 정책 및 계정
AWS에서 하나의 계정을 관리하려면 정책을 사용하여 해당 계정 내 권한을 정의한다. 여러 계정 전반의 권한을 관리하고자 한다면 사용자에 대한 권한을 관리하기가 더 어렵다. 교차 계정 권한에 대해 IAM 역할, 리소스 기반 정책 또는 액세스 제어 목록(ACL)을 사용할 수 있다. 하지만 여러 계정을 소유하는 경우에는 이러한 권한을 쉽게 관리할 수 있도록 ACL 대신에 AWS Organizations 서비스를 사용하는 것이 좋다.
2. 정책 및 사용자
IAM 사용자는 서비스의 아이덴터티이다. IAM 사용자를 생성할 경우, 권한을 부여하지 않는 한 사용자는 계정 내에서 어떠한 것으로도 액세스할 수 없다. 사용자 또는 사용자가 속한 그룹에 연결된 정책인 아이덴터티 기반 정책을 생성하여 사용자에게 권한을 부여한다. 다음 예는 사용자가 us-east-2
리전 내의 123456789012
계정에서 Books
테이블의 모든 Amazon DynamoDB 작업(dynamodb:*
)을 수행할 수 있도록 허용하는 JSON 정책을 보여준다.
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Action": "dynamodb:*",
"Resource": "arn:aws:dynamodb:us-east-2:123456789012:table/Books"
}
}
이 정책을 IAM 사용자에게 연결한 후에는 해당 사용자가 이러한 DynamoDB 권한만 부여받는다. 대부분의 사용자는 해당 사용자의 권한을 함께 나타내는 여러 정책을 부여받는다.
명시적으로 허용되지 않은 작업 또는 리소스는 기본적으로 모두 거부된다. 예를 들어 앞서 다룬 정책이 사용자에게 연결된 유일한 정책이라면 이 사용자는 Books
테이블에 대한 DynamoDB 작업만 수행할 수 있다. 다른 모든 테이블에 대한 작업은 금지된다. 마찬가지로 사용자는 Amazon EC2, Amazon S3 또는 기타 다른 AWS 서비스의 어떠한 작업도 수행할 수 없다. 그 이유는 권한 정책이 함께 작업할 이러한 서비스는 정책에 포함되지 않기 때문이다.
3. 정책 및 그룹
IAM 사용자를 IAM 그룹으로 구성하고 이 그룹에 정책을 연결할 수 있다. 이 경우 각 사용자는 별도의 아이덴터티를 갖고 있지만 그룹에 연결된 정책에 명시된 권한이 그룹 내 모든 사용자에게 부여된다. 그룹을 사용하여 간편하게 권한을 관리하고 IAM의 보안 모범 사례에 따를 수 있다.
사용자 또는 그룹에 여러 정책을 연결하여 다양한 권한을 부여할 수 있다. 이 경우 사용자의 권한은 각 정책의 조합으로 계산된다. 그러나 개별 작업 및 리소스에 대한 권한을 명시적으로 부여해야 사용자가 해당 권한을 가지게 되는 기본 원칙은 여전히 적용된다.
4. 페더레이션(Federation) 사용자 및 역할
페더레이션 사용자에게는 IAM 사용자처럼 AWS 계정에서 영구적인 ID가 부여되지 않는다. 페더레이션 사용자에게 권한을 부여하려면 역할(Role)이라고 하는 개체를 만들어 해당 역할의 권한을 정의할 수 있다. 페더레이션 사용자가 AWS에 로그인하면 사용자가 역할과 연결되고 역할에 정의된 권한이 부여된다.
5. 아이덴터티 기반 정책 및 리소스 기반 정책
아이덴터티 기반 정책은 IAM 사용자, 그룹 또는 역할과 같은 IAM 아이덴터티에 연결할 수 있는 권한 정책이다. 리소스 기반 정책은 Amazon S3 버킷 또는 IAM 역할 신뢰 정책과 같은 리소스에 연결하는 권한 정책이다.
아이덴터티 기반 정책은 아이덴터티가 수행할 수 있는 작업, 대상 리소스 및 이에 관한 조건을 제어한다. 아이덴터티 기반 정책을 추가로 분류할 수 있다.
-
관리형 정책 - AWS 계정에 속한 다수의 사용자, 그룹 및 역할에게 독립적으로 연결할 수 있는 아이덴터티 기반 정책. 사용할 수 있는 관리형 정책은 두 가지가 있다.
-
AWS 관리형 정책 - AWS에서 생성 및 관리하는 관리형 정책. 정책 사용이 처음이라면 AWS 관리형 정책 사용을 먼저 권장한다.
-
고객 관리형 정책 - 사용자가 자신의 AWS 계정에서 생성 및 관리하는 관리형 정책. 고객 관리형 정책은 AWS 관리형 정책보다 정책에 대해 더욱 정밀하게 제어할 수 있다. 시각적 편집기에서 또는 JSON 정책 문서를 직접 생성하여 IAM 정책을 생성, 편집 및 검증할 수 있다.
-
-
인라인 정책 - 자신이 생성 및 관리하며, 단일 사용자, 그룹 또는 역할에 직접 포함되는 정책. 대부분의 경우 인라인 정책을 사용하지 않는 것이 좋다.
리소스 기반 정책은 지정된 보안 주체가 해당 리소스에 대해 수행할 수 있는 작업 및 이에 관한 조건을 제어한다. 리소스 기반 정책은 인라인 정책이며, 관리형 리소스 기반 정책은 없다. 교차 계정 액세스를 활성화하려는 경우 전체 계정이나 다른 계정의 IAM 개체를 리소스 기반 정책의 보안 주체로 지정할 수 있다.
IAM 서비스는 역할 신뢰 정책이라고 하는 리소스 기반 정책 유형 하나만 지원하며, 이 유형은 IAM 역할에 연결된다. IAM 역할은 리소스 기반 정책을 지원하는 아이덴터티이자 리소스이므로 신뢰 정책과 아이덴터티 기반 정책 모두 IAM 역할에 연결해야 한다. 신뢰 정책은 역할을 수임할 수 있는 보안 주체 엔터티(계정, 사용자, 역할 및 페더레이션 사용자)를 정의한다.