현재 iam 유저에게는 임의의 역할을 다른 aws 서비스에
전달(위임)하는 권한(역할)이 없는 상태다.
iam 유저가 특정 역할을 bastion 인스턴스에
적용(전달, grant)할 수 있는 권한 역시 부여해야 하는 것이다.
"bastion 인스턴스가 aws의 다른 서비스들을 사용하기 위해
iam 유저를 통한 인증방식을 채택하고 있지 않다."
-> CI/CD
를 위해 현재 GitLab에서 iam 유저를 사용하고 있다.
" Instance profiles
방식을 통해 AWS 리소스들에 대한 접근 방식을 사용하고 있다."
-> 유출되는 위험이 iam 유저보다는 덜하기에 선호되지만, AWS의 EC2서비스나 ECS Task에만 사용할 수 있다는 한계점이 있다.
{
"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
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")
)
}