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 olehrule_name_B
tidak dievaluasi.rule_name_B
mengevaluasi untukSKIP
. -
Jika
rule_name_A
dievaluasiSKIP
, aturan Penjaga yang dienkapsulasi olehrule_name_B
tidak dievaluasi.rule_name_B
mengevaluasi untukSKIP
.catatan
Kasus ini terjadi jika
rule_name_A
secara kondisional tergantung pada aturan yang mengevaluasiFAIL
dan menghasilkanrule_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 thewhen
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 areAWS::ElasticLoadBalancingV2::Listener
resources present, ensure that they have protocols specified from the # list of allowed protocols and that theCertificates
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 thatAWS::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...'