AWS IAM 소개 & 실습

운영하는은영이·2023년 1월 24일
0

AWS&Terraform

목록 보기
9/11

IAM 이론 & 실습

IAM 이론

IAM이란?

aws 리소스에 대한 액세스를 안전하게 제어할 수 있는 웹서비스
IAM을 사용하여 리소스를 사용하도록 인증 및 권한 부여된 대상을 제어함

IAM 역할

보안에서 Blocking 영역을 담당

보안

  • Blocking : 특정 자원에 대한 접근 혹은 사용을 제어
  • Encrypting : 공개되는 정보에 대해서 식별 불가능한 정보로 암호화
  • Hiding : 정보에 관한 접근을 특정 경로 혹은 명령어로 접근하는 것

IAM 구성요소

  • IAM user : AWS 내에서 생성하는 사용자로 AWS와 상호작용하는 사용자 or 어플리케이션을 의미

  • IAM group : IAM user의 집합, 그룹을 사용함으로써 다수 사용자에 대하여 동일한 권한을 보다 쉽게 관리

  • IAM role : AWS IAM Role은 특정 권한을 가진 IAM 자격증명. Role을 사용함으로써 특정 사용자 or 어플리케이션 or AWS 자원 or 서비스에 접근 권한 위임 가능 . ec2에 IAM Role을 할당해서 그 ec2가 IAM Role의 권한을 사용할 수 있게 함

  • IAM policy : 권한 그 자체. AWS의 접근하는 해당 권한을 정의하는 개체로 AWS IAM 리소스들과 연결해서 사용 가능

IAM Policy 구성요소

  • 예시 코드

  • Effect : "Allow" / "Deny"
    : 기본적으로 IAM 사용자에게는 리소스 및 API 작업을 사용할 권한이 없으므로 모든 요청이 거부됨

  • Action : action은 권한을 부여하거나 거부할 특정 API 작업
    : ex) s3:GetObject ( s3에 저장된 객체들 다운받는 작업 )

  • Resource : 작업의 영향을 받는 리소스. 어떤 리소스에 action을 취할지 정함. ARN(Amazon Resource Name)을 사용하거나 명령문이 모든 리소스에 적용됨을 표시하는 와일드카드(*)을 사용

  • Condition : 선택 사항. 정책이 적용되는 시점을 제어. 다양한 조건을 넣어 권한 부여 가능 ( ex: IP,VPC => 이 ip/VPC 일 때만 허용해라 )

IAM 실습

  • IAM은 리전 종속적인 서비스 X

    IAM User 만들기

    1. provider.tf 생성

    2. iamuser.tf

    3. terraform init -> terraform plan -> terraform apply

    4. aws 콘솔에서 테라폼 코드로 생성한 iam user 확인

    5. iam user 로그인하기 위해 aws 콘솔에서 액세스관리 -> 사용자 -> 보안 자격 증명 -> 콘솔 액세스 활성화 -> 비밀번호 생성

    6. putty에서 로그인 가능

    IAM Group 만들기

  1. devops_group.tf 생성
  2. terraform paln -> terraform apply

생성한 user를 생성한 group에 등록시키기

  1. 그룹 생성한 tf 파일 열어서 리소스 aws_iam_group_membership 만들어주기

    - users에 등록시킬 유저
    - group에 유저들을 어떤 그룹에 등록시킬 그룹이름
  2. aws 콘솔에서 테라폼 코드로 할당한 user가 group에 포함되었는지 확인하기

policy 생성

  1. 현재 권한 X
  2. IAM Group에게 권한 부여
  3. IAM usr에게 권한 부여
  4. user 선택 시 그룹과 user에 부여한 권한 둘다 적용된거 확인 가능
  • 두가지 권한 모두 적용됨
  • 같은 allow가 여러군데에 명시되어있으면 모든걸 합쳐서 or 조건으로 동작함
  • Deny 정책은 가장 우선시함
  • Cross account : aws 계정이 나눠져서 권한이 들어가면 and 조건으로 적용됨

policy 계산하는 방법

https://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/reference_policies_evaluation-logic.html

IAM role 실습

  1. iam_role_hello.tf 파일 생성

    -{} 안에 policy 구조와 코드 들어가있음
  2. aws 콘솔에서 확인
  • 코드로 정의된 내용과 콘솔에서 정의된
  1. iam_role_hello.tf 파일에 aws_iam_role_policy 리소스와 aws_iam_instance_profile 리소스에 대한 코드 추가
resource "aws_iam_role_policy" "hello_s3" {
  name   = "hello-s3-download"
  role   = aws_iam_role.hello.id
  # 어떠한 iam role과 연결할지 명시해주는 코드 !! 중요 !!
  policy = <<EOF
{
  "Statement": [
    {
      "Sid": "AllowAppArtifactsReadAccess",
      "Action": [
        "s3:GetObject"
      ],
      "Resource": [
        "*"
        # 모든 리소스에 대해서
      ],
      "Effect": "Allow"
      # 허용
    }
  ]
}
EOF

}

resource "aws_iam_instance_profile" "hello" {
  name = "hello-profile"
  role = aws_iam_role.hello.name
}
  1. terraform plan -> terraform apply
  • aws_iam_instance_profile
    : 테라폼으로 ec2에 iam 롤을 할당해주려면 aws_iam_instance_profile이 필요함.
    ( 콘솔에서 할 때는 자동으로 되서 따로 해줄 필요 없음 )
    : aws_iam_instance_profile은 IAM 역할을 위한 컨테이너로서 인스턴스 시작 시 EC2 인스턴스에 역할 정보를 전달하는 데 사용됨
    : 만약 AWS Management 콘솔을 사용하여 Amazon EC2 역할을 생성하는 경우, 콘솔이 자동으로 인스턴스 프로파일을 생성하여 해당 역할과 동일한 이름을 부여해야함

IAM policy 실습

  • iam policy : aws에 해당하는 권한을 가지는 실제 개체

  • AWS Managed policy: AWS에서 먼저 생성해놓은 Policy set. 사용자가 권한(Permission)을 변경할 수 없음.

  • Customer Managed policy: User 가 직접 생성하는 Policy 로 권한을 직접 상세하게 만들어 관리할 수 있음

  • user policy 생성

  1. doyoung_kim.tf 파일에 코드 추가 해주기
  • super-admin (예시) 정책 추가

  • 어떤 유저에 정책을 할당할지 정하기 위해 user 이름 명시

    resource "aws_iam_user_policy" "art_devops_black" {
      name  = "super-admin"
      user  = aws_iam_user.doyoung_kim.name
    
      policy = <<EOF
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "*"
                ],
                "Resource": [
                    "*"
                ]
            }
        ]
    }
    EOF
    }
    
    1. terraform plan
  1. terraform apply -> 콘솔에서 확인 !

  • access키 있어서 aws s3 ls 명령어 가능

.aws/credentail에 있는 내용을 지우면 aws s3 ls 명령어에 대한 권한이 없어서 명령어 사용 불가능

  • aws 콘솔에서 특정 권한을 해당 인스턴스에 부여하면 다시 가능 !
profile
ผ(•̀_•́ผ) (ง •_•)ง

0개의 댓글