2016-11-06 2 views
1

J'essaye de créer un pair de VPC entre les comptes et l'acceptant automatiquement mais il échoue avec l'erreur d'autorisations.Pourquoi une erreur d'autorisation s'affiche-t-elle lors de la tentative d'auto-acceptation de l'homologation vpc dans Terraform?

Voici les fournisseurs dans le main.tf

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

data "aws_caller_identity" "current" { } 

Voici le vpc_peer Module:

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}" 
     } 
} 

est ici l'exécution du module dans le 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" 
} 

Maintenant, l'utilisateur IAM que j'utilise du fournisseur "sandbox" dispose des autorisations pour le peering VPC dans le VPC qui se trouve dans le compte de gestion.

J'utilisé la procédure suivante à partir AWS: http://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_cross-account-with-roles.html

Malheureusement je garde à défaut avec l'erreur suivante:

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 

Toutes les idées?

Répondre

0

L'argument auto_accept dans Terraform ne peut être utilisé que sur des connexions VPC dans le même compte. De l'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.

Vous aurez juste besoin de faire la connexion de peering sur ce côté dans terraform sans auto_accept, puis accepter manuellement ou par programmation dans le compte cible. Certaines options programmatiques:

Le SDK AWS dans votre langue de choix devrait avoir une méthode de mise en correspondance pour cela, aussi bien.

+0

Merci Anthony, j'ai trouvé un moyen de contourner cela. En exécutant local_exec et la commande aws cli pour accepter l'homologue sur le compte distant. –

+0

Super! Je suis content que vous ayez résolu votre problème. –

1

J'ai réussi à exécuter un local_exec qui accepte le pair.

Voici un exemple:

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 peering se produira sur la même région avec le même compte ou différents accout, dans les deux côtés de la VPC peering doivent être acceptées afin d'accéder d'un vpc à un autre vpc.