

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

# AMS 中的直接更改模式
<a name="direct-change-mode-section"></a>

**Topics**
+ [直接更改模式入门](dcm-get-started.md)
+ [安全性和合规性](dcm-security-n-compliance.md)
+ [直接更改模式下的变更管理](dcm-change-mgmt.md)
+ [使用 “直接更改” 模式创建堆栈](dcm-creating-stacks.md)
+ [直接更改模式用例](dcm-use-cases.md)

AWS Managed Services (AMS) 直接变更模式 (DCM) 通过提供对 AMS Advanced Plus 和高级账户的本机 AWS 访问权限来配置和更新 AWS 资源，从而扩展了 AMS 高级变更管理。使用 DCM，您可以选择使用原生 AWS API（控制台或 CLI/SDK）或 AMS Advanced 变更管理请求进行更改（RFCs），无论哪种情况，AMS 都完全支持资源及其更改，包括监控、补丁、备份、事件响应管理。通过 DCM 配置的资源在 AMS 服务知识管理系统 (SKMS) 中注册，加入 AMS 托管 Active Directory 域（如果适用），并运行 AMS 管理代理。使用现有工具（例如 SDK 和 CD AWS K）开发和部署 AMS CloudFormation 管理的堆栈。 CloudFormation

**注意**  
直接更改模式不会删除 AMS 变更管理 RFCs。通过 DCM，您可以完全访问 AM RFCs S。

[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/Qu1aKIUPT28?si=KrOqr8pniwfh7Nob/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/Qu1aKIUPT28?si=KrOqr8pniwfh7Nob)


# 直接更改模式入门
<a name="dcm-get-started"></a>

首先检查先决条件，然后在符合条件的 AMS Advanced 账户中提交变更申请 (RFC)。

1. 确认您要在 DCM 中使用的账户是否符合要求：
   + 该账户是 AMS 高级增强版或高级版。
   + 该账户未启用 Service Catalog。我们目前不支持同时登录 DCM 和 Service Catalog 的账号。如果您已加入 Service Catalog 但对 DCM 感兴趣，请与您的云服务交付经理 (CSDM) 讨论您的需求。如果您决定从 Service Catalog 切换到 DCM，请在下面的变更请求中加入询问。有关 AMS 中的服务目录的详细信息，请参阅 [AMS 和服务目录](https://docs.aws.amazon.com/managedservices/latest/userguide/ams-service-catalog.html)。

1. 使用管理 \$1 托管账户 \$1 直接更改模式 \$1 启用更改类型 (ct-3rd4781c2nnhp) 提交变更申请 (RFC)。有关演练示例，请参阅[直接更改模式 \$1 启用](https://docs.aws.amazon.com/managedservices/latest/ctref/management-managed-direct-change-mode-enable.html)。

   处理 CT 后，将在指定账户中配置预定义`AWSManagedServicesUpdateRole`的 IAM 角色`AWSManagedServicesCloudFormationAdminRole`和。

1. 使用您的内部联合流程为需要 DCM 访问权限的用户分配相应的角色。

**注意**  
您可以指定任意数量的 SAMLIdentity提供商、 AWS 服务和 IAM 实体（角色、用户等）来担任这些角色。您必须至少提供一个：`SAMLIdentityProviderARNs``IAMEntityARNs`、或`AWSServicePrincipals`。有关更多信息，请咨询贵公司的 IAM 部门或 AMS 云架构师 (CA)。

## 直接更改模式 IAM 角色和策略
<a name="dcm-gs-iam-roles-and-policies"></a>

在账户中启用直接更改模式后，将部署以下新的 IAM 实体：

`AWSManagedServicesCloudFormationAdminRole`：此角色授予访问 CloudFormation 控制台、创建和更新 CloudFormation 堆栈、查看偏差报告以及创建和执行 CloudFormation ChangeSets的权限。此角色的访问权限由您的 SAML 提供商管理。

部署并附加到角色的托管策略`AWSManagedServicesCloudFormationAdminRole`有：
+ AMS 高级多账号 landing zone (MALZ) 应用程序账户
  + AWSManagedServices\$1CloudFormationAdminPolicy1
  + AWSManagedServices\$1CloudFormationAdminPolicy2
    + 此策略代表授予的权限`AWSManagedServicesCloudFormationAdminRole`。您和合作伙伴使用此政策授予对账户中现有角色的访问权限，并允许该角色启动和更新账户中的 CloudFormation 堆栈。这可能需要额外的 AMS 服务控制策略 (SCP) 更新，以允许其他 IAM 实体启动 CloudFormation 堆栈。
+ AMS 高级单账号 landing zone (SALZ) 账户
  + AWSManagedServices\$1CloudFormationAdminPolicy1
  + AWSManagedServices\$1CloudFormationAdminPolicy2
  + cdk-legacy-mode-s3 次访问 [内联政策]
  + AWS ReadOnlyAccess 政策

`AWSManagedServicesUpdateRole`：此角色授予对下游 AWS 服务的受限访问权限 APIs。该角色采用托管策略部署，这些策略提供变更和非变更的 API 操作，但通常限制针对某些服务（例如 IAM、KMS、GuardDuty VPC、AMS 基础设施资源和配置等Create/Delete/PUT）的变更操作（例如）。 此角色的访问权限由您的 SAML 提供商管理。

部署并附加到角色的托管策略`AWSManagedServicesUpdateRole`有：
+ AMS 高级多账号 landing zone 应用程序账号
  + AWSManagedServicesUpdateBasePolicy 
  + AWSManagedServicesUpdateDenyPolicy 
  + AWSManagedServicesUpdateDenyProvisioningPolicy 
  + AWSManagedServicesUpdateEC2而且 RDSPolicy 
  + AWSManagedServicesUpdateDenyActionsOnAMSInfra政策
+ AMS 高级单账号 landing zone 账号
  + AWSManagedServicesUpdateBasePolicy 
  + AWSManagedServicesUpdateDenyProvisioningPolicy 
  + AWSManagedServicesUpdateEC2而且 RDSPolicy 
  + AWSManagedServicesUpdateDenyActionsOnAMSInfra政策 1 
  + AWSManagedServicesUpdateDenyActionsOnAMSInfra政策 2

除此之外，托管策略`AWSManagedServicesUpdateRole`角色还`ViewOnlyAccess`附加了 AWS 托管策略。

# 安全性和合规性
<a name="dcm-security-n-compliance"></a>

安全与合规是 AMS Advanced 和您作为我们的客户的共同责任。AMS Advanced Direct Change 模式不会更改此项共同责任。

## 直接更改模式下的安全性
<a name="dcm-security"></a>

AMS Advanced 通过规范性的着陆区、变更管理系统和访问管理提供了额外的价值。使用 “直接变更” 模式时，此责任模型不会改变。但是，您应该注意其他风险。

直接更改模式 “更新” 角色（参见[直接更改模式 IAM 角色和策略](dcm-get-started.md#dcm-gs-iam-roles-and-policies)）提供了提升的权限，允许有权访问该角色的实体更改您账户中由 AMS 支持的服务的基础设施资源。权限提升后，会存在不同的风险，具体取决于资源、服务和操作，尤其是在由于疏忽、错误或缺乏对内部流程和控制框架的遵守而导致错误更改的情况下。

根据AMS技术标准，已经确定了以下风险并提出了以下建议。有关 AMS 技术标准的详细信息可通过以下网址获取 AWS Artifact。要进行访问 AWS Artifact，请联系您的 CSDM 获取说明或前往[入门](https://aws.amazon.com/artifact/getting-started)。 AWS Artifact

**AMS-STD-001：标记**

<a name="AMS-STD-001"></a>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/managedservices/latest/onboardingguide/dcm-security-n-compliance.html)

**AMS-STD-002：身份和访问管理 (IAM) Access Management**


| 标准 | 它坏了吗 | 风险 | 建议 | 
| --- | --- | --- | --- | 
| 4.7 不得允许绕过变更管理流程 (RFC) 的操作，例如启动或停止实例、创建 S3 存储桶或 RDS 实例等。只要在分配的角色范围内执行操作，开发者模式账户和自助服务预置模式服务 (SSP) 就可以获得豁免。 | 是。自助操作的目的允许您绕过 AMS RFC 系统执行操作。 | 安全访问模式是 AMS 的核心技术方面，用于控制台或编程访问的 IAM 用户可以规避这种访问控制。AMS 变更管理不监控 IAM 用户的访问权限。访问权限 CloudTrail 仅限登录。 | IAM 用户应有时间限制，并根据最低权限向其授予权限。 need-to-know | 

**AMS-STD-003：网络安全**

<a name="AMS-STD-003"></a>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/managedservices/latest/onboardingguide/dcm-security-n-compliance.html)

**AMS-STD-007：日志记录**

<a name="AMS-STD-007"></a>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/managedservices/latest/onboardingguide/dcm-security-n-compliance.html)

与您的内部授权和身份验证团队合作，相应地控制直接更改模式角色的权限。

## 直接更改模式下的合规性
<a name="dcm-compliance"></a>

直接更改模式与生产和非生产工作负载兼容。您有责任确保遵守任何合规标准（例如 PHI、HIPAA、PCI），并确保直接变更模式的使用符合您的内部控制框架和标准。

# 直接更改模式下的变更管理
<a name="dcm-change-mgmt"></a>

变更管理是 AMS Advanced 用来实施变更请求的流程。变更请求 (RFC) 是由您或 AMS Advanced 通过 AMS Advanced 界面创建的对托管环境进行更改的请求，其中包含特定操作的 AMS 高级更改类型 (CT) ID。有关更多信息，请参阅[变更管理](https://docs.aws.amazon.com/managedservices/latest/userguide/ex-what-is.html)。

**注意**  
直接更改模式不会删除 AMS 变更管理 RFCs，您仍然可以使用 DCM 完全访问 AMS RFCs 。

AMS Direct Change 模式 (DCM) 通过提供对 AMS Advanced Plus 和高级账户的本机 AWS 访问权限来配置和更新 AWS 资源，从而扩展了 AMS 高级变更管理。通过 IAM 角色获得直接更改模式权限的用户可以使用原生 AWS API 访问权限在其 AMS Advanced 账户中配置和更改资源。用户仍然可以使用相同的 IAM 角色 RFCs 使用 AMS 高级变更管理。在这两种情况下，AMS 都完全支持资源及其更改，包括监控、补丁、备份、事件响应管理。在这些账户中没有适当角色的用户必须使用 AMS Advanced 变更管理 RFC 流程进行更改。

## 变更管理用例
<a name="dcm-cm-use-cases"></a>

出于安全考虑，AMS Advanced 中的某些更改只能通过变更管理变更申请 (RFC) 流程来完成。`AWSManagedServicesCloudFormationAdminRole`仅限于通过 CloudFormation (CFN) 采取的行动。有关如何通过 DCM 创建堆栈的更多信息，请参阅[使用 Direct Change 模式创建堆栈](https://docs.aws.amazon.com/managedservices/latest/userguide/dcm-creating-stacks.html)。`AWSManagedServicesUpdateRole`仅限于以下操作。

*[有关每种变更类型的演练，包括管理 \$1 托管账户 \$1 直接更改模式 \$1 启用 (ct-3rd4781c2nnhp) 变更类型，请参阅 “其他信息” 部分，了解按分类划分的 AMS 高级更改类型参考变更类型。](https://docs.aws.amazon.com/managedservices/latest/ctref/classifications.html)*

<a name="AMS-STD-007"></a>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/managedservices/latest/onboardingguide/dcm-change-mgmt.html)

# 使用 “直接更改” 模式创建堆栈
<a name="dcm-creating-stacks"></a>

为了让 AMS 管理堆栈`AWSManagedServicesCloudFormationAdminRole`，在 CloudFormation 使用中启动堆栈时有两个要求：
+ 模板必须包含`AmsStackTransform`。
+ 堆栈名称必须以前缀开头，`stack-`后跟一个 17 个字符的字母数字字符串。

**注意**  
要成功使用`AmsStackTransform`，您必须确认您的堆栈模板包含相应`CAPABILITY_AUTO_EXPAND`功能，以便 CloudFormation (CFN) 创建或更新堆栈。为此，您可以将`CAPABILITY_AUTO_EXPAND`作为创建堆栈请求的一部分传递。如果模板中包含此功能时未确认此功能，则 CFN 会拒绝该请求。`AmsStackTransform`如果您的模板中有转换，CFN 控制台可确保您通过此功能，但是当您通过 CFN 控制台与 CFN 进行交互时，可能会错过此功能。 APIs  
无论何时使用以下 CFN API 调用，都必须通过此功能：  
[CreateChangeSet](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_CreateChangeSet.html)
[ CreateStack](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_CreateStack.html#API_CreateStack_RequestParameters)
[UpdateStack](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_UpdateStack.html)

使用 DCM 创建或更新堆栈时，将在堆栈上执行 CFN Ingest 和堆栈更新的 CTs 相同验证和增强，有关更多信息，请参阅载[CloudFormation 入指南、最佳实践](https://docs.aws.amazon.com/managedservices/latest/appguide/cfn-author-templates.html)和限制。唯一的例外是，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 转型
<a name="dcm-cs-ams-transform"></a>

 在 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
```

## 堆栈名称
<a name="dcm-cs-stack-name"></a>

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

# 直接更改模式用例
<a name="dcm-use-cases"></a>

以下是直接更改模式的用例：

**通过以下方式提供和管理资源 CloudFormation**
+ 整合 CloudFormation基于现有工具和流程。

**持续的资源管理和更新**
+ 原子变化小，风险低。
+ 本来需要通过手动或自动 RFC 进行的更改。
+ 需要原生 AWS API 访问权限的工具。
+ 如果您处于迁移阶段，则可以使用 DCM 角色。迁移团队利用 DCM 的权限来创建或修改堆栈。
+ DCM 角色可以在 CI/CD 管道中用于构建新角色 AMIs、创建 Amazon ECS 任务等。