我正在使用 YAML 在 AWS 中构建一个小型 CloudFormation 版本。目前,我已经创建了一个 VPC 和一个子网。我尝试的第一个过程是在创建 VPC 时修改创建的 NACL 上的入站和出站规则。这就是我遇到问题的地方。以下是正在使用的 YAML 模板:
Resources:
InboundRule:
Type: 'AWS::EC2::NetworkAclEntry'
Properties:
NetworkAclId: !GetAtt CSETrainingSubnet.NetworkAclAssociationId
RuleNumber: 1
Protocol: -1
RuleAction: deny
CidrBlock: 0.0.0.0/0
OutboundRule:
Type: 'AWS::EC2::NetworkAclEntry'
Properties:
NetworkAclId: !GetAtt CSETrainingSubnet.NetworkAclAssociationId
RuleNumber: 1
Protocol: -1
Egress: true
RuleAction: deny
CidrBlock: 0.0.0.0/0
CSETrainingVPC:
Type: 'AWS::EC2::VPC'
Properties:
CidrBlock: 10.146.0.0/16
EnableDnsSupport: 'true'
EnableDnsHostnames: 'true'
Tags:
- Key: Name
Value: Training VPC
CSETrainingSubnet:
Type: 'AWS::EC2::Subnet'
Properties:
VpcId: !Ref CSETrainingVPC
CidrBlock: 10.146.1.0/24
AvailabilityZone: us-east-1a
Tags:
- Key: Name
Value: CSETrainingSubnet
Outputs:
DefaultNetworkACLID:
Description: "ID of Training VPC Network ACL"
Value: !GetAtt CSETrainingSubnet.NetworkAclAssociationId
问题是当我在 InBoundRule OutBoundRule 和输出下调用“!GetAtt CSETrainingSubnet.NetworkAclAssociationId”时,出现以下错误:“属性‘NetworkAclAssociationId’不存在。”(也显示在屏幕截图中)
同样属性“NetworkAclAssociationId”不存在。无论我使用子网关联还是 VPC.DefaultNetworkAcl 关联调用 !GetAtt,都会生成错误。
我还附上了一张屏幕截图,显示 NACL 确实存在,以及 VPC 和子网。
根据 ChatGPT 的建议,我尝试从子网创建中获取关联,而不是从 VPC 创建中获取关联,但这没有帮助。在其他一切完成后,我还尝试从输出区域获取关联,但我仍然收到相同的错误消息。
我唯一没有尝试过的是可能发出等待命令,因为这是我能想到的唯一的其他事情。我没有成功地研究这个确切问题的主题,其中成功创建资源后 !getAtt 不起作用。
上述问题的答案“属性‘DefaultNetworkAcl’不存在”或“属性‘NetworkAclAssociationId’不存在。”我的 Cloudformation 使用的 IAM 角色缺少以下权限: “ec2:描述网络Acls” “ec2:创建网络Acl条目”
如果您想要最低权限,这些是必要的,并且没有通过错误消息很好地指示。我想我会尝试使用管理员角色进行测试,使用管理员角色后,问题得到解决。因此,必须找到正确的权限来添加。