教程:创建和配置组织
在本教程中,您将创建组织并为其配置两个 AWS 成员账户。您可以在组织中创建其中一个成员账户,然后邀请另一个账户加入您的组织。接下来,您可以使用允许列表方法指定账户管理员只能委派明确列出的服务和操作。这使得管理员可以先验证 AWS 引入的任何新服务,然后才允许由公司中的任何其他人使用。这样,如果 AWS 引入新服务,它将保持被禁止的状态,直至管理员将该服务添加到相应策略的允许列表中。本教程还为您演示如何使用拒绝列表来确保成员账户中的任何用户都无法更改 AWS CloudTrail 创建的审核日志的配置。
下图演示了本教程的主要步骤。
本教程中的任何步骤都不会在 AWS 账单中产生费用。AWS Organizations 是一项免费服务。
先决条件
本教程假设您有权访问两个现有的AWS 账户(在本教程中将创建第三个),并且可以使用管理员身份登录各个账户。
教程使用的账户如下:
-
111111111111
– 您用于创建组织的账户。此账户将成为管理账户。此账户的所有者的电子邮件地址为 OrgAccount111@example.com
。
-
222222222222
– 您邀请作为成员账户加入组织的账户。此账户的所有者的电子邮件地址为 member222@example.com
。
-
333333333333
– 您作为组织成员创建的账户。此账户的所有者的电子邮件地址为 member333@example.com
。
使用与您的测试账户关联的值替换以上值。我们建议您不要为本教程使用生产账户。
步骤 1:创建组织
在此步骤中,您将以管理员身份登录账户 111111111111,使用该账户作为管理账户创建组织,然后邀请现有账户 222222222222 作为成员账户加入。
- AWS Management Console
-
-
以账户 111111111111 的管理员身份登录AWS,并打开 AWS Organizations 控制台。
-
在介绍页面上,选择 Create an organization (创建组织)。
-
在确认对话框中,选择 Create an organization (创建组织)。
默认情况下,组织在创建时已启用所有功能。您也可以创建自己的组织并仅启用整合账单功能。
AWS创建组织,并向您显示AWS 账户页面。如果您在其他页面上,请在左侧的导航窗格中选择AWS 账户。
如果您使用的账户使用未经过AWS验证的电子邮件地址,则验证电子邮件自动发送至您的管理账户关联的地址。在您接收到验证电子邮件之前可能会有一段延迟。
-
在 24 小时内验证您的电子邮件地址。有关更多信息,请参阅 AWS Organizations 的电子邮件地址验证。
您现在拥有一个组织,并且您的账户是其唯一成员。这是组织的管理账户。
邀请现有账户加入组织
现在您已拥有一个组织,您可以开始向其中填充账户。在本部分的步骤中,您将邀请现有账户作为组织成员加入。
- AWS Management Console
-
邀请现有账户加入
-
导航到AWS 账户页面,然后选择 Add an AWS 账户 (添加亚马逊云科技账户)。
-
在添加 AWS 账户页面上,选择邀请现有 AWS 账户。
-
在 Email address or account ID of an AWS 账户 to invite (待邀请亚马逊云科技账户的电子邮件地址和账户 ID) 框中,输入待邀请账户的拥有者的电子邮件地址,类似于以下内容:member222@example.com
。或者,如果您知道 AWS 账户 ID 号,可以将其输入。
-
在 Message to include in the invitation email message (要包含在邀请电子邮件中的信息) 框中键入所需的任何文本。此文本会包含在发送到账户所有者的电子邮件中。
-
选择 Send invitation (发送邀请)。AWS Organizations 向账户拥有者发送邀请。
如果有错误消息指示,请将其展开。如果错误指示您超出了组织的账户限制或因组织仍在初始化而无法添加账户,请在创建组织后等待一个小时,然后重试。如果错误仍然存在,请联系 AWS Support。
-
对于本教程,您现在需要接受自己的邀请。执行以下操作之一可在控制台中打开 Invitations 页面:
-
在AWS 账户页面上,选择 Accept (接受),然后选择 Confirm (确认)。
邀请回执可能会延迟,在您能接受邀请前,可能需要等待一段时间。
-
注销成员账户,然后以管理账户管理员的身份登录。
创建成员账户
在本部分的步骤中,您将创建一个自动成为组织成员的AWS 账户。在本教程中,我们将此账户称为 333333333333。
- AWS Management Console
-
创建成员账户
-
在 AWS Organizations 控制台的AWS 账户页面上,选择 Add AWS 账户 (添加亚马逊云科技账户)。
-
在 Add an AWS 账户 (添加亚马逊云科技账户) 页面上,选择 Create an AWS 账户 (创建亚马逊云科技账户)。
-
对于 AWS 账户 name (亚马逊云科技账户名称),输入账户的名称,例如 MainApp
Account
。
-
对于 Email address of the account's root user (账户根用户的电子邮件),输入代表账户接收通信的人员的电子邮件地址。此值必须全局唯一。任何两个账户不能具有相同的电子邮件地址。例如,您可能会使用类似于 mainapp@example.com
的内容。
-
对于 IAM role name,您可以将此处留空以自动使用 OrganizationAccountAccessRole
的默认角色名称,也可以提供自己的名称。此角色使您在以管理账户中 IAM 用户的身份登录时能够访问新成员账户。对于本教程,将此字段留空可指示 AWS Organizations 创建具有默认名称的角色。
-
选择 Create AWS 账户 (创建亚马逊云科技账户)。您可能需要等待片刻再刷新页面,才能看到新账户显示在AWS 账户页面上。
如果您收到一个错误,它指明您超出了组织的账户限制或因组织仍在初始化而无法添加账户,请在创建组织后等待一个小时,然后重试。如果错误仍然存在,请联系 AWS Support。
步骤 2:创建组织单元
在本部分的步骤中,您将创建组织部门 (OU) 并放入成员账户。在完成后,您的层次结构类似于下图所示。管理账户将保留在根中。一个成员账户移动到 Production OU,另一个成员账户移动到 MainApp OU,这是 Production 的子级。
- AWS Management Console
-
创建和填充 OU
在随后的步骤中,您可以与对象交互,您可以选择对象本身的名称或对象旁边的单选按钮。
后续步骤会让您选择单选按钮,以便您随后可以通过选择菜单来对关联的对象执行操作。
-
在 AWS Organizations 控制台中,导航到AWS 账户页面。
-
选中 Root (根) 容器旁的复选框
。
-
选择操作下拉列表,然后在组织单位中,选择新建。
-
在 Create organizational unit in Root (在根中创建组织部门) 页面上,为 Organizational unit name (组织部门名称) 输入 Production
,然后选择 Create organizational unit (创建组织部门)。
-
选中您的新 Production OU 旁边的复选框
。
-
选择 Actions (操作),然后在 Organizational unit (组织部门) 中,选择 Create new (新建)。
-
在 Create organizational unit in Production (在生产中创建组织部门) 页面上,为次要 OU 名称输入 MainApp
,然后选择 Create organizational unit (创建组织部门)。
现在,您可以将成员账户移动到这些 OU 中。
-
返回到AWS 账户页面,然后选择 Production OU 旁边的三角形
,以展开该 OU 的树形图。这将 MainAppOU 显示为 Production (生产) 的子级。
-
在 333333333333 旁边,选中复选框
(而不是其名称),选择操作,然后在 AWS 账户 下选择移动。
-
在移动 AWS 账户 '333333333333' 页面上,选择生产旁边的三角形将其展开。在 MainApp 旁边,选择单选按钮
(而不是其名称),然后选择移动 AWS 账户。
-
在 222222222222 旁边,选中复选框
(而不是其名称),选择操作,然后在 AWS 账户 下选择移动。
-
在移动 AWS 账户 '222222222222' 页面上,在生产旁边选择单选按钮(而不是其名称),然后选择移动 AWS 账户。
步骤 3:创建服务控制策略
在本部分的步骤中,您将创建三个服务控制策略 (SCP) 并将其附加到根和 OU,用于限制组织账户中的用户所能执行的操作。第一个 SCP 防止任何成员账户中的任何人创建或修改您配置的任何 AWS CloudTrail 日志。管理账户不受任何 SCP 的影响,因此在应用 CloudTrail SCP 之后,您必须从管理账户创建任何日志。
在根中为组织启用服务控制策略类型
您必须先为组织启用策略类型,然后才能附加任何类型的策略到该根或根中的任何 OU。默认情况下未启用策略类型。本部分的步骤将向您演示如何为组织启用服务控制策略 (SCP) 类型。
- AWS Management Console
-
创建 SCP
现在,您的组织中已启用服务控制策略,您可以创建本教程所需的三个策略。
- AWS Management Console
-
创建阻止 CloudTrail 配置操作的第一个 SCP
-
导航到策略页面,然后选择服务控制策略。
-
在 Service control policies (服务控制策略) 页面上,选择 Create policy (创建策略)。
-
对于 Policy name,输入 Block
CloudTrail Configuration Actions
。
-
在策略部分右侧的服务列表中,选择服务的 CloudTrail。然后选择以下操作::AddTags、CreateTrail、DeleteTrail、RemoveTags、StartLogging、StopLogging 和 UpdateTrail。
-
仍在右侧窗格中,选择添加资源并指定 CloudTrail 和所有资源。选择添加资源。
左侧的策略语句应与以下内容类似。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1234567890123",
"Effect": "Deny",
"Action": [
"cloudtrail:AddTags",
"cloudtrail:CreateTrail",
"cloudtrail:DeleteTrail",
"cloudtrail:RemoveTags",
"cloudtrail:StartLogging",
"cloudtrail:StopLogging",
"cloudtrail:UpdateTrail"
],
"Resource": [
"*"
]
}
]
}
-
选择创建策略。
第二条策略定义一个允许列表,其中包含您要为生产 OU 中的用户和角色启用的所有服务和操作。完成后,生产 OU 中的用户只能 访问列出的服务和操作。
- AWS Management Console
-
创建第二个策略,该策略将允许生产 OU 的已批准服务
-
在 Service control policies (服务控制策略) 页面上,选择 Create policy (创建策略)。
-
对于 Policy name,输入 Allow
List for All Approved Services
。
-
将光标置于 Policy (策略) 部分的右窗格中,并粘贴一个与以下内容类似的策略。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1111111111111",
"Effect": "Allow",
"Action": [
"ec2:*",
"elasticloadbalancing:*",
"codecommit:*",
"cloudtrail:*",
"codedeploy:*"
],
"Resource": [ "*" ]
}
]
}
-
选择创建策略。
最后一条策略提供了阻止在 MainApp OU 中使用的服务的拒绝列表。对于本教程,您需要阻止 MainApp OU 中的任何账户访问 Amazon DynamoDB。
- AWS Management Console
-
创建第三条策略,将拒绝访问不能在 MainApp OU 中使用的服务
-
在 Service control policies (服务控制策略) 页面上,选择 Create policy (创建策略)。
-
对于 Policy name,输入 Deny
List for MainApp Prohibited Services
。
-
在左侧的 Policy (策略) 部分中,选择服务的 Amazon DynamoDB。对于操作,选择 All actions (所有操作)。
-
仍在左侧窗格中,选择 Add resource (添加资源) 并指定 DynamoDB 和 All Resources (所有资源)。选择添加资源。
右侧的策略语句将更新为与以下内容类似的内容。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Action": [ "dynamodb:*" ],
"Resource": [ "*" ]
}
]
}
-
选择 Create policy (创建策略) 保存 SCP。
将 SCP 附加到您的 OU
现在已经存在 SCP 并且为您的根启用了这些策略,您可以将它们附加到根和 OU。
- AWS Management Console
-
将策略附加到根和 OU
-
导航到AWS 账户页面。
-
在AWS 账户页面上,选择 Root (根)(其名称,而不是单选按钮)导航到其详细信息页面。
-
在 Root (根) 详细信息页面上,选择 Policies (策略) 选项卡,然后在 Service Control Policies (服务控制策略) 下,选择 Attach (附加)。
-
在 Attach a service control policy (附加服务控制策略) 页面上,选择名为 Block
CloudTrail Configuration Actions
的 SCP 旁边的单选按钮,然后选择 Attach (附加)。在本教程中,您会将其附加到根,这样它会影响所有成员账户,阻止任何人变更 CloudTrail 的配置方式。
Root (根) 详细信息页面、Policies (策略) 选项卡显示有两个 SCP 已经附加到了根:您刚刚附加的一个以及默认的 FullAWSAccess
SCP。
-
导航回AWS 账户页面,然后选择 Production OU(它的名称,而不是单选按钮)导航到其详细信息页面。
-
在 Production OU 的详细信息页面上,选择 Policies (策略) 选项卡。
-
在 Service Control Policies (服务控制策略) 下,选择 Attach (附加)。
-
在 Attach a service control policy (附加服务控制策略) 页面上,选择 Allow List for All
Approved Services
旁边的单选按钮,然后选择 Attach (附加)。这允许 Production OU 的成员账户中的用户或角色访问批准的服务。
-
选择 Policies (策略) 选项卡,可以看到有两个 SCP 已附加到 OU:您刚刚附加的一个以及默认的 FullAWSAccess
SCP。但是,由于 FullAWSAccess
SCP 同时也是允许所有服务和操作的允许列表,您现在必须分离此 SCP 以确保只允许您批准的服务。
-
要从 Production OU 删除默认策略,请选择单选按钮 FullAWSAccess,选择 Detach (分离),然后在确认对话框中选择 Detach policy (分离策略)。
删除此默认策略之后,Production OU 下的所有成员账户都将立即失去对不在允许列表 SCP(您已在前一步中附加)中的所有操作和服务的访问权。任何使用未包含在所有批准服务的允许列表 SCP 中的操作的请求都将被拒绝。即使账户中的管理员通过将 IAM 权限策略附加到其中一个成员账户中的用户来授予对其他服务的访问权限,情况依然如此。
-
现在,您可以附加名为 Deny List for MainApp
Prohibited services
的 SCP,以防止 MainApp OU 的账户中的任何人使用任何受限制服务。
要执行此操作,请导航到AWS 账户页面上,选择三角形图标以展开 Production 的分支,然后选择 MainAppOU(它的名称,而不是单选按钮)以导航到其内容。
-
在 MainApp 详细信息页面上,选择 Policies (策略) 选项卡。
-
在 Service Control Policies (服务控制策略) 下,选择 Attach (附加),然后在可用策略列表中,选择 Deny List for MainApp Prohibited Services (MainApp 禁止的服务的拒绝列表) 旁边的单选按钮,然后选择 Attach policy (附加策略)。
步骤 4:测试组织的策略
现在,您可以使用任何成员账户中的用户身份登录,并尝试执行各种 AWS 操作:
-
如果您以管理账户中用户的身份登录,则可以执行您的 IAM 权限策略允许的任何操作。SCP 不会影响管理账户中的任何用户或角色,不论账户位于哪个根或 OU 中。
-
如果您以 222222222222 账户中的用户身份登录,则可以执行允许列表允许的任何操作。AWS Organizations 拒绝尝试执行允许列表中未列出的任何服务的操作。此外,AWS Organizations 拒绝尝试执行 CloudTrail 配置操作之一。
-
如果您以 333333333333 账户中的用户身份登录,则可以执行允许列表允许且拒绝列表未阻止的任何操作。AWS Organizations 将拒绝尝试执行允许列表策略中未列出的任何操作,并拒绝尝试执行拒绝列表策略中列出的任何操作。此外,AWS Organizations 拒绝尝试执行 CloudTrail 配置操作之一。