What is IAM
이전 장에서 우리는 AWS 콘솔을 사용하지 않고 AWS CLI를 이용해 계정에서 작동할 수 있도록 IAM 사용자를 만들었습니다. 그러나 IAM 개념은 AWS 서비스의 보안을 처리 할 때 매우 자주 사용되므로 좀 더 자세히 이해해야 합니다. 불행히도 IAM은 많은 다른 부분들로 이루어져 있으며, 처음 접한 사람들에게는 IAM이 매우 혼란스러울 수 있습니다. 이 장에서는 IAM과 그 개념을 좀 더 자세하게 살펴 보겠습니다.
IAM의 공식적인 정의부터 시작해보겠습니다.
AWS 자격 및 접근 관리(AWS Identity and Access Management, IAM)는 는 당신의 사용자들이 AWS 리소스에 대하여 가지는 접근 권한을 안전하게 제어할 수 있도록 도와주는 웹 서비스입니다. IAM을 사용하여 누가 AWS 리소스를 이용할 수 있는지(인증:Authentication), 그리고 사용자가 접근 가능한 리소스를 어떤 방식으로 이용할 수 있는지(권한 부여:Authorization)를 제어합니다.
여기서 첫번째로 주목해야 하는 점은 바로 IAM은 AWS에 있는 다른 모든 서비스와 마찬가지로 그냥 하나의 서비스라는 것입니다. 하지만 한편으로는, IAM은 다른 AWS 서비스들을 안전한 방법으로 통합할 수 있도록 도와줍니다. IAM은 여러 가지 부분들로 이루어져 있으므로 먼저 가장 기본적인 것부터 살펴보겠습니다.
IAM 사용자는 무엇입니까?
AWS 계정을 처음 생성하면 루트 사용자가 됩니다. 계정을 만들때 사용한 전자 메일 주소와 암호를 루트 계정 자격 증명(credentials)이라고합니다. 이를 사용해 AWS 관리 콘솔에 로그인할 수 있습니다. 그렇게 하면 결제 정보에 대한 접근 및 비밀번호 변경 기능을 포함하여 AWS 계정의 모든 리소스에 대한 무제한 접근 권한을 갖게 됩니다.
이 수준의 접근 권한을 가지고 정기적으로 계정에 액세스하는 것은 좋지 않지만, 당신이 계정을 사용하는 유일한 사람인 경우 문제가 되지 않습니다. 그러나 다른 사람이 AWS 계정에 접근하고 관리해야할 경우, 루트 자격 증명을 제공하지 말아야 합니다. 대신, 별도의 IAM 사용자를 생성하는 것이 좋습니다.
IAM 사용자는 AWS 관리 콘솔에 로그인하기 위한 이름, 비밀번호 및 API 또는 CLI와 함께 사용할 수 있는 최대 2개의 액세스 키로 구성됩니다.
기본적으로 사용자는 계정의 그 어떤 서비스 항목에도 접근할 수 없습니다. 여러분이 직접 정책을 작성하고 사용자에게 해당 정책을 첨부하여 권한을 부여해야합니다. 하나 이상의 정책을 부여하여 해당 사용자의 접근 범위를 제한할 수 있습니다.
IAM 정책은 무엇인가요?
IAM 정책(Policy)은 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 함수에 넣거나 코드 상에 자격 증명을 포함시키면 모두 가능하겠지만, 안전한 방법은 아닙니다. 누군가 이 자격 증명을 손에 넣는다면, 당신을 사칭하여 이러한 작업을 대신 수행하게될 수도 있습니다. 바로 여기에서 IAM 역할이 필요합니다.
IAM 역할은 권한 정책이 부여된 자격(Identity)으로, 권한 정책은 어떤 자격을 가졌을 때 AWS 상에서 수행할 수 있는 작업의 범위를 정헤줍니다. 이런 점에서 IAM 역할은 사용자와 아주 유사합니다. 하지만 역할은 자격 증명(암호 또는 접근 키)을 갖지 않는다는 차이점을 갖습니다. 역할은 한 사용자에 고유하게 연결되는 것이 아니라, 해당 역할을 필요로 하는 사용자에 의하여 사용될 수 있습니다. 이 경우 Lambda 함수는 일시적으로 권한을 얻기 위해 역할을 할당 받는 것입니다.
역할은 사용자에게도 적용될 수 있습니다. 이 경우 사용자는 특정 IAM 역할에 대한 정책 집합을 부여받게 됩니다. 이 기능은 사용자가 조직에서 여러 개의 “모자”를 쓰고 있는 경우에 유용합니다. 어떤 특정한 역할을 수행하기 위해 이러한 역할을 한 번만 만들면 되기 때문에 훨씬 수월하며 이러한 역할을 수행하려는 다른 사람들에게 다시 사용할 수 있습니다.
다른 조직에 소속된 외부 사용자가 소유하는 ARN에 연결되는 역할을 사용할 수도 있습니다. 이렇게 하면 외부 사용자로 하여금 해당 역할이 당신 조직의 일부분인 것으로 여기도록 만들 수 있습니다. 이것은 당신의 AWS 조직 상에서 작동하는 타사(Third party) 서비스가 존재하는 경우에 흔히 사용됩니다. 교차 계정(Cross-Account) IAM 역할을 만들고 외부 사용자를 신뢰 관계(Trust Relationship)로 추가하면 됩니다. 신뢰 관계란, 특정 외부 사용자가 해당 역할을 수행할 수 있다고 AWS에 알리는 것입니다.
IAM 그룹은 무엇인가요?
IAM 그룹은 단순히 IAM 사용자들의 모음입니다. 그룹을 사용하면 여러 사용자들의 권한을 지정할 수 있습니다. 예를 들어, Admins라는 그룹을 만들고, 관리자라면 일반적으로 필요한 권한 유형을 해당 그룹에 부여 할 수 있습니다. 해당 그룹의 모든 사용자는 그룹에 할당 된 권한을 자동으로 갖습니다. 그룹에 새로운 사용자가 합류하고 관리자 권한이 부여되어야 하는 경우, 이 사용자를 해당 그룹에 추가하면 됩니다. 마찬가지로, 어떤 사용자의 조직 내 업무 내용이 변경되었다면, 해당 사용자의 권한을 직접 수정하는 것이 아니라, 해당 사용자를 기존의 그룹에서 제거한 뒤 적절한 새 그룹에 추가하면 됩니다.
이 정도면 IAM과 관련 개념에 대하여 빠르게 이해할 수 있을 겁니다. 이어지는 장에서도 위의 내용들은 계속하여 언급됩니다. 다음으로, 또 다른 AWS 개념인 ARN에 대하여 빠르게 살펴 보겠습니다.
For help and discussion
Comments on this chapterIf you liked this post, please subscribe to our newsletter, give us a star on GitHub, and follow us on Twitter.