本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 “直接更改” 模式创建堆栈
为了让 AMS 管理堆栈AWSManagedServicesCloudFormationAdminRole
,在 CloudFormation 使用中启动堆栈时有两个要求:
模板必须包含
AmsStackTransform
。堆栈名称必须以前缀开头,
stack-
后跟一个 17 个字符的字母数字字符串。
注意
要成功使用AmsStackTransform
,您必须确认您的堆栈模板包含相应CAPABILITY_AUTO_EXPAND
功能,以便 AWS CloudFormation (CFN) 创建或更新堆栈。为此,您可以将CAPABILITY_AUTO_EXPAND
作为创建堆栈请求的一部分传递。如果模板中包含此功能时未确认此功能,则 CFN 会拒绝该请求。AmsStackTransform
如果您的模板中有转换,CFN 控制台可确保您通过此功能,但是当您通过 CFN 控制台与 CFN 进行交互时,可能会错过此功能。 APIs
无论何时使用以下 CFN API 调用,都必须通过此功能:
使用 DCM 创建或更新堆栈时,将在堆栈上执行 CFN Ingest 和堆栈更新的 CTs 相同验证和增强,有关更多信息,请参阅载AWS CloudFormation 入指南、最佳实践和限制。唯一的例外是,AMS 默认安全组 (SGs) 不会附加到 Auto Scaling 组中的任何独立 EC2 EC2 实例或 Auto Scaling 组 (ASGs) 中的实例。使用独立 EC2 实例或创建 CloudFormation 模板时 ASGs,可以附加默认实例 SGs。
注意
现在可以使用创建和管理 IAM 角色AWSManagedServicesCloudFormationAdminRole
。
AMS 默认 SGs 具有入口和出口规则,允许实例成功启动,并允许稍后由 AMS 操作和您通过 SSH 或 RDP 进行访问。如果您发现 AMS 的默认安全组过于宽松,则可以创建自己的安全组,并 SGs 使用更严格的规则将其附加到您的实例,前提是它仍然允许您和 AMS 操作人员在事件发生期间访问该实例。
AMS 的默认安全组如下:
SentinelDefaultSecurityGroupPrivateOnly: 可以通过此 SSM 参数在 CFN 模板中进行访问
/ams/${VpcId}/SentinelDefaultSecurityGroupPrivateOnly
SentinelDefaultSecurityGroupPrivateOnlyEgressAll: 可以通过此 SSM 参数在 CFN 模板中进行访问
/ams/${VpcId}/SentinelDefaultSecurityGroupPrivateOnlyEgressAll
AMS 转型
在 CloudFormation 模板Transform
中添加声明。这将添加一个 CloudFormation 宏,用于在启动时验证堆栈并将其注册到 AMS。
JSON 示
"Transform": { "Name": "AmsStackTransform", "Parameters": { "StackId": {"Ref" : "AWS::
StackId
"} } }
YAML 示例
Transform: Name: AmsStackTransform Parameters: StackId: !Ref 'AWS::
StackId
'
在更新现有堆栈的模板时,还要添加该Transform
语句。
JSON 示
{ "AWSTemplateFormatVersion": "2010-09-09", "Description" : "
Create an SNS Topic
", "Transform": { "Name": "AmsStackTransform", "Parameters": { "StackId": {"Ref" : "AWS::StackId
"} } }, "Parameters": { "TopicName": { "Type": "String", "Default": "HelloWorldTopic
" } }, "Resources": { "SnsTopic": { "Type": "AWS::SNS::Topic", "Properties": { "TopicName": {"Ref": "TopicName
"} } } } }
YAML 示例
AWSTemplateFormatVersion: '2010-09-09' Description:
Create an SNS Topic
Transform: Name: AmsStackTransform Parameters: StackId: !Ref 'AWS::StackId
' Parameters: TopicName: Type: String Default:HelloWorldTopic
Resources: SnsTopic: Type: AWS::SNS::Topic Properties: TopicName: !RefTopicName
堆栈名称
堆栈名称必须以前缀开头,stack-
后跟一个 17 个字符的字母数字字符串。这是为了保持与在 AMS 堆栈上运行的其他 AMS 系统的兼容性 IDs。
以下是生成兼容堆栈的方法示例 IDs:
Bash:
echo "stack-$(env LC_CTYPE=C tr -dc 'a-z0-9' < /dev/urandom | head -c 17)"
Python:
import string import random 'stack-' + ''.join(random.choices(string.ascii_lowercase + string.digits, k=17))
Powershell:
"stack-" + ( -join ((0x30..0x39) + ( 0x61..0x7A) | Get-Random -Count 17 | % {[char]$_}) )