Kelola grup keamanan dengan CloudFormation - AWS CloudFormation

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

Kelola grup keamanan dengan CloudFormation

Cuplikan berikut menunjukkan cara menggunakan CloudFormation untuk mengelola grup keamanan dan EC2 instans Amazon untuk mengontrol akses ke sumber daya Anda. AWS

Kaitkan EC2 instans Amazon dengan grup keamanan

Contoh cuplikan berikut menunjukkan cara mengaitkan EC2 instance Amazon dengan grup keamanan Amazon VPC default yang digunakan. CloudFormation

Kaitkan EC2 instans Amazon dengan grup keamanan VPC default

Cuplikan berikut membuat VPC Amazon, subnet dalam VPC, dan instance Amazon. EC2 VPC dibuat menggunakan sumber daya AWS::EC2: :VPC. Rentang alamat IP untuk VPC didefinisikan dalam template yang lebih besar dan direferensikan oleh parameter. MyVPCCIDRRange

Subnet dibuat dalam VPC menggunakan sumber daya AWS:::EC2: Subnet. Subnet dikaitkan dengan VPC, yang direferensikan sebagai. MyVPC

Sebuah EC2 instance diluncurkan dalam VPC dan subnet menggunakan sumber daya. AWS::EC2::Instance Resource ini menentukan Amazon Machine Image (AMI) yang akan digunakan untuk meluncurkan instance, subnet tempat instance akan berjalan, dan grup keamanan yang akan diasosiasikan dengan instance. Fn::FindInMapFungsi ini digunakan untuk mengambil nilai dari AWSRegionToAMI pemetaan yang didefinisikan dalam template untuk menentukan sumber ImageId daya. AWS::EC2::Instance

ID grup keamanan diperoleh dengan menggunakan Fn::GetAtt fungsi, yang mengambil grup keamanan default dari MyVPC sumber daya.

Instance ditempatkan dalam MySubnet sumber daya yang ditentukan dalam cuplikan.

Saat Anda membuat VPC menggunakan CloudFormation, AWS secara otomatis membuat sumber daya default dalam VPC, termasuk grup keamanan default. Namun, ketika Anda mendefinisikan VPC dalam CloudFormation template, Anda mungkin tidak memiliki akses ke sumber daya default ini saat Anda membuat template. IDs Untuk mengakses dan menggunakan sumber daya default yang ditentukan dalam template, Anda dapat menggunakan fungsi intrinsik seperti. Fn::GetAtt Fungsi ini memungkinkan Anda untuk bekerja dengan sumber daya default yang dibuat secara otomatis oleh 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

Membuat EC2 instans Amazon dengan volume terlampir dan grup keamanan

Cuplikan berikut membuat EC2 instance Amazon menggunakan AWS::EC2::Instancesumber daya, yang diluncurkan dari AMI yang ditunjuk. Instance ini dikaitkan dengan grup keamanan yang memungkinkan lalu lintas SSH masuk pada port 22 dari alamat IP tertentu, menggunakan sumber daya. AWS::EC2::SecurityGroup Ini menciptakan volume Amazon EBS 100 GB menggunakan AWS::EC2::Volumesumber daya. Volume dibuat di zona ketersediaan yang sama dengan instance, seperti yang ditentukan oleh GetAtt fungsi, dan dipasang ke instance di /dev/sdh perangkat.

Untuk informasi selengkapnya tentang membuat volume Amazon EBS, lihat Membuat volume 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

Buat grup keamanan dengan aturan masuk

Contoh cuplikan berikut menunjukkan cara mengkonfigurasi grup keamanan dengan aturan masuk tertentu menggunakan. CloudFormation

Buat grup keamanan dengan aturan ingress untuk akses SSH dan HTTP

Cuplikan berikut menjelaskan dua aturan masuknya grup keamanan menggunakan sumber daya. AWS::EC2::SecurityGroup Aturan ingress pertama memungkinkan SSH (port 22) akses dari grup keamanan yang ada bernamaMyAdminSecurityGroup, yang dimiliki oleh AWS akun dengan nomor akun. 1111-2222-3333 Aturan ingress kedua memungkinkan akses HTTP (port 80) dari grup keamanan yang berbeda bernamaMySecurityGroupCreatedInCFN, yang dibuat dalam template yang sama. RefFungsi ini digunakan untuk mereferensikan nama logis dari grup keamanan yang dibuat dalam template yang sama.

Dalam aturan ingress pertama, Anda harus menambahkan nilai untuk SourceSecurityGroupOwnerId properti SourceSecurityGroupName dan properti. Dalam aturan ingress kedua, MySecurityGroupCreatedInCFNTemplate referensi grup keamanan yang berbeda, yang dibuat dalam template yang sama. Verifikasi bahwa nama logis MySecurityGroupCreatedInCFNTemplate cocok dengan nama logis sebenarnya dari sumber daya grup keamanan yang Anda tentukan dalam templat yang lebih besar.

Untuk informasi selengkapnya tentang grup keamanan, lihat grup EC2 keamanan Amazon untuk EC2 instans Amazon Anda di Panduan EC2 Pengguna Amazon.

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

Buat grup keamanan dengan aturan ingress untuk akses HTTP dan SSH dari rentang CIDR yang ditentukan

Cuplikan berikut membuat grup keamanan untuk EC2 instans Amazon dengan dua aturan masuk. Aturan masuk memungkinkan lalu lintas TCP masuk pada port yang ditentukan dari rentang CIDR yang ditentukan. AWS::EC2::SecurityGroupSumber daya digunakan untuk menentukan aturan. Anda harus menentukan protokol untuk setiap aturan. Untuk TCP, Anda harus menentukan port atau rentang port. Jika Anda tidak menentukan grup keamanan sumber atau rentang CIDR, tumpukan akan berhasil diluncurkan, tetapi aturan tidak akan diterapkan ke grup keamanan.

Untuk informasi selengkapnya tentang grup keamanan, lihat grup EC2 keamanan Amazon untuk EC2 instans Amazon Anda di Panduan EC2 Pengguna Amazon.

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

Buat grup keamanan referensi silang dengan aturan masuk

Cuplikan berikut menggunakan AWS::EC2::SecurityGroupsumber daya untuk membuat dua grup EC2 keamanan Amazon, SGroup1 dan. SGroup2 Aturan Ingress yang memungkinkan komunikasi antara dua kelompok keamanan dibuat dengan menggunakan sumber daya AWS::EC2::SecurityGroupIngress. SGroup1Ingressmenetapkan aturan ingress untuk SGroup1 itu memungkinkan lalu lintas TCP masuk pada port 80 dari grup keamanan sumber,. SGroup2 SGroup2Ingressmenetapkan aturan ingress untuk SGroup2 itu memungkinkan lalu lintas TCP masuk pada port 80 dari grup keamanan sumber,. SGroup1

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

Buat Elastic Load Balancer dengan aturan masuknya grup keamanan

Template berikut membuat AWS::ElasticLoadBalancing::LoadBalancersumber daya di zona ketersediaan yang ditentukan. AWS::ElasticLoadBalancing::LoadBalancerSumber daya dikonfigurasi untuk mendengarkan pada port 80 untuk lalu lintas HTTP dan permintaan langsung ke instance juga pada port 80. Elastic Load Balancer bertanggung jawab untuk menyeimbangkan beban lalu lintas HTTP yang masuk di antara instans.

Selain itu, template ini menghasilkan AWS::EC2::SecurityGroupsumber daya yang terkait dengan penyeimbang beban. Grup keamanan ini dibuat dengan aturan masuk tunggal, digambarkan sebagaiELB ingress group, yang memungkinkan lalu lintas TCP masuk pada port 80. Sumber untuk aturan ingress ini didefinisikan menggunakan Fn::GetAtt fucntion untuk mengambil atribut dari sumber daya penyeimbang beban. SourceSecurityGroupOwnerIddigunakan Fn::GetAtt untuk mendapatkan kelompok keamanan sumber dari penyeimbang beban. OwnerAlias SourceSecurityGroupNamedigunakan Fn::Getatt untuk mendapatkan kelompok keamanan sumber ELB. GroupName

Pengaturan ini memastikan komunikasi yang aman antara ELB dan instans.

Untuk informasi selengkapnya tentang load balancing, lihat Panduan Pengguna 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