Terraform:如何确保我在预期的AWS帐户上运行Terraform

时间:2018-06-23 00:15:37

标签: amazon-web-services terraform

假设我想在我的dev帐户中启动一个EC2实例,但可能是我不小心运行了错误的命令,并创建了一个prod帐户而不是dev帐户的临时凭证,然后当我应用Terraform时,将启动EC2在产品帐户上?

如何避免这种情况发生?我可以在此文件夹中创建一个带有dev帐户ID的文本文件,然后让Terraform在启动EC2之前(也许在null_resource中)将我的临时凭证的帐户ID与该文件中的帐户ID进行比较吗?我不知道如何实现。

2 个答案:

答案 0 :(得分:5)

AWS提供程序允许您指定allowed_account_idsforbidden_account_ids的列表,您可以定义列表以防止在必要时发生这种情况。

因此,您的文件夹结构可能看起来像这样:

<button type="button" class="btn btn-outline-dark rounded-circle main_button"></button>

<script>
    var click = 0

    $('.main_button').on('click',function(){
       updateNb();
    });

    $('.main_button').dblclick(function(){
        updateNb(); 
    });

    $('.main_button').on('click',function() {
        if (click == 4) {
            setTimeout(function() {
             if (click == 4) {
                $('.feedback_g').addClass("bg-success");
            }

            click = 0;


                }, 500);
            };
        });


    function updateNb(){
        if(click > 4){
            click = 0;
        }
        click++;
    }
</script>

您的$ tree -a . ├── dev │   ├── bar-app │   │   ├── dev-eu-west-1.tf -> ../../providers/dev-eu-west-1.tf │   │   └── main.tf │   ├── foo-app │   │   ├── dev-eu-west-1.tf -> ../../providers/dev-eu-west-1.tf │   │   └── main.tf │   └── vpc │   ├── dev-eu-west-1.tf -> ../../providers/dev-eu-west-1.tf │   └── main.tf ├── prod │   ├── bar-app │   │   ├── main.tf │   │   └── prod-eu-west-1.tf -> ../../providers/prod-eu-west-1.tf │   ├── foo-app │   │   ├── main.tf │   │   └── prod-eu-west-1.tf -> ../../providers/prod-eu-west-1.tf │   └── vpc │   ├── main.tf │   └── prod-eu-west-1.tf -> ../../providers/prod-eu-west-1.tf ├── providers │   ├── dev-eu-west-1.tf │   ├── prod-eu-west-1.tf │   └── test-eu-west-1.tf └── test ├── bar-app │   ├── main.tf │   └── test-eu-west-1.tf -> ../../providers/test-eu-west-1.tf ├── foo-app │   ├── main.tf │   └── test-eu-west-1.tf -> ../../providers/test-eu-west-1.tf └── vpc ├── main.tf └── test-eu-west-1.tf -> ../../providers/test-eu-west-1.tf 文件如下所示:

providers/dev-eu-west-1.tf

您的provider "aws" { region = "eu-west-1" allowed_account_ids = [ "1234567890", ] } 文件如下:

providers/test-eu-west-1.tf

这意味着您仅在使用属于provider "aws" { region = "eu-west-1" allowed_account_ids = [ "5678901234", ] } 帐户的凭据时才能对dev/foo-app运行Terraform,并且只能在使用属于1234567890帐户的凭据时针对dev/foo-app运行Terraform 5678901234帐户。

答案 1 :(得分:2)

将您的Terraform状态存储在该帐户的S3存储桶中。确保存储桶的名称是唯一的(无论如何它们必须对于一个区域是唯一的)。如果您使用错误的帐户运行它,则它将出错,因为找不到存储桶。