Develop/AWS

[AWS] IAM

Gr00t 2021. 2. 28. 16:15
이 글은 A Cloud Guru의 예제를 바탕으로 작성되었습니다.

IAM 이란?

AWS에서 제공하는 유저 관리 서비스로 API/서비스에 대한 계정과 접근 권한을 관리하도록 돕는 역할을 한다.

아래 그림을 보면 왼쪽에 AWS 계정에 3개의 그룹이 있고 각 그룹에 사용자가 속해있는 모습을 볼 수 있다. 이렇게 사용자와 그룹이 구성되면 해당 그룹에 권한을 부여해 그림 오른쪽 부분과 같이 각 사용자 혹은 그룹별로 할 수 있는 일을 정할 수 있게 된다.

출처 : A Cloud Guru


실습

사용자와 그룹은 이미 생성되어있다. 이를 전제로 총 3가지 작업을 해본다.

  1. 사용자와 그룹의 정보를 확인한다. (무엇을 확인할 수 있는지)
  1. 그룹에 사용자를 추가해본다. (어떻게 추가할 수 있는지)
  1. 각 사용자별로 권한이 다를때 실제 권한대로 동작하는지 확인해본다.

1. 환경 구성

사용자와 그룹은 이미 제공이 되므로 IAM를 사용하기 위해서 필요한 사용자그룹에 대한 정보를 확인해본다.

사용자 탐색

IAM사용자(Users)로 이동하면 사용자 현황을 볼 수 있다.

사용자 이름을 클릭하면 사용자에 대한 정보를 볼 수 있다.

  • ARN (Amazon Resource Name)
  • 경로
  • 생성시간
  • 권한
  • 그룹
  • 보안 자격 증명 (Security Credential)
    • 엑세스 키 (Access Key)
    • SSH public key
    • AWS CodeCommit을 위한 HTTPS Git자격 증명
  • 엑세스 관리자 (Access Advisor)

    액세스 관리자는 해당 사용자에게 부여된 서비스 권한과 해당 서비스에 마지막으로 액세스한 시간을 표시합니다.

그룹 탐색

IAM그룹(Groups)으로 이동하면 그룹에 대한 정보를 볼 수 있다.

그룹 이름을 클릭하면 그룹에 대한 정보를 확인할 수 있다.

  • 그룹 ARN
  • 사용자 수
  • 경로
  • 생성시간
  • 사용자
  • 권한
    • 인라인 정책

      일반적으로 일회성 상황에서 사용되는 하나의 사용자나 그룹에 할당되는 정책

    • 관리형 정책

      AWS에 의해 먼저 생성된 유저나 그룹, AWS 계정내에서 관리자가 서로 공유하는 정책들로 갱신 즉시 모든 대상에 대해서 변경사항이 적용된다.

  • 엑세스 관리자

그룹별 권한 확인

각 그룹별로 어떤 권한이 있는지 살펴본다. 후에 각 그룹별로 사용자를 추가해서 그룹의 권한대로 사용자가 할 수 있는 것과 없는 것이 제대로 동작하는지 확인할 것이므로 어떤 그룹이 어떤 권한을 가지고 있는지 잘 확인하도록 하자.

  • EC2-Admin

    이 정책은 EC2 인스턴스에 대한 describe/ start/ stop 권한과 elastic load balancing에 대한 view권한, cloudwatch에 대한 list/ get/ describe 권한을 가지고 있다. 또한, 모든 권한은 auto scaline과정에서 상속된다.

    정확히 무슨 말인지 모르겠다면 일단 EC2 인스턴스를 관리할 권한이 있다는 것만 확인하고 넘어가도록 하자.

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Action": [
            "ec2:Describe*",
            "ec2:StartInstances",
            "ec2:StopInstances"
          ],
          "Resource": "*",
          "Effect": "Allow"
        },
        {
          "Action": "elasticloadbalancing:Describe*",
          "Resource": "*",
          "Effect": "Allow"
        },
        {
          "Action": [
            "cloudwatch:ListMetrics",
            "cloudwatch:GetMetricStatistics",
            "cloudwatch:Describe*"
          ],
          "Resource": "*",
          "Effect": "Allow"
        },
        {
          "Action": "autoscaling:Describe*",
          "Resource": "*",
          "Effect": "Allow"
        }
      ]
    }

  • EC2-Support

    이 정책은 EC2 인스턴스에 대한 start, stop 권한이 없다는 점을 제외하면 EC2-Admin과 같은 권한을 가진다. 따라서 여기서도 EC2 인스턴스를 확인할 수 있다는 점만 기억하고 가도록 하자.

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": "ec2:Describe*",
          "Resource": "*"
        },
        {
          "Effect": "Allow",
          "Action": "elasticloadbalancing:Describe*",
          "Resource": "*"
        },
        {
          "Effect": "Allow",
          "Action": [
            "cloudwatch:ListMetrics",
            "cloudwatch:GetMetricStatistics",
            "cloudwatch:Describe*"
          ],
          "Resource": "*"
        },
        {
          "Effect": "Allow",
          "Action": "autoscaling:Describe*",
          "Resource": "*"
        }
      ]
    }

  • S3-Support

    이 정책은 이름부터가 EC2가 아닌 S3에 대한 정책이다. S3에 대한 get과 list권한을 가지고 있다고 한다.

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "s3:Get*",
            "s3:List*"
          ],
          "Resource": "*"
        }
      ]
    }

2. 사용자 추가

각 그룹이 어떤 권한을 가지는지 살펴봤으니 이제 그룹에 사용자를 추가하는 방법을 알아보자. 각 그룹을 클릭하면 아래에 다음 사진과 같이 그룹에 사용자 추가라는 버튼을 볼 수 있다. 이 버튼을 눌러 사용자를 추가해보도록 한다.

user-1을 추가했을때 다음과 같이 UI가 변경되면서 추가된 사용자를 볼 수 있다.

이제 권한별로 확인을 하기 위해서 나머지 그룹에서 user-2user-3을 추가해보도록 하자.

이제 각 그룹별로 사용자가 하나씩 추가됐다.

3. 권한별 동작 확인

그룹에 대한 권한을 사용자가 가지게 된다면 위에서 확인했던 것처럼 그룹별로 할 수 있는 일이 다를 것이다. 여기서는 이런 과정을 직접 확인해본다.

IAM Sign-In Link를 사용해 각 유저에 로그인

IAM대시보드(Dashboard)에 들어가면 맨 위에 계정 로그인을 위한 URL을 찾을 수 있다. 이 URL을 통해 각 사용자별로 로그인을 해보자. 여기서는 편의를 위해 A Cloud Guru에서 제공한 user명과 password를 사용해 접속한다.

user-1 권한 확인

  • S3 권한 확인

    user-1S3-Support그룹의 권한을 가지고 있다. 따라서 S3에 접근하는 권한이 있을 것이다. S3버킷(buckets)로 이동해 S3 버킷을 생성해보도록 하자.(S3가 뭔지 몰라도 상관없다. 여기서는 해당 권한이 제대로 동작하는지 확인하는 것이 목적이다.)

    이동해서 보면 버킷이 있는지 없는지 정도는 볼 수 있다. 접근 권한을 가지고 있기 때문이다. 이제 생성 권한이 없는데 생성이 가능한지 확인하도록 하자.

    S3에 대한 get과 list 권한은 있어서 접근은 가능했지만 생성에 대한 권한은 없었기때문에 생성하려고 하면 아래와 같이 에러를 만나야 정상이다. 이제 EC2로 이동해 확인해보도록 하자.

  • EC2 권한 확인

    EC2 로 이동하면 원래 보여야하는 화면이 제대로 보이지 않고 API 오류라고 뜨면서 아무것도 확인할 수 없다. 이 사용자 그룹에는 EC2에 대한 권한이 아예 없기 때문이다.

user-2 권한 확인

  • S3 권한 확인

    user-2의 그룹 권한에는 S3에 대한 권한이 없음으로 접근 자체가 되지 않는다.

  • EC2 권한 확인

    S3와 다르게 EC2인스턴스에 대한 접근 권한은 존재하므로 인스턴스의 정보를 확인할 수 있다.

    그럼 start, stop 권한은 없었으니 한번 중지시켜보고 동작하는지 확인하도록 한다.

    결과는 역시 실패로 아래와 같이 권한이 없다는 에러 메세지를 볼 수 있다.

user-3 권한 확인

  • S3 권한 확인

    user-3역시 S3에 대한 권한은 없었다. S3로 접속해보면 접근 자체가 안됨을 볼 수 있다.

  • EC2 권한 확인

    user-2도 EC2에 대한 접근은 됐으니 더 많은 권한을 가지고 있는 user-3는 당연히 EC2에 대한 접근이 가능할 것이다.

    그럼 좀 전에 user-2에서 실패한 EC2 인스턴스르를 중지하고 다시 실행시키는 작업을 user-3는 할 수 있을 것이다. 인스턴스를 클릭하고 중지시킨 후 다시 실행해보자.

    성공적으로 중지도 되고 다시 실행도 되는 것을 볼 수 있다.


마무리

해당 예제를 진행하면서 각 그룹별로 그리고 사용자별로 권한을 깔끔하게 정리할 수 있다는 측면에서 IAM이 AWS를 사용할때 굉장히 편리하다는 것을 어느정도 느낄 수 있었다. 예전에 AWS로 서버 구축을 하다 권한 설정의 문제로 몇 번 서버를 날려먹은 적이 있는데 IAM을 사용해 구축했다면 인스턴스를 날리지는 않아도 됐을 것 같다.