使用 “直接更改” 模式创建堆栈 - AMS 高级用户指南

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 “直接更改” 模式创建堆栈

为了让 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: !Ref TopicName

堆栈名称

堆栈名称必须以前缀开头,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]$_}) )