假设我想在我的dev帐户中启动一个EC2实例,但可能是我不小心运行了错误的命令,并创建了一个prod帐户而不是dev帐户的临时凭证,然后当我应用Terraform时,将启动EC2在产品帐户上?
如何避免这种情况发生?我可以在此文件夹中创建一个带有dev帐户ID的文本文件,然后让Terraform在启动EC2之前(也许在null_resource中)将我的临时凭证的帐户ID与该文件中的帐户ID进行比较吗?我不知道如何实现。
答案 0 :(得分:5)
AWS提供程序允许您指定allowed_account_ids
或forbidden_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存储桶中。确保存储桶的名称是唯一的(无论如何它们必须对于一个区域是唯一的)。如果您使用错误的帐户运行它,则它将出错,因为找不到存储桶。