1

Je me lève totalement les mains avec celui-ci. J'ai essayé de créer une instance RDS accessible au public en utilisant CloudFormation. Je veux pouvoir me connecter à mon instance via un client mysql. Lorsque je déploie cette pile, il est indiqué que l'instance est accessible au public dans la console RDS, mais que je ne peux pas me connecter via l'extrémité fournie dans la console RDS. Je devine que j'ai raté/raté quelque chose avec les morceaux de VPC. Il est mon fichier stack.yaml:Création d'une instance RDS accessible au public dans AWS Cloudformation

Resources: 
    Vpc: 
    Type: AWS::EC2::VPC 
    Properties: 
     CidrBlock: 10.0.0.0/16 
     EnableDnsHostnames: true 
     Tags: 
     - Key: Name 
      Value: 'VPC created by cf' 
    InternetGateway: 
    Type: AWS::EC2::InternetGateway 
    Properties: 
     Tags: 
     - Key: Name 
     Value: Created By CF 
    VPCGatewayAttachment: 
    Type: AWS::EC2::VPCGatewayAttachment 
    Properties: 
     VpcId: !Ref Vpc 
     InternetGatewayId: !Ref InternetGateway 
    DataSourceSecurityGroup: 
    Type: AWS::EC2::SecurityGroup 
    Properties: 
     GroupDescription: Open database for access 
     VpcId: !Ref Vpc 
    DSSGIngressRule: 
    Type: AWS::EC2::SecurityGroupIngress 
    Properties: 
     FromPort: "3306" 
     ToPort: "3306" 
     GroupId: !Ref DataSourceSecurityGroup 
     IpProtocol: tcp 
     SourceSecurityGroupId: !Ref DataSourceSecurityGroup 
    PublicSubnet1: 
    Type: AWS::EC2::Subnet 
    Properties: 
     AvailabilityZone: us-east-1a 
     CidrBlock: 10.0.0.0/20 
     MapPublicIpOnLaunch: true 
     VpcId: !Ref Vpc 
    PublicSubnet2: 
    Type: AWS::EC2::Subnet 
    Properties: 
     AvailabilityZone: us-east-1b 
     CidrBlock: 10.0.16.0/20 
     MapPublicIpOnLaunch: true 
     VpcId: !Ref Vpc 
    RouteTable: 
    Type: AWS::EC2::RouteTable 
    Properties: 
     VpcId: !Ref Vpc 
     Tags: 
     - Key: Name 
     Value: 'RouteTable created by CF' 
    RouteTable1Association: 
    Type: AWS::EC2::SubnetRouteTableAssociation 
    Properties: 
     SubnetId: !Ref PublicSubnet1 
     RouteTableId: !Ref RouteTable 
    RouteTable2Association: 
    Type: AWS::EC2::SubnetRouteTableAssociation 
    Properties: 
     SubnetId: !Ref PublicSubnet2 
     RouteTableId: !Ref RouteTable 
    InternetRouteRule: 
    Type: AWS::EC2::Route 
    DependsOn: VPCGatewayAttachment 
    Properties: 
     RouteTableId: !Ref RouteTable 
     DestinationCidrBlock: 0.0.0.0/0 
     GatewayId: !Ref InternetGateway 
    DataSourceSubtNetGroup: 
    Type: AWS::RDS::DBSubnetGroup 
    Properties: 
     DBSubnetGroupDescription: Created by CF 
     SubnetIds: 
     - !Ref PublicSubnet1 
     - !Ref PublicSubnet2 
    DataSource: 
    Type: AWS::RDS::DBInstance 
    Properties: 
     AllocatedStorage: '5' 
     DBInstanceClass: db.m1.small 
     DBName: MyDb 
     DBSubnetGroupName: !Ref DataSourceSubtNetGroup 
     Engine: MySQL 
     MasterUsername: AdminUser 
     MasterUserPassword: AdminPassword 
     PubliclyAccessible: true 
     VPCSecurityGroups: 
     - !Ref DataSourceSecurityGroup 
    DeletionPolicy: Snapshot 

Merci

+0

Pouvez-vous vérifier les groupes de sécurité entrants dans Cloudformation. Vérifiez s'il autorise l'entrée à partir de n'importe quel bloc CIDR spécialement DataSourceSecurityGroup – Ashan

+0

Voulez-vous dire à partir de VPC? – aamiri

+0

@Ashan, Voulez-vous vérifier VPC? Je ne vois aucun moyen de vérifier les groupes de sécurité dans la formation des nuages. Je suis assez flou sur la façon dont tout fonctionne dans VPC. Pourriez-vous être plus précis? – aamiri

Répondre

3

Votre DataSourceSecurityGroup groupe de sécurité est actuellement configuré comme:

  • Groupe permis inbounded connexions sur le port 3306 de la Sécurité DataSourceSecurityGroup

Cela signifie qu'il autorisera les connexions entrantes provenant de n'importe quelle instance Amazon EC2 elle-même membre du groupe de sécurité DataSourceSecurityGroup.

Si vous voulez autoriser l'accès de partout sur Internet, puis changez votre modèle pour permettre l'accès entrant à partir 0.0.0.0/0:

DSSGIngressRule: 
    Type: AWS::EC2::SecurityGroupIngress 
    Properties: 
     FromPort: "3306" 
     ToPort: "3306" 
     GroupId: !Ref DataSourceSecurityGroup 
     IpProtocol: tcp 
     CidrIp: 0.0.0.0/0 

J'ai fait ce changement, votre modèle testé et il a bien fonctionné.

Pour référence future: Vous pouvez déboguer ce type de chose en créant la pile, puis en examinant le groupe de sécurité dans la console de gestion.

+0

Merci, c'était exactement ça. Merci! – aamiri