What is IAM
이전 장에서 우리는 AWS 콘솔을 사용하지 않고 AWS CLI를 이용해 계정에서 작동할 수 있도록 IAM 사용자를 만들었습니다. 그러나 IAM 개념은 AWS 서비스의 보안을 처리 할 때 매우 자주 사용되므로 좀 더 자세히 이해해야 합니다. 불행히도 IAM은 많은 다른 부분들로 이루어져 있으며, 처음 접한 사람들에게는 IAM이 매우 혼란스러울 수 있습니다. 이 장에서는 IAM과 그 개념을 좀 더 자세하게 살펴 보겠습니다.
IAM의 공식적인 정의부터 시작해보겠습니다.
AWS ID 및 액세스 관리(IAM)는 사용자를 위해 AWS 리소스에 대한 액세스를 안전하게 제어할 수 있게 해주는 웹 서비스입니다. IAM을 사용하여 AWS 리소스를 이용할 수 있는 사용자(인증:authentication)와 사용자가 접근 가능한 리소스를 어떤 방식으로(권한부여:authorization) 이용할 수 있는지를 제어합니다.
여기서 주목해야 할 첫 번째 점은 IAM은 AWS에 있는 다른 모든 서비스와 마찬가지로 그냥 하나의 서비스입니다. 하지만 어떤면에서는 안전한 방법으로 모든 서비스들을 아우를 수 있게 도와줍니다. IAM은 몇 가지 다른 부분들로 이루어져 있으므로 처음부터 가장 기본적인 것을 먼저 살펴 보겠습니다.
IAM 사용자는 무엇입니까?
AWS 계정을 처음 생성하면 루트 사용자가 됩니다. 계정을 만들때 사용한 전자 메일 주소와 암호를 루트 게정 자격 증명이라고합니다. 이를 사용해 AWS 관리 콘솔에 로그인할 수 있습니다. 그렇게하면 결제 정보에 대한 액세스 및 비밀번호 변경 기능을 포함하여 AWS 계정의 모든 리소스에 대한 무제한 액세스 권한을 갖게 됩니다.
이 수준의 액세스 권한을 가지고 정기적으로 계정에 액세스하는 것은 좋지 않지만 계정에 유일한 사람인 경우 문제가 되지 않습니다. 그러나 다른 사람이 AWS 계정에 액세스하고 관리해야할 경우, 루트 자격 증명을 제공하지 않을 것입니다. 대신 IAM 사용자를 생성합니다.
IAM 사용자는 AWS 관리 콘솔에 로그인하기 위한 이름, 비밀번호 및 API 또는 CLI와 함께 사용할 수 있는 최대 2개의 액세스 키로 구성됩니다.
기본적으로 사용자는 계정의 모든 서비스 항목에 액세스할 수 없습니다. 여러분이 직접 정책을 작성하고 사용자에게 해당 정책을 첨부하여 권한을 부여해야합니다. 이러한 정책 중 하나 이상을 부여하여 사용자가 액세스할 수 있는 것과 액세스할 수 없는 것을 제한할 수 있습니다.
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에게 이메일을 보낼 수 있도록 Lambda를 제한하여 다른 사람들에게 스팸 메일을 발송하지 못하도록 하고 싶습니다. 이러한 작업은 IAM 사용자를 만들고 사용자의 자격증명을 Lambda 함수에 넣거나 코드에 자격증명을 포함 시키면 모두 가능하지만 이것은 안전한 방법이 아닙니다. 누군가 이 자격 증명을 얻는다면, 당신을 대신하여 전화를 걸 수 있습니다. 바로 여기에서 IAM 역할이 필요합니다.
IAM 역할은 AWS에서 ID를 이용해 인증된 사용자가 수행할 수 있는 작업과 수행할 수 없는 작업을 결정하는 권한 정책이 ID 인증에 있는 것 처럼 IAM 사용자와 매우 유사합니다. 그러나 역할에는 이와 관련된 자격 증명(암호 또는 액세스 키)이 없습니다. 한 사람과 고유하게 연결되는 대신, 필요한 사람이 역할을 수행할 수 있습니다. 이 경우 Lambda 함수는 일시적으로 권한을 수행하기 위해 역할을 할당 받는 것입니다.
역할은 사용자에게도 적용될 수 있습니다. 이 경우 사용자는 IAM 역할에 대한 정책 세트를 사용하고 있습니다. 이 기능은 사용자가 조직에서 여러 개의 “모자”를 쓰고 있는 경우에 유용합니다. 어떤 특정한 역할을 수행하기 위해 이러한 역할을 한 번만 만들면 되기 때문에 훨씬 수월하며 이러한 작업을 수행하려는 다른 사람들에게 다시 사용할 수 있습니다.
다른 조직의 사용자 ARN에 연결된 역할을 가질 수도 있습니다. 이렇게하면 외부 사용자가 해당 역할을 조직의 일부로 간주할 수 있습니다. 일반적으로 AWS 조직에서 작동하는 타사 서비스를 사용하는 경우에 유용합니다. 교차 계정 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.