본문 바로가기
Terraform/AWS and 테라폼: Infrastructure as

[AWS and 테라폼: Infrastructure as Code] AWS IAM 실습

by 개발자 영만 2024. 1. 21.

IAM user 기본 생성


  • IAM User를 생성할 때는 aws_iam_user 리소스를 사용하면되고, 필수적으로 필요한 설정은 name 이다.
provider "aws" {
  region = "us-east-2"
}

resource "aws_iam_user" "ihwoo" {
  name = "ihwoo"
}

위 Terraform 코드를 통해 IAM user 를 생성해주었다고 하더라도, console 을 접속할 수 는 없다. 생성한 user의 password 가 설정되어있지 않기 때문. 비밀번호와 MFA는 직접 console을 통해 설정해야 한다. 혹은 AWS CLI 를 통해서 자동화를 진행할 수 도 있다. 물론 테라폼을 통해 설정을 할 수 도 있으나, aws_iam_user_login_profile 을 사용해야 한다.

 

IAM group 기본 생성


  • IAM User를 생성할 때는 aws_iam_group 리소스를 사용하면되고, 필수적으로 필요한 설정은 name 이다..
provider "aws" {
  region = "us-east-2"
}

resource "aws_iam_group" "cloud_tech_group" {
  name = "cloud_tech"
}

 

생성한 IAM user 를 IAM group 에 등록


  • IAM user를 IAM group 에 등록하는 것도 Terraform 으로 진행할 수 있다. 실제로 AWS IAM user 를 개발자, 데브옵스, 검증 등 조직의 실제 그룹으로 나누고 등록하고 관리해야 한다.
  • Terraform을 통해서 IAM group membership을 생성해보자. IAM User를 등록할 때는 aws_iam_group_membership 리소스를 사용하면 된다.
resource "aws_iam_group_membership" "cloud_tech" {
  name = aws_iam_group.cloud_tech_group.name

  users = [
    aws_iam_user.ihwoo.name
  ]

  group = aws_iam_group.cloud_tech_group.name
}

AWS IAM policy 와 group policy 는 ‘or’ 조건을 따른다고 생각하면 편하다. allow permission은 합집합으로 permission을 검사한.

 

EC2를 위한 IAM role 기본 생성


  • IAM role을 생성할 때는 aws_iam_role 리소스를 사용하면 되고, 필수적으로 필요한 설정은 name 이다. 여기에 aws_iam_role_policy 도 만들어 생성한 aws_iam_role 와 연결하는 작업도 진행해보자.
resource "aws_iam_role" "hello" {
  name               = "hello-iam-role"
  path               = "/"
  assume_role_policy = <<EOF
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Service": "ec2.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
EOF

}

resource "aws_iam_role_policy" "hello_s3" {
  name   = "hello-s3-download"
  role   = aws_iam_role.hello.id
  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
}

aws_iam_instance_profile은 IAM 역할을 위한 컨테이너로서 인스턴스 시작 시 EC2 인스턴스에 역할 정보를 전달하는 데 사용됩니다. 만약 AWS Management 콘솔을 사용하여 Amazon EC2 역할을 생성하는 경우, 콘솔이 자동으로 인스턴스 프로파일을 생성하여 해당 역할과 동일한 이름을 부여합니다.

 

AWS IAM Policy 의 종류


  • AWS의 접근하는 해당 권한을 정의하는 개체로 AWS IAM 리소스들과 연결하여 사용할 수 있다. 즉 AWS IAM policy 는 user 에 할당 할 수 도, group 에 할당 할 수 있다. IAM policy 는 여러 타입으로 나누어져 있다.
  • AWS Managed policy — AWS에서 먼저 생성해놓은 Policy set. 사용자가 권한(Permission)을 변경할 수 없다.
  • Customer Managed policy — User 가 직접 생성하는 Policy 로 권한을 직접 상세하게 만들어 관리할 수 있다.
     

IAM user policy 생성


resource "aws_iam_user" "ihwoo" {
  name = "ihwoo"
}

resource "aws_iam_user_policy" "super_admin" {
  name  = "super-admin"
  user  = aws_iam_user.ihwoo.name

  policy = <<EOF
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "*"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}
EOF
}

resource “aws_iam_user_policy” “super_admin” 을 생성함으로써, gildong.hong 사용자는 해당권한을 가지게 되었습니다. 참고로 해당 iam 권한은 모든 권한을 갖는 권한입니다. 결국 json 형태인 iam policy 를 적절하게 생성하고 부여를 할 수 있어야 합니다.