Menyusun blok aturan bernama di AWS CloudFormation Guard - AWS CloudFormation Guard

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Menyusun blok aturan bernama di AWS CloudFormation Guard

Saat menulis blok aturan bernama menggunakan AWS CloudFormation Guard, Anda dapat menggunakan dua gaya komposisi berikut:

  • Ketergantungan bersyarat

  • Ketergantungan korelasional

Menggunakan salah satu dari gaya komposisi ketergantungan ini membantu meningkatkan kegunaan kembali dan mengurangi verbositas dan pengulangan dalam blok aturan bernama.

Prasyarat

Pelajari tentang blok aturan bernama dalam aturan Menulis.

Komposisi ketergantungan bersyarat

Dalam gaya komposisi ini, evaluasi when blok atau blok aturan bernama memiliki ketergantungan bersyarat pada hasil evaluasi dari satu atau lebih blok atau klausa aturan bernama lainnya. Contoh berikut file Guard rules berisi blok named-rule yang menunjukkan dependensi kondisional.

# Named-rule block, rule_name_A rule rule_name_A { Guard_rule_1 Guard_rule_2 ... } # Example-1, Named-rule block, rule_name_B, takes a conditional dependency on rule_name_A rule rule_name_B when rule_name_A { Guard_rule_3 Guard_rule_4 ... } # Example-2, when block takes a conditional dependency on rule_name_A when rule_name_A { Guard_rule_3 Guard_rule_4 ... } # Example-3, Named-rule block, rule_name_C, takes a conditional dependency on rule_name_A ^ rule_name_B rule rule_name_C when rule_name_A rule_name_B { Guard_rule_3 Guard_rule_4 ... } # Example-4, Named-rule block, rule_name_D, takes a conditional dependency on (rule_name_A v clause_A) ^ clause_B ^ rule_name_B rule rule_name_D when rule_name_A OR clause_A clause_B rule_name_B { Guard_rule_3 Guard_rule_4 ... }

Dalam contoh file aturan sebelumnya, Example-1 memiliki hasil yang mungkin sebagai berikut:

  • Jika rule_name_A dievaluasiPASS, aturan Penjaga yang dienkapsulasi oleh dievaluasi. rule_name_B

  • Jika rule_name_A dievaluasiFAIL, aturan Penjaga yang dienkapsulasi oleh rule_name_B tidak dievaluasi. rule_name_Bmengevaluasi untukSKIP.

  • Jika rule_name_A dievaluasiSKIP, aturan Penjaga yang dienkapsulasi oleh rule_name_B tidak dievaluasi. rule_name_Bmengevaluasi untukSKIP.

    catatan

    Kasus ini terjadi jika rule_name_A secara kondisional tergantung pada aturan yang mengevaluasi FAIL dan menghasilkan rule_name_A evaluasi. SKIP

Berikut ini adalah contoh item konfigurasi database manajemen konfigurasi (CMDB) dari AWS Config item untuk informasi grup keamanan ingress dan egress. Contoh ini menunjukkan komposisi ketergantungan bersyarat.

rule check_resource_type_and_parameter { resourceType == /AWS::EC2::SecurityGroup/ InputParameters.TcpBlockedPorts NOT EMPTY } rule check_parameter_validity when check_resource_type_and_parameter { InputParameters.TcpBlockedPorts[*] { this in r[0,65535] } } rule check_ip_procotol_and_port_range_validity when check_parameter_validity { let ports = InputParameters.TcpBlockedPorts[*] # # select all ipPermission instances that can be reached by ANY IP address # IPv4 or IPv6 and not UDP # let configuration = configuration.ipPermissions[ some ipv4Ranges[*].cidrIp == "0.0.0.0/0" or some ipv6Ranges[*].cidrIpv6 == "::/0" ipProtocol != 'udp' ] when %configuration !empty { %configuration { ipProtocol != '-1' when fromPort exists toPort exists { let ip_perm_block = this %ports { this < %ip_perm_block.fromPort or this > %ip_perm_block.toPort } } } } }

Dalam contoh sebelumnya, tergantung secara check_parameter_validity kondisional check_resource_type_and_parameter dan bergantung pada check_ip_procotol_and_port_range_validity kondisional. check_parameter_validity Berikut ini adalah item konfigurasi database manajemen konfigurasi (CMDB) yang sesuai dengan aturan sebelumnya.

--- version: '1.3' resourceType: 'AWS::EC2::SecurityGroup' resourceId: sg-12345678abcdefghi configuration: description: Delete-me-after-testing groupName: good-sg-test-delete-me ipPermissions: - fromPort: 172 ipProtocol: tcp ipv6Ranges: [] prefixListIds: [] toPort: 172 userIdGroupPairs: [] ipv4Ranges: - cidrIp: 0.0.0.0/0 ipRanges: - 0.0.0.0/0 - fromPort: 89 ipProtocol: tcp ipv6Ranges: - cidrIpv6: '::/0' prefixListIds: [] toPort: 89 userIdGroupPairs: [] ipv4Ranges: - cidrIp: 0.0.0.0/0 ipRanges: - 0.0.0.0/0 ipPermissionsEgress: - ipProtocol: '-1' ipv6Ranges: [] prefixListIds: [] userIdGroupPairs: [] ipv4Ranges: - cidrIp: 0.0.0.0/0 ipRanges: - 0.0.0.0/0 tags: - key: Name value: good-sg-delete-me vpcId: vpc-0123abcd InputParameters: TcpBlockedPorts: - 3389 - 20 - 110 - 142 - 1434 - 5500 supplementaryConfiguration: {} resourceTransitionStatus: None

Komposisi ketergantungan korelasional

Dalam gaya komposisi ini, evaluasi when blok atau blok aturan bernama memiliki ketergantungan korelasional pada hasil evaluasi dari satu atau lebih aturan Penjaga lainnya. Ketergantungan korelasional dapat dicapai sebagai berikut.

# Named-rule block, rule_name_A, takes a correlational dependency on all of the Guard rules encapsulated by the named-rule block rule rule_name_A { Guard_rule_1 Guard_rule_2 ... } # when block takes a correlational dependency on all of the Guard rules encapsulated by the when block when condition { Guard_rule_1 Guard_rule_2 ... }

Untuk membantu Anda memahami komposisi ketergantungan korelasional, tinjau contoh berikut dari file aturan Guard.

# # Allowed valid protocols for AWS::ElasticLoadBalancingV2::Listener resources # let allowed_protocols = [ "HTTPS", "TLS" ] let elbs = Resources.*[ Type == 'AWS::ElasticLoadBalancingV2::Listener' ] # # If there are AWS::ElasticLoadBalancingV2::Listener resources present, ensure that they have protocols specified from the # list of allowed protocols and that the Certificates property is not empty # rule ensure_all_elbs_are_secure when %elbs !empty { %elbs.Properties { Protocol in %allowed_protocols Certificates !empty } } # # In addition to secure settings, ensure that AWS::ElasticLoadBalancingV2::Listener resources are private # rule ensure_elbs_are_internal_and_secure when %elbs !empty { ensure_all_elbs_are_secure %elbs.Properties.Scheme == 'internal' }

Dalam file aturan sebelumnya, ensure_elbs_are_internal_and_secure memiliki ketergantungan korelasional pada. ensure_all_elbs_are_secure Berikut ini adalah contoh CloudFormation template yang sesuai dengan aturan sebelumnya.

Resources: ServiceLBPublicListener46709EAA: Type: 'AWS::ElasticLoadBalancingV2::Listener' Properties: Scheme: internal Protocol: HTTPS Certificates: - CertificateArn: 'arn:aws:acm...' ServiceLBPublicListener4670GGG: Type: 'AWS::ElasticLoadBalancingV2::Listener' Properties: Scheme: internal Protocol: HTTPS Certificates: - CertificateArn: 'arn:aws:acm...'