Amazon web services 授予aws ec2实例对terraform中的aws secretsmanager的访问权限

Amazon web services 授予aws ec2实例对terraform中的aws secretsmanager的访问权限,amazon-web-services,terraform,Amazon Web Services,Terraform,我对地球形态非常陌生,但我正在尝试授予这个资源 resource aws_instance "myinstance" { ami = "${data.aws_ami.awsami.id}" instance_type = "t2.small" key_name = "${aws_key_pair.my_key.key_name}&q

我对地球形态非常陌生,但我正在尝试授予这个资源

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?

我使用下面的代码实现了我的目标。您需要在此处添加
承担角色\u策略\u
策略\u在此处执行
。重要的一点是指定
iam_instance_profile=“{aws_iam_instance_profile.myinstance_instance_profile.id}”

本地人{
env_account=“${terraform.workspace}”
deploy_env_name=“${lookup(var.workspace_deploy_env,local.env_account)}”
}
资源“aws_eip”“myinstanceip”{
instance=“${aws_instance.myinstance.id}”
vpc=真
}
资源aws_实例“myinstance”{
ami=“${data.aws\u ami.awsami.id}”
实例_type=“t2.小”
key\u name=“${aws\u key\u pair.my\u key.key\u name}”
vpc_security_group_id=[“${module.security.my_sg_id}”,“${module.security.my_security_group_id}”]
subnet_id=“${element(module.network.public_子网,1)}”
iam_instance_profile=“{aws_iam_instance_profile.myinstance_instance_profile.id}”
标签{
Name=“我的实例”
}
}
资源aws_路由53_记录“myinstance_域名”{
zone_id=“${module.tf_aws_route53_zone.zone_id}”
name=“myinstance.${module.tf\u aws\u route53\u zone.domain\u name}”
type=“A”
ttl=“300”
记录=[“${aws_eip.myinstanceip.public_ip}”]
}
输出myinstance_ip{
value=“${aws_eip.myinstanceip.public_ip}”
}
资源“aws\u iam\u实例配置文件”“myinstance\u实例配置文件”{
name=“myinstance实例配置文件”
role=“myinstance角色”
}
资源“aws_iam_角色”“myinstance_角色”{
name=“myinstance角色”

假设角色策略=我可以通过使用下面的代码来实现我的目标。你需要在这里添加
假设角色策略
策略
。重要的一点是指定
iam实例配置文件=“{aws\u iam\u实例配置文件.myinstance\u实例配置文件.id}”

本地人{
env_account=“${terraform.workspace}”
deploy_env_name=“${lookup(var.workspace_deploy_env,local.env_account)}”
}
资源“aws_eip”“myinstanceip”{
instance=“${aws_instance.myinstance.id}”
vpc=真
}
资源aws_实例“myinstance”{
ami=“${data.aws\u ami.awsami.id}”
实例_type=“t2.小”
key\u name=“${aws\u key\u pair.my\u key.key\u name}”
vpc_security_group_id=[“${module.security.my_sg_id}”,“${module.security.my_security_group_id}”]
subnet_id=“${element(module.network.public_子网,1)}”
iam_instance_profile=“{aws_iam_instance_profile.myinstance_instance_profile.id}”
标签{
Name=“我的实例”
}
}
资源aws_路由53_记录“myinstance_域名”{
zone_id=“${module.tf_aws_route53_zone.zone_id}”
name=“myinstance.${module.tf\u aws\u route53\u zone.domain\u name}”
type=“A”
ttl=“300”
记录=[“${aws_eip.myinstanceip.public_ip}”]
}
输出myinstance_ip{
value=“${aws_eip.myinstanceip.public_ip}”
}
资源“aws\u iam\u实例配置文件”“myinstance\u实例配置文件”{
name=“myinstance实例配置文件”
role=“myinstance角色”
}
资源“aws_iam_角色”“myinstance_角色”{
name=“myinstance角色”

AsthMyRoLyPrave=你知道IAM实例概要文件吗?你也在使用TrrFrm 0.11和下面的旧的HCL1语法。假设你使用TrRAFRATE 0.12或以上,你应该考虑使用HCL2语法。如果你有必要使用一个旧版本的TrRAFrm,那么你应该把这个添加到你的问题中,并包含<代码>raform0.11
tag.你能链接实例配置文件文档吗?我对这个领域很陌生,读起来会很有用。然后,要使用Terraform实现,一旦你了解了它们,你可能会想看什么,很酷,我会开始阅读它们。也许我会找到我问题的答案并更新我的帖子。你知道我的IAM吗姿态配置文件?您也使用了来自TrRAFrm 0.11和下面的旧HCL1语法。假设您使用TrRAFRATE 0.12或以上,您应该考虑使用HCL2语法。如果有理由使用旧版本的TrRAFrm,那么您应该将其添加到您的问题中,并包含<代码> TrRAFrime0.11< /Case> TAG。ce概要文件文档?我对这个领域非常陌生。阅读它会很有用。然后,为了使用Terraform实现,一旦你了解了它们是什么,你可能会想看到它们,并且很酷,我将开始阅读它们。也许我会找到我问题的答案并更新我的帖子。
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
}