

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

# AWS Control Tower 如何使用角色来创建和管理账户
<a name="roles-how"></a>

一般而言，角色是 AWS中身份和访问管理（IAM）的一部分。有关 IAM 和中角色的一般信息 AWS，请参阅 [IAM *用户指南中的AWS IAM* 角色主题](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)。

## 角色和账户创建
<a name="roles-and-account-creation"></a>

AWS Control Tower 通过调用 AWS Organizations的 `CreateAccount` API 来创建客户的账户。 AWS Organizations 创建此账户时，它会在该账户中创建一个角色，AWS Control Tower 通过向 API 传递参数来命名该角色。角色的名称为 `AWSControlTowerExecution`。

AWS Control Tower 会接管 Account Factory 创建的所有账户的 `AWSControlTowerExecution` 角色。使用此角色，AWS Control Tower 可建立账户*基准*并实施强制性（和任何其他已启用的）控件，这会导致创建其他角色。进而可将这些角色用于其他服务，如 AWS Config。

**注意**  
为账户设置*基准*意味着为该账户配置资源，包括 [Account Factory 模板](https://docs.aws.amazon.com//controltower/latest/userguide/account-factory-considerations.html)（有时也称为*蓝图*）和控件。作为部署模板的一部分，基准建立过程还会在账户上设置集中式日志记录和安全审核角色。AWS Control Tower 基准包含在您应用于每个已注册账户的角色中。

有关账户和资源的更多信息，请参阅 [AWS 账户 在 AWS Control Tower 中简介](accounts.md)。

## AWS Control Tower 如何聚合非托管账户和账户 OUs 中的 AWS Config 规则
<a name="config-role-for-organizations"></a>
+  AWS Control Tower 管理账户创建了一个组织级聚合器，该聚合器可帮助检测外部 AWS Config 规则，因此 AWS Control Tower 无需访问非托管账户。AWS Control Tower 控制台显示您为给定账户创建了多少条外部创建的 AWS Config 规则。您可以在**账户详细信息**页面的**外部 Config 规则合规性**选项卡中查看有关这些外部规则的详细信息。
+  为了创建聚合器，AWS Control Tower 添加了一个角色，该角色具有描述组织并列出其下账户所需的权限。`AWSControlTowerConfigAggregatorRoleForOrganizations` 角色需要 `AWSConfigRoleForOrganizations` 托管策略以及与 `config.amazonaws.com` 的信任关系。

**注意**  
 *使用 landing zone 版本 4.0 的客户不需要此角色，因为 AWS Control Tower 已从现有的组织级配置聚合器迁移到与服务相关的配置聚合器* 

**注意**  
 当您在包含您的着陆区的组织上启用可信访问时，AWS Control Tower 可以为组织中的所有账户创建角色、管理资源和读取数据。通过可信访问权限，AWS Control Tower 可以访问组织中的任何账户或 OU，无论是已注册和注册，还是*未*注册*但未*注册。

以下是附加到该角色的 IAM 策略（JSON 构件）：

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
      "Statement": [
       {
        "Effect": "Allow",
        "Action": [
          "organizations:ListAccounts",
          "organizations:DescribeOrganization",
          "organizations:ListAWSServiceAccessForOrganization"
         ],
       "Resource": "*"
      }
    ]
  }
```

------

下面是 `AWSControlTowerConfigAggregatorRoleForOrganizations` 信任关系：

```
{
    "Version": "2012-10-17",		 	 	 
      "Statement": [
      {
        "Effect": "Allow",
        "Principal": {
        "Service": "config.amazonaws.com"
        },
        "Action": "sts:AssumeRole"
      }
    ]
  }
}
```

要在管理账户中部署此功能，需要在托管策略中添加以下权限`AWSControlTowerServiceRolePolicy`，该策略由`AWSControlTowerAdmin`角色在创建 AWS Config 聚合器时使用：

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
    "Statement": [
      {
        "Effect": "Allow",
        "Action": [
          "config:PutConfigurationAggregator",
          "config:DeleteConfigurationAggregator",
          "iam:PassRole"
          ],
        "Resource": [
          "arn:aws:iam::123456789012:role/service-role/AWSControlTowerConfigAggregatorRoleForOrganizations",
          "arn:aws:config:us-east-1:123456789012:config-aggregator/"
          ]
        },
      {
        "Effect": "Allow",
        "Action": "organizations:EnableAWSServiceAccess",
        "Resource": "*"
      }
    ]
}
```

------

已创建的新资源：`AWSControlTowerConfigAggregatorRoleForOrganizations` 和 `aws-controltower-ConfigAggregatorForOrganizations`

准备就绪后，您可以单独注册账户，也可以通过注册 OU 将其注册为组。注册账户后，如果您在中 AWS Config创建规则，AWS Control Tower 就会检测到新规则。聚合器显示外部规则的数量，并提供指向 AWS Config 控制台的链接，您可以在其中查看账户的每条外部规则的详细信息。使用 AWS Config 控制台和 AWS Control Tower 控制台中的信息来确定您是否针对账户启用了适当的控件。

## AWS Control Tower 审计账户的编程角色和信任关系
<a name="stacksets-and-roles"></a>

您可以登录审计账户并承担一个角色，以便以编程方式审查其他账户。审计账户不支持手动登录到其他账户。

通过某些仅授予 AWS Lambda 函数的角色，审计账户允许您以编程方式访问其他账户。出于安全考虑，这些角色与其他角色之间存在*信任关系*，这意味着使用这些角色的条件是严格定义的。

AWS Control Tower 堆栈 `StackSet-AWSControlTowerBP-BASELINE-ROLES` 会在审计账户中创建以下仅限编程的跨账户 IAM 角色：
+ **aws-控制塔-AdministratorExecutionRole**
+ **aws-控制塔-ReadOnlyExecutionRole**

AWS Control Tower 堆栈 `StackSet-AWSControlTowerSecurityResources` 会在审计账户中创建以下仅限编程的跨账户 IAM 角色：
+ **aws-控制塔-AuditAdministratorRole**
+ **aws-控制塔-AuditReadOnlyRole**

`ReadOnlyExecutionRole:` 请注意，此角色允许审计账户读取整个组织内 Amazon S3 存储桶中的对象（与之形成对比的是，`SecurityAudit` 策略仅允许访问元数据）。

**aws-控制塔-: AdministratorExecutionRole**
+ 拥有管理员权限
+ 无法从控制台担任
+ 只能由审计账户中的角色担任 - `aws-controltower-AuditAdministratorRole` 

以下构件显示了 `aws-controltower-AdministratorExecutionRole` 的信任关系。占位符号 `012345678901` 将替换为您的审计账户的 `Audit_acct_ID` 数字。

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::012345678901:role/aws-controltower-AuditAdministratorRole"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
```

**aws-控制塔-: AuditAdministratorRole**
+ 只能由 AWS Lambda 服务假设 
+ 有权对名称以字符串 **log** 开头的 Amazon S3 对象执行读取 (Get) 和写入 (Put) 操作

**附加策略：**

1. **AWSLambda执行**- AWS 托管策略

2。 **AssumeRole-aws-controltower-AuditAdministratorRole** — 内联策略 — 由 AWS Control Tower 创建，接下来是工件。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
	{
	"Action": [
		 "sts:AssumeRole"
		 ],
	"Resource": [
		 "arn:aws:iam::*:role/aws-controltower-AdministratorExecutionRole"
		 ],
	"Effect": "Allow"
	}
   ]
}
```

------

以下构件显示了 `aws-controltower-AuditAdministratorRole` 的信任关系：

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "lambda.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
```

**aws-控制塔-: ReadOnlyExecutionRole**
+ 无法从控制台担任
+ 只能由审计账户中的另一个角色担任 - `AuditReadOnlyRole`

以下构件显示了 `aws-controltower-ReadOnlyExecutionRole` 的信任关系。占位符号 `012345678901` 将替换为您的审计账户的 `Audit_acct_ID` 数字。

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::012345678901:role/aws-controltower-AuditReadOnlyRole "
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
```

**aws-控制塔-: AuditReadOnlyRole**
+ 只能由 AWS Lambda 服务假设
+ 有权对名称以字符串 **log** 开头的 Amazon S3 对象执行读取 (Get) 和写入 (Put) 操作

**附加策略：**

1. **AWSLambda执行**- AWS 托管策略

2。 **AssumeRole-aws-controltower-AuditReadOnlyRole** — 内联策略 — 由 AWS Control Tower 创建，接下来是工件。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
	{
	"Action": [
		"sts:AssumeRole"
	],
	"Resource": [
		"arn:aws:iam::*:role/aws-controltower-ReadOnlyExecutionRole"
	],
	"Effect": "Allow"
   }
  ]
}
```

------

以下构件显示了 `aws-controltower-AuditAdministratorRole` 的信任关系：

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "lambda.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
```

## 使用 IAM 角色自动预置账户
<a name="automated-provisioning"></a>

要以更自动化的方式配置 Account Factory 账户，您可以在 AWS Control Tower 管理账户中创建 Lambda 函数，该账户在成员账户中[**AWSControlTowerExecution**担任该角色](https://aws.amazon.com/premiumsupport/knowledge-center/lambda-function-assume-iam-role/)。然后，管理账户将使用此角色在每个成员账户中执行所需的配置步骤。

 如果使用 Lambda 函数预置账户，则执行此工作的身份必须具有以下 IAM 权限策略以及 `AWSServiceCatalogEndUserFullAccess`。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AWSControlTowerAccountFactoryAccess",
            "Effect": "Allow",
            "Action": [
                "sso:GetProfile",
                "sso:CreateProfile",
                "sso:UpdateProfile",
                "sso:AssociateProfile",
                "sso:CreateApplicationInstance",
                "sso:GetSSOStatus",
                "sso:GetTrust",
                "sso:CreateTrust",
                "sso:UpdateTrust",
                "sso:GetPeregrineStatus",
                "sso:GetApplicationInstance",
                "sso:ListDirectoryAssociations",
                "sso:ListPermissionSets",
                "sso:GetPermissionSet",
                "sso:ProvisionApplicationInstanceForAWSAccount",
                "sso:ProvisionApplicationProfileForAWSAccountInstance",
                "sso:ProvisionSAMLProvider",
                "sso:ListProfileAssociations",
                "sso-directory:ListMembersInGroup",
                "sso-directory:AddMemberToGroup",
                "sso-directory:SearchGroups",
                "sso-directory:SearchUsers",
                "sso-directory:CreateUser",
                "sso-directory:DescribeGroups",
                "sso-directory:DescribeDirectory",
                "sso-directory:GetUserPoolInfo",
                "controltower:CreateManagedAccount",
                "controltower:DescribeManagedAccount",
                "controltower:DeregisterManagedAccount",
                "s3:GetObject",
                "organizations:describeOrganization",
                "sso:DescribeRegisteredRegions"
            ],
            "Resource": "*"
        }
    ]
}
```

------

AWS C `sso:GetPeregrineStatus` on `sso:ProvisionApplicationInstanceForAWSAccount` trol Tower A `sso:ProvisionSAMLProvide` ccount Factory 需要权限`sso:ProvisionApplicationProfileForAWSAccountInstance`、、和才能与 AWS IAM 身份中心进行交互。