AWS IAM (Identity and Access Management)

Googy·2023년 6월 25일
0
post-thumbnail

IAM (Identity and Access Management)은 AWS 서비스 및 리소스에 대한 접근 권한을 관리할 수 있는 서비스이다.

IAM 서비스에 접속하면 리전이 Global인 것을 확인할 수 있다. IAM은 리전 별로 구분하지 않고 글로벌로 통합하여 관리하는 서비스이다.

IAM Resources

  • 사용자 (User)
  • 그룹 (Group)
  • 정책 (Policy)
  • 역할 (Role)

IAM을 이용해 적절한 접근 제어를 적용하려면 위 개념들을 잘 이해하고 넘어가야 한다.

사용자(User)

AWS에서는 일반적으로 하나의 계정(Account)를 여러 사람이 공유하여 사용하게 된다. 같이 작업할 사람이 추가되었다면 이 사용자(User)를 새로 생성하여 신규 작업자에게 제공할 수 있다.

사용자 권한

사용자(User)에게 권한을 주는 방법은 다음과 같다.

  • 권한 정책(Policy) 연결
  • 그룹(Group)에 포함
  • 역할(Role) 부여

사용자 생성

별로 실감 나지 않으니 직접 생성하고 사용해 보자.
사용자 > 사용자 추가

Step 1) 사용자 세부 정보 지정

Step 2) 권한 설정

권한을 줄 수 있는 여러 가지 방법을 확인할 수 있다. 직접 정책 연결을 선택하면 AWS에서 미리 만들어놓은 여러 권한 정책을 확인할 수 있다. 지금은 특별히 권한을 주지 않고 생성해 보자.

Step 3) 검토 및 생성

앞에서 설정한 내용들을 확인해 볼 수 있다. 생성된 User 계정에 자동으로 암호를 부여해 주고, 로그인 시 재설정하도록 설정된 것을 볼 수 있다. 특별히 권한을 추가하지 않았지만 사용자가 비밀번호를 변경하여 사용할 수 있도록 IAMUserChangePassword 권한이 있는 것도 확인할 수 있다.

Step 4) 암호 검색

사용자(User) 생성을 완료하면 생성된 사용자의 로그인 정보를 확인할 수 있다. 위 정보를 csv 파일로 다운로드 받아서 사용자 계정을 전달해 주면 된다.

사용자 로그인

앞에서 본 콘솔 로그인 URL로 접속하면 "IAM 사용자로 로그인" 페이지로 이동하고, 자동으로 계정 ID가 입력된다. 계정 ID (또는 계정 Alias)를 외우고 있다면 AWS 로그인 페이지로 와서 직접 입력해도 된다. 그리고 전달받은 사용자 이름과 암호를 입력하면 사용자(User)로 로그인할 수 있다.

매번 링크로 접속하기는 귀찮고, 계정 ID (12자리)를 외우기도 힘들다면, 루트 사용자가 계정 ID 대신 외우기 쉬운 계정 별칭(Alias)를 만들어 줄 수 있다.

사용자를 생성해야 하는 이유

  • 사용자에 따라서 권한을 다르게 부여할 수 있다.
  • AWS 계정에서 어떤 사용자가 어떤 작업을 했는지 확인할 수 있다. (CloudTrail)

그룹(Group)

그룹(Group)을 이용하면 여러 사용자를 포함시키고 권한 정책(Policy)를 연결하여, 여러 사용자에게 동일한 권한을 제공할 수 있다.

한 사용자는 여러 그룹에도 들어갈 수 있다.

정책(Policy)

실제 서비스나 리소스에 대한 권한이 명시되어 있는 리소스이다. 사용자, 그룹, 역할 등에 연결하여 권한을 부여한다.

정책 유형

  • 자격 증명 기반 정책 (Identity-based policies)
  • 리소스 기반 정책 (Resource-based policies)
  • IAM 권한 경계 (Permissions boundaries)
  • 서비스 제어 정책 (Organizations SCPs)
  • 액세스 제어 목록 (Access control lists (ACLs))
  • 세션 정책 (Session policies)

위와 같이 다양한 유형의 정책이 있지만, 여기서는 자격 증명 기반 정책에 대해서만 다룰 것이다. 자격 증명 기반 정책은 자격 증명(사용자, 그룹, 역할 등)이 무슨 작업(Action)을 어느 리소스(Resource)에서 어떤 조건(Condition)에서 수행할 수 있는지를 정의하여 제어할 수 있다.

https://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/access_policies.html#policies_id-based

사용자에 정책 연결

앞에서 만들었던 John이라는 사용자로 로그인하여 EC2 서비스에 접속해 보자.

현재는 아무 권한도 없기 때문에 EC2와 관련된 어떤 것도 조회할 수 없다.


그럼 다시 관리자로 로그인하여 John에게 권한을 추가해 주자.
IAM > 사용자 > John > 권한 추가

AmazonEC2FullAccess 권한을 추가하자.

사용자 John의 권한에 AmazonEC2FullAccess가 추가된 것을 볼 수 있다. [+]를 누르면 세부적으로 어떻게 권한이 적용되었는지 Json으로 확인할 수 있다. 이제 다시 John으로 로그인하면 EC2 서비스를 정상적으로 이용할 수 있다.

정책 Json 구조

ex) IAMReadOnlyAccess

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iam:GenerateCredentialReport",
                "iam:GenerateServiceLastAccessedDetails",
                "iam:Get*",
                "iam:List*",
                "iam:SimulateCustomPolicy",
                "iam:SimulatePrincipalPolicy"
            ],
            "Resource": "*"
        }
    ]
}

Statement 내에 값을 중점적으로 알아보자.

  • Effect
    Allow / Deny 지정
  • Action
    어떤 작업인지 지정
  • Resource
    특정 리소스를 지정
  • Condition
    정책이 적용될 조건을 지정
    ex) "NotIpAddress": { "aws:SourceIp": ["192.168.1.0", "192.168.1.1"] }

https://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/reference_policies_elements.html

profile
재밌는 걸 만들고 싶어요

0개의 댓글