bastion instance profile 생성하기

hyuckhoon.ko·2021년 1월 6일
0

What I learned in first year

목록 보기
44/146

현재 iam 유저에게는 임의의 역할을 다른 aws 서비스에
전달(위임)하는 권한(역할)이 없는 상태다.

iam 유저가 특정 역할을 bastion 인스턴스에
적용(전달, grant)할 수 있는 권한 역시 부여해야 하는 것이다.

그렇다면 왜 기존 iam 유저의 역할을 update하지 않고,

인스턴스에 권한을 attach 하는 것일까?


"bastion 인스턴스가 aws의 다른 서비스들을 사용하기 위해
iam 유저를 통한 인증방식을 채택하고 있지 않다."
-> CI/CD를 위해 현재 GitLab에서 iam 유저를 사용하고 있다.



" Instance profiles 방식을 통해 AWS 리소스들에 대한 접근 방식을 사용하고 있다."
-> 유출되는 위험이 iam 유저보다는 덜하기에 선호되지만, AWS의 EC2서비스나 ECS Task에만 사용할 수 있다는 한계점이 있다.




1. instance-profile-policy.json

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

https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html#create-iam-role



2. bation.tf 파일 수정

data "aws_ami" "amazon_linux" {
  most_recent = true
  filter {
    name   = "name"
    values = ["amzn2-ami-hvm-2.0.*-x86_64-gp2"]
  }
  owners = ["amazon"]
}

resource "aws_iam_role" "bastion" {
  name               = "${local.prefix}-bastion"
  assume_role_policy = file("./templates/bastion/instance-profile-policy.json")

  tags = local.common_tags
}

resource "aws_iam_role_policy_attachment" "bastion_attach_policy" {
  role       = aws_iam_role.bastion.name
  policy_arn = "arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryReadOnly"
}

resource "aws_iam_instance_profile" "bastion" {
  name = "${local.prefix}-bastion-instance-profile"
  role = aws_iam_role.bastion.name
}

resource "aws_instance" "bastion" {
  ami                  = data.aws_ami.amazon_linux.id
  user_data            = file("./templates/bastion/user-data.sh")
  instance_type        = "t2.micro"
  iam_instance_profile = aws_iam_instance_profile.bastion.name

  tags = merge(
    local.common_tags,
    map("Name", "${local.prefix}-bastion")
  )
}

0개의 댓글