2016-11-06 18 views
1

Я пытаюсь создать одноранговый узел VPC между учетными записями и автоматически принимать его, но он не работает с ошибкой разрешений.Почему я получаю ошибку разрешений при попытке auto_accept vpc peering в Terraform?

Вот провайдеры в 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 

Есть идеи?

ответ

0

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

auto_accept - (Optional) Accept the peering (both VPCs need to be in the same AWS account).

...

If both VPCs are not in the same AWS account do not enable the auto_accept attribute. You will still have to accept the VPC Peering Connection request manually using the AWS Management Console, AWS CLI, through SDKs, etc.

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

АМС SDK на вашем языке выбора должен иметь соответствующий метод для этого, а также.

+0

Спасибо Anthony., Я нашел способ обойти это. , выполнив команду local_exec и aws cli, чтобы принять одноранговую сеть на удаленную учетную запись. –

+0

Отлично! Рад, что вы решили свою проблему. –

1

Мне удалось запустить 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}" 
    } 
} 
0

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