Terraform-Azure-ipgroupsを使用したfirewall_netwrok_rules_collectionループ

WatchJuju

まず、AzureでTerraformを使用しています

を使用してAzureファイアウォールをデプロイしようとしていazurerm_firewall_network_rule_collectionます。ループを実行して、多くのルールのループを含む複数のルールコレクションをデプロイできるようにしたい。これらのルールでは、いくつかの送信元/宛先アドレスを呼び出し、必要に応じていくつかのipgroupを呼び出します。

今日、私のコードを使用して、さまざまなルールを含むいくつかのルールコレクションをデプロイすることができます。残念ながら、私のコードはIPアドレスまたはcidrでのみ機能し、いくつかのipgroupを呼び出せるようにしたいです(terraformでは許可されています)。

これがルールコレクションのmain.tfコードです

resource "azurerm_firewall_network_rule_collection" "hub_fw_rules_allow" {
    count               = length(var.network_rules)
    azure_firewall_name = join(" " , module.Create-AzureRmFirewall.fw_name)
    resource_group_name = module.Get-AzureRmResourceGroup-hub.rg_name
    name                = var.network_rule_names[count.index]
    priority            = element(var.network_rule_priorities, count.index)
    action              = element(var.network_rule_actions, count.index)
    dynamic "rule" {
        for_each = var.network_rules[count.index]
            content {
                name                  = rule.value.name
                description           = lookup(rule.value, "description", null)
                source_addresses      = lookup(rule.value, "source_addresses", null)
                source_ip_groups      = lookup(rule.value, "source_ip_groups" , null)
                destination_addresses = lookup(rule.value, "destination_addresses", null)
                destination_ip_groups = lookup(rule.value, "destination_ip_groups", null)
                destination_ports     = lookup(rule.value, "destination_ports", null)
                protocols             = lookup(rule.value, "protocols", null)
            }
    }
}

これは私のルールのtfvarsファイルです(値は私のテスト用にランダムに設定されています)

network_rule_names      = ["network_rule_1", "network_rule_2"]
network_rule_priorities = [101 , 102]
network_rule_actions    = ["Allow", "Deny"]
network_rules = [ 
    [   
        {    
            name                  = "network_rule_1_rule_1"
            source_addresses      = ["10.1.0.0/16"]
            destination_addresses = ["10.8.8.8", "8.10.4.4"]
            destination_ports     = [11]
            protocols             = ["TCP", "UDP"]
        },  
        {         
            name                  = "network_rule_1_rule_2"
            source_addresses      = ["10.1.0.0/16"]
            destination_addresses = ["10.8.8.8", "8.10.4.4"]
            destination_ports     = [12]
            protocols             = ["TCP", "UDP"]
        }  
    ],

    [   
        {      
            name                  = "network_rule_2_rule_1"
            source_addresses      = ["10.1.0.0/16"]
            destination_addresses = ["10.8.8.8", "8.10.4.4"]
            destination_ports     = [21]
            protocols             = ["TCP",]
        },  
        {          
            name                  = "network_rule_2_rule_2"
            source_addresses      = ["10.1.0.0/16"]
            destination_addresses = ["10.8.8.8", "8.10.4.4"]   
            destination_ports     = [22]
            protocols             = ["TCP", "UDP"]
        }  
    ]
]

そして私の変数ファイルは次のようになります:

variable "network_rules"{
    type = list#(any)
}
variable "fw_name"{}
variable "hub_fw_rules_allow_name"{}
variable "priority"{}
variable "network_rule_names" {
    type        = list(string)
    default     = [""]
}
variable "network_rule_priorities" {
    type        = list(number)
    default     = [101]
}
variable "network_rule_actions" {
    type        = list(string)
    default     = ["Deny"]
}

したがって、このコードを使用すると、すべてが機能し、terraformはそれぞれ2つのルールを含む2つのルールコレクションをデプロイし、新しい「{}」を開くだけで新しいルールをすばやく作成できます。(これを改善するためのアイデアがあれば、感謝します)

だから問題は何ですか?

いくつかのルールにいくつかのIPグループを使用したいのですが、どちらのIPグループまたはどちらのIPも使用できるようにしたいのです。そのためsource_ip_groups = lookup(rule.value, "source_ip_groups", null)、メインファイルに次の行があります。

ルールのtfvarsファイルでこれを実行できるようにしたい:

{          
name                  = "network_rule_2_rule_ipgroup"
source_ip_groups      = ["/subscriptions/xx-xx-xx/resourceGroups/rgp-xx-xxx/providers/Microsoft.Network/ipGroups/ipgr-name-xx"]
destination_ip_groups = ["/subscriptions/xx-xx-xx/resourceGroups/rgp-xx-xxx/providers/Microsoft.Network/ipGroups/other-ipgr-name-xx"]   
destination_ports     = [22]
protocols             = ["TCP", "UDP"]
}   

これを行うと、tfvarsファイルのすべてのnetwork_rulesブロックで次のエラーが発生しました。指定された値は変数「network_rules」に対して無効です。すべてのリスト要素は同じタイプである必要があります。

そこで何ができるかわかりません。要素関数を使用して、同じエラーでipグループIDを呼び出す方法を変更しようとしました...

引用符または「[]」も削除して、句読点を「再生」しようとしました...

作成するルールがたくさんあるので、ループを維持したいと思います。

ルールのIDを呼び出す方法についてアイデアがあれば、それは素晴らしいことです。

みんなありがとう!

ナンシー・シオン

直接的な方法はsame type、変数の要素を定義することです"network_rules"

network_rules = [ 
    [   
        {    
            name                  = "network_rule_1_rule_1"
            source_addresses      = ["10.1.0.0/16"]
            destination_addresses = ["10.8.8.8", "8.10.4.4"]
            destination_ports     = [11]
            protocols             = ["TCP", "UDP"]
            source_ip_groups      = []
            destination_ip_groups = []
        },  
        {         
            name                  = "network_rule_1_rule_2"
            source_addresses      = ["10.1.0.0/16"]
            destination_addresses = ["10.8.8.8", "8.10.4.4"]
            destination_ports     = [12]
            protocols             = ["TCP", "UDP"]
            source_ip_groups      = []
            destination_ip_groups = []
        }
    ],

    [   
        {      
            name                  = "network_rule_2_rule_1"
            source_addresses      = ["10.1.0.0/16"]
            destination_addresses = ["10.8.8.8", "8.10.4.4"]
            destination_ports     = [21]
            protocols             = ["TCP",]
            source_ip_groups      = []
            destination_ip_groups = []
        },  
        {          
            name                  = "network_rule_2_rule_2"
            source_addresses      = ["10.1.0.0/16"]
            destination_addresses = ["10.8.8.8", "8.10.4.4"]   
            destination_ports     = [22]
            protocols             = ["TCP", "UDP"]
            source_ip_groups      = []
            destination_ip_groups = []
        },
        {          
            name                  = "network_rule_2_rule_ipgroup"        
            source_addresses      = []
            destination_addresses = []   
            destination_ports     = [22]
            protocols             = ["TCP", "UDP"]
            source_ip_groups      = ["/subscriptions/xxx/resourceGroups/xxxRG/providers/Microsoft.Network/ipGroups/xxx"]
            destination_ip_groups = ["/subscriptions/xxx/resourceGroups/xxxRG/providers/Microsoft.Network/ipGroups/ipgxxx"]
        }   
    ]
]

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してくださいdebugcn@gmail.com

編集
0

コメントを追加

0

関連記事

分類Dev

Terraform Azure VMSSHキー

分類Dev

Add azure SQL user with terraform

分類Dev

Terraform Azure VM SSH Key

分類Dev

Terraformを使用したAzure VMへのSSH接続

分類Dev

Error: spawn terraform ENOENT during Azure Pipeline Terraform

分類Dev

AzureプライベートエンドポイントとTerraform

分類Dev

Azureディスク暗号化-キーボールトを使用したTerraform経由-VmExtensionProvisioningError

分類Dev

Terraformを使用してAzureリソースのアラートを作成する方法

分類Dev

Terraform Azure AppServiceリソースでのCORSの構成

分類Dev

odd errors on terraform / azure "Missing required argument"

分類Dev

Terraform.io を使用して Azure に Ubuntu Server リソースを作成する

分類Dev

Azureのterraform-プライベート接続でkeyvaultを作成します

分類Dev

Azure:Terraformを使用したサービスプリンシパルユーザーのベストプラクティス

分類Dev

Azure:Terraformを使用したサービスプリンシパルユーザーのベストプラクティス

分類Dev

Azure DevOps + TerraformでAzureADアプリケーションを作成できない

分類Dev

AzureリソースのTerraform環境変数を正しく設定する

分類Dev

Terraform Azure KeyVaultSetSecret-禁止されたアクセスが拒否されました

分類Dev

Azure での Terraform プロビジョニング プライベート VM

分類Dev

terraformで設定されたAzureスケーリングに問題がある

分類Dev

terraformからpublicipを介してAzureマシンに接続します

分類Dev

Azure DevOps / VSTSのTerraformファイルで変数を参照する方法

分類Dev

Azure Microsoft MonitoringAgentがTerraformでのプロビジョニングに失敗する

分類Dev

Azureがサポートするterraformアカウントの構築エラー

分類Dev

Terraform-Azureのタグフォーマットに関する問題

分類Dev

Terraformで作成されていないAzure関数「ホストキー」

分類Dev

terraform / azureの奇妙なエラー「必要な引数がありません」

分類Dev

Terraformを使用したAzureコンテナレジストリのアクセス許可

分類Dev

Terraformを使用してAzureに既存のリソースをインポートする

分類Dev

No available provider "azure" plugins are compatible with this Terraform version. Azurerm -1.28 Terraform -

Related 関連記事

  1. 1

    Terraform Azure VMSSHキー

  2. 2

    Add azure SQL user with terraform

  3. 3

    Terraform Azure VM SSH Key

  4. 4

    Terraformを使用したAzure VMへのSSH接続

  5. 5

    Error: spawn terraform ENOENT during Azure Pipeline Terraform

  6. 6

    AzureプライベートエンドポイントとTerraform

  7. 7

    Azureディスク暗号化-キーボールトを使用したTerraform経由-VmExtensionProvisioningError

  8. 8

    Terraformを使用してAzureリソースのアラートを作成する方法

  9. 9

    Terraform Azure AppServiceリソースでのCORSの構成

  10. 10

    odd errors on terraform / azure "Missing required argument"

  11. 11

    Terraform.io を使用して Azure に Ubuntu Server リソースを作成する

  12. 12

    Azureのterraform-プライベート接続でkeyvaultを作成します

  13. 13

    Azure:Terraformを使用したサービスプリンシパルユーザーのベストプラクティス

  14. 14

    Azure:Terraformを使用したサービスプリンシパルユーザーのベストプラクティス

  15. 15

    Azure DevOps + TerraformでAzureADアプリケーションを作成できない

  16. 16

    AzureリソースのTerraform環境変数を正しく設定する

  17. 17

    Terraform Azure KeyVaultSetSecret-禁止されたアクセスが拒否されました

  18. 18

    Azure での Terraform プロビジョニング プライベート VM

  19. 19

    terraformで設定されたAzureスケーリングに問題がある

  20. 20

    terraformからpublicipを介してAzureマシンに接続します

  21. 21

    Azure DevOps / VSTSのTerraformファイルで変数を参照する方法

  22. 22

    Azure Microsoft MonitoringAgentがTerraformでのプロビジョニングに失敗する

  23. 23

    Azureがサポートするterraformアカウントの構築エラー

  24. 24

    Terraform-Azureのタグフォーマットに関する問題

  25. 25

    Terraformで作成されていないAzure関数「ホストキー」

  26. 26

    terraform / azureの奇妙なエラー「必要な引数がありません」

  27. 27

    Terraformを使用したAzureコンテナレジストリのアクセス許可

  28. 28

    Terraformを使用してAzureに既存のリソースをインポートする

  29. 29

    No available provider "azure" plugins are compatible with this Terraform version. Azurerm -1.28 Terraform -

ホットタグ

アーカイブ