Posts AWS 개념 정리 (IAM 심화2)
Post
Cancel

AWS 개념 정리 (IAM 심화2)

AWS 정리

인증? 인가?

이전 포스팅에서 AWS IAM을 통한 사용자 관리 방식을 알아보고, 사용자 생성, 그룹 추가를 실습했습니다. 오늘은 사용자, 그룹, 역할, 정책의 관계를 알아보고 정책의 세가지 타입 각각 알아보겠습니다.

AWS 모든 서비스들은 AWS API 기반에 있습니다. 그래서 API를 호출한 대상이 사용자, 애플리케이션, 서비스 등이 될 수 있는데 이들이 정당 호출자인지 인증을 해야 합니다. 그리고 AWS 서비스에 대해 어떤 권한을 가지고 있는지 파악할 필요가 있습니다.

AWS API들은 인증키 (액세스키 + 시크릿 키)로 인증을 수행합니다. 그리고 정책들을 사용하여 적합한 권한이 있는지 확인합니다(인가). 그럼 항상 모든 서비스를 사용할 때 애플리케이션 코드에 인증키를 하드코딩 해야하나 생각할 수도 있지만, IAM 역할을 부여하면 AWS STS가 임시보안인증키를 부여하기 때문에 EC2 내의 애플리케이션이 DynamoDB에 접근하여 작업을 수행할 수 있습니다.

IAM 정책

AWS 서비스의 실질적인 권한을 작성할 수 있는 곳이 정책입니다. 정책은 사용자, 그룹, 역할 모두에게 속할 수 있는 관계를 가지고 있습니다. 역할은 사용자(사람, 서비스, 애플리케이션)에 속하고 사용자들은 그룹에 속할 수 있습니다.

정책은 관리의 측면에서 관리형정책(Managed Policy, 재사용성)와 인라인정책(Inline Policy, 일회성)으로 나눌 수 있었지만, 보안적인 측면에선 다음 세가지 타입으로 나뉩니다. 관리형정책, 인라인정책과 더불어 다음 세가지 타입에 대해서는 무조건 암기보다 앞으로 다양한 여러분의 서비스를 구축하면서 많은 정책을 보게 될텐데 그에 기반이 되었으면 좋겠습니다.

  1. IAM 사용자 기반 정책

    사용자, 그룹, 역할에 부여합니다. 이는 사용자가 무엇을 할 수 있는지 설명합니다.

  2. AWS 자원-기반 정책

    AWS 자원에 직접 부여할 수 있습니다. 누가 이 자원에 대해 접근가능한지 설명합니다. 아래 정책은 Dave 유저가 awsexamplebucket1 버킷의 모든 오브젝트에 대해 다운로드, 위치, 리스팅 권한을 부여합니다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    
    {
        "Version": "2012-10-17",
        "Id": "ExamplePolicy01",
        "Statement": [
            {
                "Sid": "ExampleStatement01",
                "Effect": "Allow",
                "Principal": {
                    "AWS": "arn:aws:iam::123456789012:user/Dave"
                },
                "Action": [
                    "s3:GetObject",
                    "s3:GetBucketLocation",
                    "s3:ListBucket"
                ],
                "Resource": [
                    "arn:aws:s3:::awsexamplebucket1/*",
                    "arn:aws:s3:::awsexamplebucket1"
                ]
            }
        ]
    }
    
  3. 신뢰기반정책

    누가 IAM 역할을 맡을 수 있는지 설명합니다. 보통 람다함수를 생성할 때 기본적으로 CloudWatch에 로그를 작성하는 역할이 자동생성됩니다. 해당 역할에는 CloudWatch 로그 작성 정책(사용자 기반 정책)이 부여되고, 추가적으로 이 역할은 람다함수와 신뢰관계(신뢰 기반 정책)가 형성됩니다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": "logs:CreateLogGroup",
                "Resource": "arn:aws:logs:us-east-1:447914318995:*"
            },
            {
                "Effect": "Allow",
                "Action": [
                    "logs:CreateLogStream",
                    "logs:PutLogEvents"
                ],
                "Resource": [
                    "arn:aws:logs:us-east-1:447914318995:log-group:/aws/lambda/abcse:*"
                ]
            }
        ]
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "Service": "lambda.amazonaws.com"
          },
          "Action": "sts:AssumeRole"
        }
      ]
    }
    

정리

오늘은 AWS 서비스가 AWS API 기반이고 이를 호출하기 위해선 정당한 사용자(인증), 적절한 권한(인가)를 확인하는 절차가 있고 일반적으론 정책들이 포함된 역할로 인해 AWS CLI 및 AWS SDK가 자동적으로 AWS STS을 활용해 임시인증을 수행한다는 사실을 살펴봤습니다. 또한, 사용자 기반, 자원 기반, 신뢰 기반 정책의 JSON 문서들을 살펴보고 각자 어떤 의미를 표현하는지 알아봤습니다. 다음 포스팅엔 정책의 Effect, Resource, Action 세 가지 요소와 정책 변수의 내용을 알아보겠습니다.

This post is licensed under CC BY 4.0 by the author.

AWS 개념 정리 (IAM 심화1)

Vue.js 특징 살펴보기 Javascript와 비교하며

Comments powered by Disqus.