Devops

AWS IAM

Prower 2023. 4. 27. 19:58
728x90
반응형

AWS IAM은 AWS의 리소스에 대한 접근 권한을 설정할 수 있는 서비스입니다. IAM은 다음의 세가지 요소를 통해 접근 권한을 설정할 수 있습니다.

  • 접근 주체: AWS의 리소스에 접근하고자 하는 주체(유저, AWS 리소스, 그룹 등...)
  • AWS 리소스: EC2, storage, secret manager, 사용자 등의 접근 주체가 접근하고자 하는 AWS 서비스
  • 접근 권한: AWS 리소스에 대한 조회, 추가, 수정.. 등의 접근 주체가 수행하고자 하는 권한

예를 들어 새로 생성한 유저가 EC2 인스턴스에 대한 연결 권한이 없는 경우 연결 권한을 부여하여 연결이 될 수 있도록 해야 합니다. 여기서 새로 생성한 유저가 접근 주체에 해당하고, EC2 인스턴스가 AWS 리소스가 되며, 연결 행위 가 접근 권한이 됩니다.

IAM이 필요한 이유

AWS의 리소스를 사용하는 접근 주체가 모든 접근 권한을 가지고 있다면 보안상 심각한 위험이 발생할 수 있습니다. 예를 들어 개발용으로 생성한 유저가 EC2 인스턴스에 대한 삭제 혹은 변경 권한을 갖고 있다면 실수로 EC2 인스턴스를 종료하거나 변경시킬 수도 있습니다. 또한, 외부로 노출이 되선 안되는 중요 킷값들의 경우 모든 접근 주체에서 접근이 가능하다면 외부로 유출될 가능성도 발생합니다.

AWS에서는 AWS리소스를 안전하게 관리하기 위해 위해 접근 주체가 AWS를 사용하려는 경우 필요한 만큼의 권한을 설정하도록 IAM을 제공합니다.

IAM에서 제공하는 서비스

정책(Policy)

정책은 여러개의 AWS 리소스에 대한 여러개의 접근 권한 설정이 가능한 서비스입니다.

다음의 예시는 test 라는 S3 버킷의 오브젝트를 조회하는 행위를 허용하는 예시입니다. Action 에 허용하고자 하는 접근 권한이 명시되며, Resource 에 접근을 허용하고자 하는 AWS 리소스를 명시합니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
            ],
            "Resource": [
                "arn:aws:s3:::test"
            ]
        },
    ]
}

IAM에서는 AWS 리소스에 대한 접근 권한을 미리 설정해둔 여러가지 기본 정책을 제공하며, 위 예시처럼 관리자가 직접 정책을 생성할 수도 있습니다.

정책은 접근 주체에 대해서 명시하지 않으며, 여러개의 AWS 리소스와 접근 권한을 미리 설정하여 여러 접근 주체에 부여할 수 있도록 합니다.

사용자(User)

사용자는 접근 주체에 해당하는 개념으로 AWS 리소스에 대한 접근 권한을 허용하는 접근 주체를 생성할 때 사용합니다.

대부분의 조직에서는 업무를 위한 여러 사용자가 필요하며, 각 사용자가 업무상 접근할 수 있는 AWS 리소스는 제한되어야 합니다. AWS에서는 하나의 루트 계정에 AWS 콘솔에 로그인 할 수 있는 여러개의 사용자를 생성할 수 있도록 하여 이러한 조직 내 업무가 가능하도록 합니다.

사용자는 다음과 같은 2가지 행위가 가능합니다.

  • 인증을 통한 AWS 콘솔에 로그인
  • 부여된 정책에 따란 AWS 리소스에 접근

사용자는 AWS 인증을 통해 AWS 콘솔에 로그인하고, 허용된 접근 권한 하에서 업무를 수행하도록 할 수 있습니다.

다음 예시는 사용자를 생성하는 과정에서 정책을 설정하는 페이지입니다. 미리 test_s3 라는 S3 오브젝트를 읽을 수 있는 정책을 생성했으며, 사용자에게 해당 권한을 부여합니다. 해당 사용자는 인증을 통해 AWS 콘솔에 로그인하여 S3 오브젝트를 읽을 수 있습니다.

사용자 그룹(User Group)

여러 사용자를 모아 관리하는 사용자 집단입니다. 사용자와 마찬가지로 사용자 그룹에도 정책을 설정할 수 있습니다. 사용자는 사용자 그룹에 할당 될 수 있으며, 사용자 그룹에 할당된 사용자는 사용자 그룹에 설정된 모든 정책을 부여받습니다.

예를 들어 사용자 그룹에 EC2에 대한 연결 권한을 부여하고 위 예시의 사용자를 할당한 경우 해당 사용자 또한 EC2에 대한 연결 권한을 부여받게 됩니다.

사용자와 사용자 그룹은 N:M 관계로 하나의 사용자 그룹에 여러 사용자를 할당할 수 있으며, 하나의 사용자에 여러 사용자 그룹을 설정하여 한번에 권한 부여가 가능합니다.

역할(role)

접근 주체에 정책을 부여하는 서비스입니다. 접근 주체에 접근 권한을 부여한다는 점에서 사용자와 유사해 보이지만 다음과 같은 차이점이 있습니다.

  • 접근 주체를 생성하지 않음: 사용자는 접근 권한을 부여함과 동시에 접근 주체를 생성합니다. 역할은 접근 주체를 생성하지 않으며, 이미 생성된 접근 주체에게 접근 권한을 부여한다는 것만 명시합니다.
  • 접근 주체가 인증을 하지 않음: 사용자는 생성된 접근 주체가 서비스를 사용하기 위해 인증을 수행해야 하지만, 역할에서 지정된 접근 주체는 추가적인 인증 없이 부여된 접근 권한에 따라 서비스를 사용할 수 있습니다.

역할은 주로 AWS 서비스간 접근 권한을 부여하기 위해 사용합니다. 예를 들어 codebuild의 빌드 결과물로 생성된 아티팩트를 S3에 저장해야 하는 경우 S3에 대한 저장 권한이 codebuild에 필요합니다. 다음은 codebuild에서 S3에 대한 write 권한을 부여하는 역할 생성 예시입니다.

접근 주체 설정

정책 설정

위 예시에서 s3_read_write는 미리 생성해 놓은 S3에 대한 읽기, 쓰기가 가능한 정책입니다.

역할을 생성한 후 생성된 역할 -> 신뢰 관계 탭에서 확인한 결과입니다.

설정된 접근 주체

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "codebuild.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}

부여된 권한은 s3_read_write 이며, Principal에 정책을 부여받을 주체가 설정됩니다.

728x90
반응형