授予AWS EC2实例对Terraform中的AWS Secretsmanager的访问权限

时间:2020-09-29 13:35:32

标签: amazon-web-services terraform

我对terraform非常陌生,但我正在尝试授予此资源

resource aws_instance "myinstance" {
  ami                    = "${data.aws_ami.awsami.id}"
  instance_type          = "t2.small"
  key_name               = "${aws_key_pair.my_key.key_name}"
  vpc_security_group_ids = ["${module.security.my_sg_id}", "${module.security.my_security_group_id}"]
  subnet_id              = "${element(module.network.public_subnets,1)}"

  tags {
    Name = "My instance"
  }
}

访问机密管理器。该实例需要能够通过ansible脚本读取机密。我找到了有关使用实例配置文件的博客。如何使用实例配置文件角色来授予实例对Secrets Manager的访问权限?

1 个答案:

答案 0 :(得分:0)

使用下面的代码,我得以实现自己的目标。您需要添加ASSUME_ROLE_POLICY_HEREPOLICY_GOES_HERE。重要的是指定iam_instance_profile ="{aws_iam_instance_profile.myinstance_instance_profile.id}"

locals {
 
  env_account = "${terraform.workspace}"
  
  deploy_env_name = "${lookup(var.workspace_deploy_env, local.env_account)}"

}

resource "aws_eip" "myinstanceip" {
  instance = "${aws_instance.myinstance.id}"
  vpc      = true
}

resource aws_instance "myinstance" {
  ami                    = "${data.aws_ami.awsami.id}"
  instance_type          = "t2.small"
  key_name               = "${aws_key_pair.my_key.key_name}"
  vpc_security_group_ids = ["${module.security.my_sg_id}", "${module.security.my_security_group_id}"]
  subnet_id              = "${element(module.network.public_subnets,1)}"
  iam_instance_profile   ="{aws_iam_instance_profile.myinstance_instance_profile.id}"

  tags {
    Name = "My instance"
  }
}

resource aws_route53_record "myinstance_domain_name" {
  zone_id = "${module.tf_aws_route53_zone.zone_id}"
  name    = "myinstance.${module.tf_aws_route53_zone.domain_name}"
  type    = "A"
  ttl     = "300"
  records = ["${aws_eip.myinstanceip.public_ip}"]
}

output myinstance_ip {
  value = "${aws_eip.myinstanceip.public_ip}"
}

resource "aws_iam_instance_profile" "myinstance_instance_profile" {
  name = "myinstance-instance-profile"
  role = "myinstance-role"
}

resource "aws_iam_role" "myinstance_role" {
  name = "myinstance-role"

  assume_role_policy = <<EOF
{
  ASSUME_ROLE_POLICY_HERE
}
EOF
}

resource "aws_iam_policy" "secrets_manager" {

  name        = "secrets-manager-myinstance"
  description = "Read secrets"

  policy = <<POLICY
{
    POLICY_GOES_HERE
}
POLICY
}