gpt4 book ai didi

aws-cloudformation - 使用应用程序层的 Cloudformation 授予对 RDS 层的访问权限

转载 作者:行者123 更新时间:2023-12-03 07:14:57 24 4
gpt4 key购买 nike

我有一个使用 Cloudformation 启动的 RDS 数据库。现在我有一个 Cloudformation 文档,可以启动我的应用程序服务器层。如何授予我的应用服务器访问 RDS 实例的权限?

如果 RDS 实例是由我的 Cloudformation 文档创建的,我知道我可以这样做:

"DBSecurityGroup": {
"Type": "AWS::RDS::DBSecurityGroup",
"Properties": {
"EC2VpcId" : { "Ref" : "VpcId" },
"DBSecurityGroupIngress": { "EC2SecurityGroupId": { "Fn::GetAtt": [ "AppServerSecurityGroup", "GroupId" ]} },
"GroupDescription" : "Frontend Access"
}
}

但是当我运行我的应用程序 cloudformation 时,DBSecurityGroup 已经存在。我该如何更新它?

更新根据huelbois在下面向我指出的内容,我了解到我可以在我的应用程序Cloudformation中创建一个AWS::EC2::SecurityGroupIngress。由于我使用的是 VPC,并且发布的代码 Huelbois 是经典的,所以我可以确认这有效:

在 RDS Cloudformation 中:

    "DbVpcSecurityGroup" : {
"Type" : "AWS::EC2::SecurityGroup",
"Properties" : {
"GroupDescription" : "Enable JDBC access on the configured port",
"VpcId" : { "Ref" : "VpcId" },
"SecurityGroupIngress" : [ ]
}
}

在应用程序 Cloudformation 中:

  "specialRDSRule" : {
"Type": "AWS::EC2::SecurityGroupIngress",
"Properties" : {
"IpProtocol": "tcp",
"FromPort": 5432,
"ToPort": 5432,
"GroupId": {"Ref": "DbSecurityGroupId"},
"SourceSecurityGroupId": {"Ref": "InstanceSecurityGroup"}
}
}

其中 DbSecurityGroupId 是上面组设置的 ID(类似于 sg-27324c43),并且是应用程序 Cloudformation 文档的参数。

最佳答案

当您想要使用 CloudFormation 模板中已有的资源时,您可以使用之前创建的 id,而不是 Ref 或 GetAtt。

在您的示例中,您可以使用:

{ "EC2SecurityGroupId": "sg-xxxNNN" }

其中“sg-xxxNNN”是您的数据库安全组的 ID(不确定数据库安全组前缀,因为我们不使用 EC2-classic,而是使用 VPC)。

我建议在模板中为您的安全组使用参数。

*** 更新 **

对于您的具体设置,我将使用“DBSecurityGroupIngress”资源,将新的 sg 添加到您的 RDS 实例。

在您的第一个堆栈 (RDS) 中,您创建一个空的 DBSecurityGroup,如下所示:

"DBSecurityGroup": {
"Type": "AWS::RDS::DBSecurityGroup",

"Properties": {
"EC2VpcId" : { "Ref" : "VpcId" },
"DBSecurityGroupIngress": [],
"GroupDescription" : "Frontend Access"
}
}

此 DBSecurityGroup 由 DBInstance 引用。 (我猜您有使用 DBSecurityGroup 而不是 VPCSecurityGroup 的特定要求)。

在您的应用程序堆栈中,您创建一个 DBSecurityGroupIngress 资源,它是您在第一个堆栈中创建的 DBSecurityGroup 的子级:

"specialRDSRule" : {
"Type":"AWS::RDS::DBSecurityGroupIngress",
"Properties" : {
"DBSecurityGroupName": "<the arn of the DBSecurityGroup>",
"CIDRIP": String,
"EC2SecurityGroupId": String,
"EC2SecurityGroupName": String,
"EC2SecurityGroupOwnerId": String
}
}

您需要 DBSecurityGroup 的 arn,即“arn:aws:rds:::secgrp:”。其他参数来自您的应用程序堆栈,不确定您是否需要所有内容(我不做EC2经典安全组,只做VPC)。

引用:http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-security-group-ingress.html

我们使用与 VPC SecurityGroups 相同的机制,具有入口和导出规则,因此我们可以让两个 SG 相互引用。

关于aws-cloudformation - 使用应用程序层的 Cloudformation 授予对 RDS 层的访问权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27356427/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com