IAM이란 무엇인가
IAM이란 무엇인가
이 가이드는 Amazon Identity and Access Management(IAM)를 사용하여 사용자를 관리합니다. AWS 계정을 설정할 때, AWS 콘솔을 사용하지 않고도 AWS CLI가 계정에서 작동할 수 있도록 첫 번째 IAM 사용자를 생성했습니다. IAM 개념은 더 넓은 목적을 가지고 있습니다. AWS 서비스의 보안을 다룰 때 매우 자주 사용되므로, 조금 더 자세히 이해할 가치가 있습니다. 안타깝게도 IAM은 여러 다른 부분으로 구성되어 있어 처음 접하는 사람들에게는 매우 혼란스러울 수 있습니다. 이 장에서는 IAM과 그 개념을 조금 더 자세히 살펴보겠습니다.
IAM의 공식 정의부터 시작해 보겠습니다.
AWS Identity and Access Management(IAM)은 사용자가 AWS 리소스에 대한 접근을 안전하게 제어할 수 있도록 도와주는 웹 서비스입니다. IAM을 사용하여 누가 AWS 리소스를 사용할 수 있는지(인증)와 어떤 리소스를 어떤 방식으로 사용할 수 있는지(인가)를 제어할 수 있습니다.
여기서 첫 번째로 주목할 점은 IAM이 AWS가 제공하는 다른 모든 서비스와 마찬가지로 하나의 서비스라는 것입니다. 하지만 어떤 면에서는 모든 서비스를 안전하게 통합하는 데 도움을 줍니다. IAM은 몇 가지 다른 부분으로 구성되어 있으므로, 가장 기본적인 부분부터 살펴보겠습니다.
IAM 사용자란 무엇인가
AWS 계정을 처음 생성하면 여러분은 루트 사용자가 됩니다. 계정 생성 시 사용한 이메일 주소와 비밀번호를 루트 계정 자격 증명이라고 합니다. 이를 사용해 AWS 관리 콘솔에 로그인할 수 있습니다. 로그인하면 AWS 계정의 모든 리소스에 대한 완전하고 제한 없는 접근 권한을 가지게 됩니다. 여기에는 청구 정보 접근과 비밀번호 변경 기능도 포함됩니다.
이러한 수준의 접근 권한으로 정기적으로 계정에 접근하는 것은 좋은 습관이 아닙니다. 하지만 여러분이 계정에서 작업하는 유일한 사람이라면 문제가 되지 않습니다. 그러나 다른 사람이 여러분의 AWS 계정에 접근하고 관리해야 할 경우, 루트 자격 증명을 제공하고 싶지 않을 것입니다. 대신 IAM 사용자를 생성합니다.
IAM 사용자는 이름, AWS 관리 콘솔에 로그인하기 위한 비밀번호, 그리고 API나 CLI에서 사용할 수 있는 최대 두 개의 액세스 키로 구성됩니다.
기본적으로 사용자는 계정의 어떤 것에도 접근할 수 없습니다. 정책을 생성하고 이를 사용자에게 부착함으로써 권한을 부여합니다. 하나 이상의 정책을 부여하여 사용자가 접근할 수 있는 것과 없는 것을 제한할 수 있습니다.
IAM 정책이란?
IAM 정책은 AWS 리소스에 대해 허용되거나 거부되는 작업을 정의하는 규칙 또는 규칙 집합입니다.
정책은 여러 가지 방식으로 부여할 수 있습니다:
- 관리형 정책을 부착. AWS는 AmazonS3ReadOnlyAccess와 같은 미리 정의된 정책 목록을 제공합니다.
- 인라인 정책을 부착. 인라인 정책은 직접 만든 커스텀 정책입니다.
- 적절한 권한 정책이 부착된 그룹에 사용자를 추가. 그룹에 대해서는 아래에서 자세히 살펴볼 것입니다.
- 기존 IAM 사용자의 권한을 복제.
예를 들어, 모든 S3 버킷에 대해 모든 작업을 허용하는 정책은 다음과 같습니다.
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Action": "s3:*",
"Resource": "*"
}
}
다음은 더 세분화된 접근을 허용하는 정책으로, Hello-bucket
이라는 버킷에서 Bobs-
로 시작하는 파일만 검색할 수 있도록 합니다.
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Action": ["s3:GetObject"],
"Resource": "arn:aws:s3:::Hello-bucket/*",
"Condition": {"StringEquals": {"s3:prefix": "Bobs-"}}
}
}
위 예제에서는 S3 리소스를 사용하고 있습니다. 하지만 정책은 모든 AWS 서비스에 대해 비슷하게 보입니다. Resource
속성에 대한 리소스 ARN에 따라 달라질 뿐입니다. ARN은 AWS에서 리소스를 식별하는 식별자이며, 다음 장에서 더 자세히 살펴볼 것입니다. 또한 Action
과 Condition
속성에 해당 서비스 작업과 조건 컨텍스트 키를 추가합니다. IAM 정책에서 사용할 수 있는 모든 AWS 서비스 작업과 조건 컨텍스트 키는 여기에서 확인할 수 있습니다. 정책을 사용자에게 부착하는 것 외에도, 역할이나 그룹에 부착할 수도 있습니다.
IAM 역할이란?
때로는 여러분의 AWS 리소스가 계정 내 다른 리소스에 접근해야 할 때가 있습니다. 예를 들어, DynamoDB를 쿼리하여 데이터를 가져오고, 이를 처리한 후 결과를 Bob에게 이메일로 보내는 Lambda 함수가 있다고 가정해 봅시다. 이 경우, Lambda가 실수로 데이터베이스를 변경하지 않도록 읽기 쿼리만 할 수 있도록 제한하고 싶습니다. 또한 Lambda가 Bob에게만 이메일을 보낼 수 있도록 제한하여 다른 사람에게 스팸을 보내지 않도록 하고 싶습니다. 이 작업은 IAM 사용자를 생성하고 해당 사용자의 자격 증명을 Lambda 함수에 넣거나 Lambda 코드에 자격 증명을 포함시켜 수행할 수 있지만, 이는 안전하지 않습니다. 누군가가 이 자격 증명을 얻으면 여러분을 대신하여 해당 호출을 할 수 있습니다. 이때 IAM 역할이 필요합니다.
IAM 역할은 사용자와 매우 유사합니다. 역할도 식별자이며, AWS에서 해당 식별자가 할 수 있는 작업과 할 수 없는 작업을 결정하는 권한 정책을 가지고 있습니다. 그러나 역할은 자격 증명(비밀번호나 액세스 키)과 연결되어 있지 않습니다. 역할은 특정 한 사람과 고유하게 연결되지 않고, 필요로 하는 누구나 이를 수행할 수 있습니다. 이 경우, Lambda 함수는 일시적으로 권한을 수행할 수 있는 역할이 할당됩니다.
역할은 사용자에게도 적용될 수 있습니다. 이 경우, 사용자는 IAM 역할에 설정된 정책을 수행합니다. 이는 조직 내에서 사용자가 여러 “역할”을 맡고 있는 경우에 유용합니다. 역할을 사용하면 이러한 역할을 한 번만 생성하면 되며, 이를 수행하려는 다른 누구나 재사용할 수 있습니다.
다른 조직의 사용자 ARN에 연결된 역할을 가질 수도 있습니다. 이를 통해 외부 사용자가 여러분의 조직의 일부로 해당 역할을 수행할 수 있습니다. 이는 일반적으로 AWS 조직을 대신하여 작업하는 타사 서비스가 있을 때 사용됩니다. 여러분은 Cross-Account IAM 역할을 생성하고 외부 사용자를 신뢰 관계로 추가하라는 요청을 받게 됩니다. 신뢰 관계는 지정된 외부 사용자가 이 역할을 수행할 수 있음을 AWS에 알리는 것입니다.
IAM 그룹이란?
IAM 그룹은 단순히 IAM 사용자들의 모음입니다. 여러분은 그룹을 사용하여 사용자 집합에 대한 권한을 지정할 수 있으며, 이를 통해 해당 사용자들의 권한을 더 쉽게 관리할 수 있습니다. 예를 들어, ‘Admins’라는 그룹을 만들고 해당 그룹에 관리자들이 일반적으로 필요로 하는 권한을 부여할 수 있습니다. 이 그룹에 속한 모든 사용자는 자동으로 그룹에 할당된 권한을 갖게 됩니다. 만약 새로운 사용자가 조직에 합류하고 관리자 권한이 필요하다면, 해당 사용자를 그룹에 추가함으로써 적절한 권한을 부여할 수 있습니다. 마찬가지로, 조직 내에서 직책이 변경된 경우, 사용자의 권한을 직접 수정하는 대신 기존 그룹에서 제거하고 적절한 새로운 그룹에 추가할 수 있습니다.
이를 통해 IAM과 그 개념에 대한 간략한 개요를 얻을 수 있습니다. 이 가이드의 다른 부분에서도 이러한 개념들을 참조할 것입니다. 또한 관련 개념인 AWS ARN도 함께 살펴보는 것이 좋습니다.
For help and discussion
Comments on this chapter