選取您的 Cookie 偏好設定

我們使用提供自身網站和服務所需的基本 Cookie 和類似工具。我們使用效能 Cookie 收集匿名統計資料,以便了解客戶如何使用我們的網站並進行改進。基本 Cookie 無法停用,但可以按一下「自訂」或「拒絕」以拒絕效能 Cookie。

如果您同意,AWS 與經核准的第三方也會使用 Cookie 提供實用的網站功能、記住您的偏好設定,並顯示相關內容,包括相關廣告。若要接受或拒絕所有非必要 Cookie,請按一下「接受」或「拒絕」。若要進行更詳細的選擇,請按一下「自訂」。

使用 管理安全群組 AWS CloudFormation

焦點模式
使用 管理安全群組 AWS CloudFormation - AWS CloudFormation

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

篩選條件查看

下列程式碼片段示範如何使用 AWS CloudFormation 來管理安全群組和 Amazon EC2 執行個體,以控制對 AWS 資源的存取。

將 Amazon EC2 執行個體與安全群組建立關聯

下列範例程式碼片段示範了如何使用 AWS CloudFormation,將 Amazon EC2 執行個體與預設 Amazon VPC 安全群組建立關聯。

將 Amazon EC2 執行個體與預設 VPC 安全群組建立關聯

下列程式碼片段會建立 Amazon VPC、VPC 內的子網路以及 Amazon EC2 執行個體。VPC 使用 AWS::EC2::VPC 資源建立。VPC 的 IP 地址範圍在較大的範本中定義,並且 MyVPCCIDRRange 參數會參考該範圍。

子網路在 VPC 內使用 AWS::EC2:: Subnet 資源。子網路與 VPC 關聯,以 MyVPC 做為參考。

EC2 執行個體在 VPC 和子網路內使用 AWS::EC2::Instance 資源啟動。此資源會指定用於啟動執行個體的 Amazon Machine Image (AMI)、執行執行個體所在的子網路,以及要與執行個體建立關聯的安全群組。Fn::FindInMap 函數用於從範本定義的 AWSRegionToAMI 映射中擷取值,以確定 AWS::EC2::Instance 資源的 ImageId

安全群組 ID 使用 Fn::GetAtt 函數取得,該函數會從 MyVPC 資源擷取預設安全群組。

執行個體會放置在程式碼片段定義的 MySubnet 資源內。

當您使用 建立 VPC 時 AWS CloudFormation, 會在 VPC 內 AWS 自動建立預設資源,包括預設安全群組。不過,當您在 AWS CloudFormation 範本中定義 VPC 時,在建立範本時,您可能無法存取這些預設資源IDs。若要存取和使用範本中指定的預設資源,您可以使用內部函數,例如 Fn::GetAtt。此函數可讓您使用 AWS CloudFormation自動建立的預設資源。

JSON

"MyVPC": { "Type": "AWS::EC2::VPC", "Properties": { "CidrBlock": { "Ref": "MyVPCCIDRRange" }, "EnableDnsSupport": false, "EnableDnsHostnames": false, "InstanceTenancy": "default" } }, "MySubnet": { "Type": "AWS::EC2::Subnet", "Properties": { "CidrBlock": { "Ref": "MyVPCCIDRRange" }, "VpcId": { "Ref": "MyVPC" } } }, "MyInstance": { "Type": "AWS::EC2::Instance", "Properties": { "ImageId": { "Fn::FindInMap": [ "AWSRegionToAMI", { "Ref": "AWS::Region" }, "64" ] }, "SecurityGroupIds": [ { "Fn::GetAtt": [ "MyVPC", "DefaultSecurityGroup" ] } ], "SubnetId": { "Ref": "MySubnet" } } }

YAML

MyVPC: Type: AWS::EC2::VPC Properties: CidrBlock: Ref: MyVPCCIDRRange EnableDnsSupport: false EnableDnsHostnames: false InstanceTenancy: default MySubnet: Type: AWS::EC2::Subnet Properties: CidrBlock: Ref: MyVPCCIDRRange VpcId: Ref: MyVPC MyInstance: Type: AWS::EC2::Instance Properties: ImageId: Fn::FindInMap: - AWSRegionToAMI - Ref: AWS::Region - "64" SecurityGroupIds: - Fn::GetAtt: - MyVPC - DefaultSecurityGroup SubnetId: Ref: MySubnet

建立具有附接磁碟區和安全群組的 Amazon EC2 執行個體

下列程式碼片段會使用 AWS::EC2::Instance 資源來建立 Amazon EC2 執行個體,該資源從指定的 AMI 啟動。執行個體與安全群組關聯,允許使用 AWS::EC2::SecurityGroup 資源,在連接埠 22 上從指定的 IP 地址傳入 SSH 流量。它會使用 AWS::EC2::Volume 資源來建立 100 GB 的 Amazon EBS 磁碟區。磁碟區建立在與執行個體相同的可用區域 (如 GetAtt 函數所指定),並掛接至 /dev/sdh 裝置上的執行個體。

如需有關建立 Amazon EBS 磁碟區的詳細資訊,請參閱建立 Amazon EBS 磁碟區

JSON

"Ec2Instance": { "Type": "AWS::EC2::Instance", "Properties": { "SecurityGroups": [ { "Ref": "InstanceSecurityGroup" } ], "ImageId": "ami-1234567890abcdef0" } }, "InstanceSecurityGroup": { "Type": "AWS::EC2::SecurityGroup", "Properties": { "GroupDescription": "Enable SSH access via port 22", "SecurityGroupIngress": [ { "IpProtocol": "tcp", "FromPort": "22", "ToPort": "22", "CidrIp": "192.0.2.0/24" } ] } }, "NewVolume": { "Type": "AWS::EC2::Volume", "Properties": { "Size": "100", "AvailabilityZone": { "Fn::GetAtt": [ "Ec2Instance", "AvailabilityZone" ] } } }, "MountPoint": { "Type": "AWS::EC2::VolumeAttachment", "Properties": { "InstanceId": { "Ref": "Ec2Instance" }, "VolumeId": { "Ref": "NewVolume" }, "Device": "/dev/sdh" } }

YAML

Ec2Instance: Type: AWS::EC2::Instance Properties: SecurityGroups: - !Ref InstanceSecurityGroup ImageId: ami-1234567890abcdef0 InstanceSecurityGroup: Type: AWS::EC2::SecurityGroup Properties: GroupDescription: Enable SSH access via port 22 SecurityGroupIngress: - IpProtocol: tcp FromPort: 22 ToPort: 22 CidrIp: 192.0.2.0/24 NewVolume: Type: AWS::EC2::Volume Properties: Size: 100 AvailabilityZone: !GetAtt [Ec2Instance, AvailabilityZone] MountPoint: Type: AWS::EC2::VolumeAttachment Properties: InstanceId: !Ref Ec2Instance VolumeId: !Ref NewVolume Device: /dev/sdh

使用傳入規則建立安全群組

下列範例程式碼片段示範了如何透過使用 AWS CloudFormation的特定傳入規則來設定安全群組。

使用傳入規則建立安全群組以進行 SSH 和 HTTP 存取

下列程式碼片段描述了使用 AWS::EC2::SecurityGroup 資源的兩個安全群組傳入規則。第一個傳入規則允許 SSH (連接埠 22) 從名為 的現有安全群組存取MyAdminSecurityGroup,該安全群組由 AWS 帳戶擁有,帳戶號碼為 1111-2222-3333。第二個傳入規則允許從稱為 MySecurityGroupCreatedInCFN 的不同安全群組存取 HTTP (通訊埠 80),該安全群組在相同範本中建立。Ref 函數用於參考在相同範本中建立的安全群組的邏輯名稱。

在第一個傳入規則中,您必須為 SourceSecurityGroupNameSourceSecurityGroupOwnerId 屬性新增值。在第二個傳入規則中,MySecurityGroupCreatedInCFNTemplate 會參考在相同範本中建立的不同安全群組。確認邏輯名稱 MySecurityGroupCreatedInCFNTemplate 與您在較大範本中指定的安全群組資源的實際邏輯名稱相符。

如需有關安全群組的詳細資訊,請參閱適用於 Linux 執行個體的 Amazon EC2 安全群組適用於 Windows 執行個體的 Amazon EC2 安全群組

JSON

"SecurityGroup": { "Type": "AWS::EC2::SecurityGroup", "Properties": { "GroupDescription": "Allow connections from specified source security group", "SecurityGroupIngress": [ { "IpProtocol": "tcp", "FromPort": "22", "ToPort": "22", "SourceSecurityGroupName": "MyAdminSecurityGroup", "SourceSecurityGroupOwnerId": "1111-2222-3333" }, { "IpProtocol": "tcp", "FromPort": "80", "ToPort": "80", "SourceSecurityGroupName": { "Ref": "MySecurityGroupCreatedInCFNTemplate" } } ] } }

YAML

SecurityGroup: Type: 'AWS::EC2::SecurityGroup' Properties: GroupDescription: Allow connections from specified source security group SecurityGroupIngress: - IpProtocol: tcp FromPort: '22' ToPort: '22' SourceSecurityGroupName: MyAdminSecurityGroup SourceSecurityGroupOwnerId: '1111-2222-3333' - IpProtocol: tcp FromPort: '80' ToPort: '80' SourceSecurityGroupName: Ref: MySecurityGroupCreatedInCFNTemplate

使用傳入規則建立安全群組,以從指定的 CIDR 範圍進行 HTTP 和 SSH 存取

下列程式碼片段會針對具有兩個傳入規則的 Amazon EC2 執行個體建立安全群組。傳入規則允許從指定 CIDR 範圍的指定連接埠上傳入 TCP 流量。AWS::EC2::SecurityGroup 資源用於指定規則。您必須針對每項規則指定協定。針對 TCP,您必須指定連接埠或連接埠範圍。如果您未指定來源安全群組或 CIDR 範圍,堆疊會成功啟動,但不會將規則套用至安全群組。

如需有關安全群組的詳細資訊,請參閱適用於 Linux 執行個體的 Amazon EC2 安全群組適用於 Windows 執行個體的 Amazon EC2 安全群組

JSON

"ServerSecurityGroup": { "Type": "AWS::EC2::SecurityGroup", "Properties": { "GroupDescription": "Allow connections from specified CIDR ranges", "SecurityGroupIngress": [ { "IpProtocol": "tcp", "FromPort": "80", "ToPort": "80", "CidrIp": "192.0.2.0/24" }, { "IpProtocol": "tcp", "FromPort": "22", "ToPort": "22", "CidrIp": "192.0.2.0/24" } ] } }

YAML

ServerSecurityGroup: Type: AWS::EC2::SecurityGroup Properties: GroupDescription: Allow connections from specified CIDR ranges SecurityGroupIngress: - IpProtocol: tcp FromPort: 80 ToPort: 80 CidrIp: 192.0.2.0/24 - IpProtocol: tcp FromPort: 22 ToPort: 22 CidrIp: 192.0.2.0/24

使用傳入規則建立相互參照的安全群組

下列程式碼片段使用 AWS::EC2::SecurityGroup 資源來建立兩個 Amazon EC2 安全群組 (SGroup1SGroup2)。允許兩個安全群組之間進行通訊的傳入規則使用 AWS::EC2::SecurityGroupIngress 資源建立。SGroup1Ingress 會建立 SGroup1 的傳入規則,以允許來源安全群組 SGroup2 連接埠 80 上的傳入 TCP 流量。SGroup2Ingress 會建立 SGroup2 的傳入規則,以允許來源安全群組 SGroup1 連接埠 80 上的傳入 TCP 流量。

JSON

"SGroup1": { "Type": "AWS::EC2::SecurityGroup", "Properties": { "GroupDescription": "EC2 instance access" } }, "SGroup2": { "Type": "AWS::EC2::SecurityGroup", "Properties": { "GroupDescription": "EC2 instance access" } }, "SGroup1Ingress": { "Type": "AWS::EC2::SecurityGroupIngress", "Properties": { "GroupName": { "Ref": "SGroup1" }, "IpProtocol": "tcp", "ToPort": "80", "FromPort": "80", "SourceSecurityGroupName": { "Ref": "SGroup2" } } }, "SGroup2Ingress": { "Type": "AWS::EC2::SecurityGroupIngress", "Properties": { "GroupName": { "Ref": "SGroup2" }, "IpProtocol": "tcp", "ToPort": "80", "FromPort": "80", "SourceSecurityGroupName": { "Ref": "SGroup1" } } }

YAML

SGroup1: Type: AWS::EC2::SecurityGroup Properties: GroupDescription: EC2 Instance access SGroup2: Type: AWS::EC2::SecurityGroup Properties: GroupDescription: EC2 Instance access SGroup1Ingress: Type: AWS::EC2::SecurityGroupIngress Properties: GroupName: !Ref SGroup1 IpProtocol: tcp ToPort: 80 FromPort: 80 SourceSecurityGroupName: !Ref SGroup2 SGroup2Ingress: Type: AWS::EC2::SecurityGroupIngress Properties: GroupName: !Ref SGroup2 IpProtocol: tcp ToPort: 80 FromPort: 80 SourceSecurityGroupName: !Ref SGroup1

使用安全群組傳入規則建立 Elastic Load Balancer

下列範本會在指定的可用區域建立 AWS::ElasticLoadBalancing::LoadBalancer 資源。AWS::ElasticLoadBalancing::LoadBalancer 資源設定為在連接埠 80 上接聽 HTTP 流量,請求也會引導至連接埠 80 上的執行個體。Elastic Load Balancer 負責對執行個體之間的傳入 HTTP 流量進行負載平衡。

此外,此範本會產生與負載平衡器關聯的 AWS::EC2::SecurityGroup 資源。此安全群組使用單一傳入規則建立,描述為 ELB ingress group,這會允許連接埠 80 上的傳入 TCP 流量。此傳入規則的來源 Fn::GetAtt 函數定義,以從負載平衡器資源擷取屬性。SourceSecurityGroupOwnerId 使用 Fn::GetAtt 來取得負載平衡器來源安全群組的 OwnerAliasSourceSecurityGroupName 使用 Fn::Getatt 來取得 ELB 來源安全群組的 GroupName

此設定可確保 ELB 與執行個體之間進行安全通訊。

如需負載平衡的詳細資訊,請參閱 Elastic Load Balancing 使用者指南

JSON

{ "AWSTemplateFormatVersion": "2010-09-09", "Resources": { "MyELB": { "Type": "AWS::ElasticLoadBalancing::LoadBalancer", "Properties": { "AvailabilityZones": [ "aa-example-1a" ], "Listeners": [ { "LoadBalancerPort": "80", "InstancePort": "80", "Protocol": "HTTP" } ] } }, "MyELBIngressGroup": { "Type": "AWS::EC2::SecurityGroup", "Properties": { "GroupDescription": "ELB ingress group", "SecurityGroupIngress": [ { "IpProtocol": "tcp", "FromPort": 80, "ToPort": 80, "SourceSecurityGroupOwnerId": { "Fn::GetAtt": [ "MyELB", "SourceSecurityGroup.OwnerAlias" ] }, "SourceSecurityGroupName": { "Fn::GetAtt": [ "MyELB", "SourceSecurityGroup.GroupName" ] } } ] } } } }

YAML

AWSTemplateFormatVersion: '2010-09-09' Resources: MyELB: Type: 'AWS::ElasticLoadBalancing::LoadBalancer' Properties: AvailabilityZones: - aa-example-1a Listeners: - LoadBalancerPort: '80' InstancePort: '80' Protocol: HTTP MyELBIngressGroup: Type: 'AWS::EC2::SecurityGroup' Properties: GroupDescription: ELB ingress group SecurityGroupIngress: - IpProtocol: tcp FromPort: '80' ToPort: '80' SourceSecurityGroupOwnerId: Fn::GetAtt: - MyELB - SourceSecurityGroup.OwnerAlias SourceSecurityGroupName: Fn::GetAtt: - MyELB - SourceSecurityGroup.GroupName
隱私權網站條款Cookie 偏好設定
© 2025, Amazon Web Services, Inc.或其附屬公司。保留所有權利。