AWS Server Migration Service
用户指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

配置 AWS SMS 权限和角色

以下权限和角色先决条件适用于 AWS SMS 支持的任一平台。

配置 AWS SMS 的用户权限

如果已为您的 IAM 用户账户、组或角色分配管理员权限,则您已经可以访问 AWS SMS。要使用没有您的 AWS 账户的管理访问权限的 IAM 用户的凭证调用 AWS SMS API,请执行以下操作:

  • 创建一个由以下 JSON 代码定义的自定义内联策略。

  • 将其应用于 IAM 用户。

{ "Version":"2012-10-17", "Statement":[ { "Action":[ "sms:*" ], "Effect":"Allow", "Resource":"*" }, { "Action":[ "cloudformation:ListStacks", "cloudformation:DescribeStacks", "cloudformation:DescribeStackResources" ], "Effect":"Allow", "Resource":"*" }, { "Action":[ "s3:ListAllMyBuckets", "s3:GetObject" ], "Effect":"Allow", "Resource":"*" }, { "Action":[ "ec2:DescribeKeyPairs", "ec2:DescribeVpcs", "ec2:DescribeSubnets", "ec2:DescribeSecurityGroups" ], "Effect":"Allow", "Resource":"*" }, { "Action":"iam:PassRole", "Resource":"*", "Effect":"Allow", "Condition":{ "StringLike":{ "iam:AssociatedResourceArn":"arn:aws:cloudformation:*:*:stack/sms-app-*/*" } } } ] }

注意

如果您使用多个连接器,我们建议您为每个连接器创建唯一的 IAM 角色,以避免出现单点故障。

为 服务器迁移连接器 配置 IAM 用户

在您的账户中为 服务器迁移连接器 创建 IAM 用户

  1. 为您的连接器创建新的 IAM 用户,以便与 AWS 通信。保存生成的访问密钥和私有密钥以便在初始连接器设置期间使用。有关管理 IAM 用户和权限的信息,请参阅在您的 AWS 账户中创建 IAM 用户

  2. 将托管的 IAM 策略 ServerMigrationConnector 附加到 IAM 用户。有关更多信息,请参阅托管策略与内联策略

为 AWS SMS 配置服务角色

使用以下过程之一创建 IAM 角色,该角色向 AWS SMS 授予将迁移的资源放入 Amazon EC2 账户的权限。在提供 IAM 角色模板的 AWS 区域中,可以使用选项 1。如果您发现 AWS 区域中没有 AWS Server Migration Service 的模板,请继续执行选项 2。

选项 1:使用模板创建 AWS SMS IAM 角色

  1. 通过以下网址打开 IAM 控制台:https://console.amazonaws.cn/iam/

  2. 在导航窗格中,选择 RolesCreate role

  3. Choose the service that will use this role (选择将使用此角色的服务) 下,依次选择 SMSNext: Permissions (下一步: 权限)

  4. Attached permissions policies (附加的权限策略) 下,确认策略 ServerMigrationServiceRole 可见并选择 Next: Review (下一步: 审核)

  5. Review (审核) 下面,为 Role name (角色名称) 输入 sms

    注意

    或者,您也可以应用不同的名称。不过,每次创建复制作业或应用程序时,您必须明确指定角色名称。

  6. 选择创建角色。您现在应在可用角色列表中看到 sms 角色。

在不提供 IAM 角色模板的 AWS 区域中,请使用下文的选项。此选项也可以在所有区域中用作选项 1 的手动替代项。

选项 2:手动创建 AWS SMS IAM 角色

  1. 创建一个名为 trust-policy.json 的本地文件,其中包含以下内容:

    { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "sms.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "sts:ExternalId": "sms" } } } ] }
  2. 创建一个名为 role-policy.json 的本地文件,其中包含以下内容:

    { "Version":"2012-10-17", "Statement":[ { "Action":[ "cloudformation:CreateChangeSet", "cloudformation:CreateStack", "cloudformation:DeleteStack", "cloudformation:ExecuteChangeSet" ], "Resource":"arn:aws:cloudformation:*:*:stack/sms-app-*/*", "Effect":"Allow", "Condition":{ "ForAllValues:StringLikeIfExists":{ "cloudformation:ResourceTypes":[ "AWS::EC2::*" ] } } }, { "Action":[ "cloudformation:DeleteChangeSet", "cloudformation:DescribeChangeSet", "cloudformation:DescribeStackEvents", "cloudformation:DescribeStackResources", "cloudformation:GetTemplate" ], "Resource":"arn:aws:cloudformation:*:*:stack/sms-app-*/*", "Effect":"Allow" }, { "Action":[ "cloudformation:DescribeStacks", "cloudformation:ValidateTemplate", "cloudformation:DescribeStackResource", "s3:ListAllMyBuckets" ], "Resource":"*", "Effect":"Allow" }, { "Action":[ "s3:CreateBucket", "s3:DeleteBucket", "s3:DeleteObject", "s3:GetBucketAcl", "s3:GetBucketLocation", "s3:GetObject", "s3:ListBucket", "s3:PutObject", "s3:PutObjectAcl", "s3:PutLifecycleConfiguration", "s3:ListAllMyBuckets" ], "Resource":"arn:aws:s3:::sms-app-*", "Effect":"Allow" }, { "Action":[ "sms:CreateReplicationJob", "sms:DeleteReplicationJob", "sms:GetReplicationJobs", "sms:GetReplicationRuns", "sms:GetServers", "sms:ImportServerCatalog", "sms:StartOnDemandReplicationRun", "sms:UpdateReplicationJob" ], "Resource":"*", "Effect":"Allow" }, { "Action":[ "ec2:ModifySnapshotAttribute", "ec2:CopySnapshot", "ec2:CopyImage", "ec2:Describe*", "ec2:DeleteSnapshot", "ec2:DeregisterImage", "ec2:CreateTags", "ec2:DeleteTags" ], "Resource":"*", "Effect":"Allow" }, { "Action":"iam:GetRole", "Resource":"*", "Effect":"Allow" }, { "Action":"iam:PassRole", "Resource":"*", "Effect":"Allow", "Condition":{ "StringLike":{ "iam:AssociatedResourceArn":"arn:aws:cloudformation:*:*:stack/sms-app-*/*" } } } ] }
  3. 在命令提示符处,转到存储两个 JSON 策略文件的目录,并运行以下命令来创建 AWS SMS 服务角色:

    aws iam create-role --role-name sms --assume-role-policy-document file://trust-policy.json aws iam put-role-policy --role-name sms --policy-name sms --policy-document file://role-policy.json

注意

您的 AWS CLI 用户必须对 IAM 拥有权限。可通过将 IAMFullAccess 托管策略附加到 AWS CLI 用户来授予这些权限。有关管理 IAM 用户和权限的信息,请参阅在您的 AWS 账户中创建 IAM 用户

为 AWS SMS 配置启动角色

如果您计划启动应用程序,则需要 AWS SMS 启动角色。您需要使用 PutAppLaunchConfiguration API 分配此角色。调用 LaunchApp API 时,AWS CloudFormation 将使用该角色。

使用以下过程之一配置此角色。在不提供 AWS SMS 启动角色模板的 AWS 区域中使用选项 2,或者在所有区域中将选项 2 用作选项 1 的手动替代项。

选项 1:使用模板创建 AWS SMS 启动角色

  1. 通过以下网址打开 IAM 控制台:https://console.amazonaws.cn/iam/

  2. 在导航窗格中,选择 RolesCreate role

  3. Choose the service that will use this role (选择将使用此角色的服务) 下,依次选择 CloudFormationNext: Permissions (下一步: 权限)

  4. Attached permissions policies (附加的权限策略) 下,确认策略 ServerMigrationServiceLaunchRole 可见并选择 Next: Review (下一步: 审核)

  5. Review (审核) 下面,为 Role name (角色名称) 输入 sms-launch

    注意

    或者,您也可以应用不同的名称。不过,每次为应用程序创建启动配置时,您必须明确指定角色名称。

  6. 选择创建角色。您现在应在可用角色列表中看到 sms-launch 角色。

选项 2:手动创建 AWS SMS 启动角色

  1. 创建一个名为 trust-policy.json 的本地文件,其中包含以下内容:

    { "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Principal":{ "Service":"cloudformation.amazonaws.com" }, "Action":"sts:AssumeRole" } ] }
  2. 创建一个名为 role-policy.json 的本地文件,其中包含以下内容:

    { "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "ec2:ModifyInstanceAttribute", "ec2:StopInstances", "ec2:StartInstances", "ec2:TerminateInstances" ], "Resource":"*", "Condition":{ "ForAllValues:StringLike":{ "ec2:ResourceTag/aws:cloudformation:stack-id":"arn:aws:cloudformation:*:*:stack/sms-app-*/*" } } }, { "Effect":"Allow", "Action":"ec2:CreateTags", "Resource":"arn:aws:ec2:*:*:instance/*" }, { "Effect":"Allow", "Action":[ "ec2:RunInstances", "ec2:Describe*" ], "Resource":"*" } ] }
  3. 在命令提示符处,转到存储两个 JSON 策略文件的目录,并运行以下命令来创建 AWS SMS 服务角色:

    aws iam create-role --role-name sms-launch --assume-role-policy-document file://trust-policy.json aws iam put-role-policy --role-name sms-launch --policy-name sms --policy-document file://role-policy.json