Почему я получаю сообщение об ошибке прав доступа при попытке auto_accept пиринга vpc в Terraform?

Я пытаюсь создать одноранговую сеть VPC между учетными записями и автоматически принять ее, но это не удается с ошибкой разрешений.

Вот поставщики в файле main.tf.

provider "aws" {
  region                   = "${var.region}"
  shared_credentials_file  = "/Users/<username>/.aws/credentials"
  profile                  = "sandbox"
}

data "aws_caller_identity" "current" { }

Вот модуль vpc_peer:

resource "aws_vpc_peering_connection" "peer" {
      peer_owner_id              = "${var.peer_owner_id}"
      peer_vpc_id                = "${var.peer_vpc_id}"
      vpc_id                     = "${var.vpc_id}"
      auto_accept                = "${var.auto_accept}"

      accepter {
        allow_remote_vpc_dns_resolution = true
      }

      requester {
        allow_remote_vpc_dns_resolution = true
      }

      tags {
        Name = "VPC Peering between ${var.peer_vpc_id} and ${var.vpc_id}"
      }
}

Вот выполнение модуля в maint.ft

module "peering" {
  source = "../modules/vpc_peer"

  region        = "${var.region}"
  peer_owner_id = "<management account number>"
  peer_vpc_id   = "<vpc-********>"
  vpc_id        = "${module.network.vpc_id}"
  auto_accept   = "true"
}

Теперь пользователь IAM, которого я использую от поставщика «песочницы», имеет разрешения на пиринг VPC в VPC, который находится в учетной записи управления.

Я использовал следующую процедуру из AWS: http://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_cross-account-with-roles.html

К сожалению, я продолжаю терпеть неудачу со следующей ошибкой:

1 error(s) occurred:

* aws_vpc_peering_connection.peer: Unable to accept VPC Peering Connection: OperationNotPermitted: User 651267440910 cannot accept peering pcx-f9c55290
    status code: 400, request id: cfbe1163-241e-413b-a8de-d2bca19726e5

Любые идеи?


person Nathaniel Assis    schedule 06.11.2016    source источник


Ответы (3)


Мне удалось запустить local_exec, который принимает одноранговый узел.

Вот пример:

resource "aws_vpc_peering_connection" "peer" {

  peer_owner_id              = "${var.peer_owner_id}"
  peer_vpc_id                = "${var.peer_vpc_id}"
  vpc_id                     = "${var.vpc_id}"

  provisioner "local-exec" {
    command = "aws ec2 accept-vpc-peering-connection --vpc-peering-connection-id=${aws_vpc_peering_connection.peer.id} --region=${var.region} --profile=${var.profile}"

  }

  tags {
    Name = "VPC Peering between ${var.peer_vpc_id} and ${var.vpc_id}"
  }
}
person Nathaniel Assis    schedule 07.11.2016

Аргумент auto_acceptв Terraform можно использовать только в VPC в той же учетной записи. Из документации:

auto_accept — (необязательно) принять пиринг (оба VPC должны находиться в одной учетной записи AWS).

...

Если оба VPC не находятся в одной учетной записи AWS, не включайте атрибут auto_accept. Вам все равно придется принимать запрос на пиринговое подключение VPC вручную с помощью Консоли управления AWS, интерфейса командной строки AWS, через SDK и т. д.

Таким образом, вам просто нужно установить пиринговое соединение на этой стороне в terraform без auto_accept, а затем вручную или программно принять его в целевой учетной записи. Некоторые программные опции:

В AWS SDK на выбранном вами языке также должен быть соответствующий метод.

person Anthony Neace    schedule 06.11.2016
comment
Спасибо Энтони, я нашел способ обойти это. запустив команду local_exec и aws cli, чтобы принять одноранговый узел в удаленной учетной записи. - person Nathaniel Assis; 07.11.2016

Пиринг VPC будет происходить в одном регионе с одной и той же учетной записью или другой учетной записью. В обеих сторонах пиринг VPC должен быть принят для доступа из одного vpc к другому vpc.

person shravan    schedule 23.11.2016