8.9 创建 IAM 策略并将 IAM 用户指派给该策略

要使用 PlateSpin Migrate 将工作负载迁移到 AWS,您的 AWS 帐户中需要有一个具有适当的 IAM 角色以及必要的许可权限的 AWS 身份和访问管理 (IAM) 用户,才能执行到 AWS VPC 的迁移操作。此外,还需要此用户的 AWS 访问密钥和 AWS 机密访问密钥。

您可通过以下方式之一创建新的 IAM 策略:

8.9.1 使用 AWS 角色工具创建新的 IAM 策略

PlateSpin Migrate 提供 AWS 角色工具 (AWSRoleTool.exe),使管理员用户能够基于 PlateSpin Migrate 定义的默认策略 (PolicyJSON.txt) 创建新的 IAM 策略,并将 IAM 用户(现有用户或新用户)指派给该策略。PlateSpin Migrate AWS 角色工具 (AWSRoleTool.exe) 包含在 Migrate-Install-folder\PlateSpin Migrate Server\bin\AWSRolesTool 目录中。

默认情况下,PlateSpin Migrate 定义的 PolicyJSON.txt 文件包含 IAM 用户使用 PlateSpin Migrate 将工作负载迁移到 AWS 所需的最低许可权限。有关在默认策略中为 IAM 用户定义的最低许可权限的信息,请参见部分 8.9.3, 定义 IAM 用户的最低许可权限

使用 AWS 角色工具创建新策略时,该新策略将作为此默认策略的复本创建,并且包含默认策略中所列的所有许可权限。但是,您可以选择创建包含修改的许可权限,而不是默认策略中所列许可权限的新策略。要创建包含修改的许可权限的新策略,必须编辑 PolicyJSON.txt 文件以便仅列出您要列在新策略中的许可权限,然后创建该策略。

注:如果您已编辑 PolicyJSON.txt 文件但想要恢复 PlateSpin Migrate 定义的默认策略,请删除已编辑的 PolicyJSON.txt 文件。运行 AWS 角色工具时,将使用 Migrate-Install-folder\PlateSpin Migrate Server\bin\AWSRolesTool 目录中的默认许可权限重创建 PolicyJSON.txt 文件。

  1. 以管理员身份登录 PlateSpin Migrate 服务器主机。

  2. 打开命令提示符并导航到 AWS 角色工具所在的位置,然后运行以下命令:

    AWSRoleTool.exe

    注:如果 Migrate-Install-folder\PlateSpin Migrate Server\bin\AWSRolesTool 目录中未提供默认策略 (PolicyJSON.txt),该工具将使用 PlateSpin Migrate 推荐的默认许可权限重创建 PolicyJSON.txt 文件。

  3. 输入有权创建 IAM 策略和用户的 AWS 用户的 AWS 访问密钥与 AWS 机密访问密钥。

  4. 输入要创建的 AWS 策略的名称。

  5. 输入您要为其指派此策略的新用户或现有用户的名称。该工具会以 PolicyJSON.txt 文件的复本创建新策略、将该策略指派给指定的用户,并提供用户的访问密钥和机密密钥身份凭证。

  6. 您可以选择将身份凭证保存到某个文件,或者在命令提示符下显示身份凭证:

    • 要将身份凭证保存到某个文件,请输入 y。将显示包含身份凭证的文件的路径。

    • 要在命令提示符下显示身份凭证,请输入 n 并记下显示的身份凭证。

  7. (可选)要恢复 PlateSpin Migrate 定义的默认策略,请删除已编辑的 PolicyJSON.txt 文件,并运行 AWS 角色工具来重创建包含默认许可权限的 PolicyJSON.txt 文件。

8.9.2 使用 AWS 管理控制台创建 IAM 策略

您可以使用 AWS 管理控制台来创建或编辑 IAM 策略,并通过将用户指派给策略来定义用户许可权限。请参见 Creating IAM Policies(创建 IAM 策略)

PlateSpin Migrate 提供了一个默认策略 (PolicyJSON.txt),其中包含 IAM 用户使用 PlateSpin Migrate 将工作负载迁移到 AWS 所需的最低许可权限。有关在默认策略文件中为 IAM 用户定义的最低许可权限的信息,请参见部分 8.9.3, 定义 IAM 用户的最低许可权限

您可以使用 AWS 管理控制台来创建包含此默认策略中所含建议许可权限的新策略。

8.9.3 定义 IAM 用户的最低许可权限

PlateSpin Migrate 提供了一个 PolicyJSON.txt 文件,其中默认包含 IAM 用户使用 PlateSpin Migrate 将工作负载迁移到 AWS 所需的最低许可权限。使用 AWS 角色工具创建新策略时,该新策略将作为此默认策略的复本创建,并且包含默认策略中所列的所有许可权限。

PolicyJSON.txt 文件的内容如下:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "ec2:TerminateInstances",
                "ec2:DeleteTags",
                "ec2:StartInstances",
                "ec2:CreateTags",
                "kms:DescribeKey",
                "ec2:RunInstances",
                "ec2:StopInstances"
            ],
            "Resource": [
                "arn:aws:kms:*:*:key/*",
                "arn:aws:ec2:*:*:subnet/*",
                "arn:aws:ec2:*:*:instance/*",
                "arn:aws:ec2:*:*:volume/*",
                "arn:aws:ec2:*:*:security-group/*",
                "arn:aws:ec2:*:*:network-interface/*",
                "arn:aws:ec2:*::image/*"
            ]
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": [
                "ec2:DeregisterImage",
                "ec2:DeleteSnapshot",
                "ec2:DescribeInstances",
                "ec2:CreateImage",
                "ec2:DescribeSnapshots",
                "ec2:DescribePlacementGroups",
                "ec2:DescribeSecurityGroups",
                "pricing:GetProducts",
                "ec2:DescribeImages",
                "ec2:DescribeAvailabilityZones",
                "ec2:DescribeVpcs",
                "ec2:DescribeVolumes",
                "kms:ListAliases",
                "ec2:DescribeAccountAttributes",
                "ec2:DescribeReservedInstances",
                "ec2:ModifyInstanceAttribute",
                "ec2:DescribeSubnets",
                "ec2:DescribeKeyPairs",
                "ec2:DescribeInstanceStatus"
            ],
            "Resource": "*"
        },
        {
            "Sid": "VisualEditor2",
            "Effect": "Allow",
            "Action": [
                "kms:Decrypt",
                "kms:Encrypt",
                "ec2:CreateVolume"
            ],
            "Resource": [
                "arn:aws:ec2:*:*:volume/*",
                "arn:aws:kms:*:*:key/*"
            ]
        },
        {
            "Sid": "VisualEditor3",
            "Effect": "Allow",
            "Action": [
                "ec2:AttachVolume",
                "kms:CreateGrant"
            ],
            "Resource": [
                "arn:aws:ec2:*:*:instance/*",
                "arn:aws:ec2:*:*:volume/*",
                "arn:aws:kms:*:*:key/*"
            ]
        },
        {
            "Sid": "VisualEditor4",
            "Effect": "Allow",
            "Action": "ec2:DetachVolume",
            "Resource": [
                "arn:aws:ec2:*:*:instance/*",
                "arn:aws:ec2:*:*:volume/*"
            ]
        },
        {
            "Sid": "VisualEditor5",
            "Effect": "Allow",
            "Action": "ec2:DeleteVolume",
            "Resource": "arn:aws:ec2:*:*:volume/*"
        },
        {
            "Sid": "VisualEditor6",
            "Effect": "Allow",
            "Action": "ec2:RunInstances",
            "Resource": [
                "arn:aws:ec2:*:*:subnet/*",
                "arn:aws:ec2:*:*:key-pair/*",
                "arn:aws:ec2:*:*:instance/*",
                "arn:aws:ec2:*::snapshot/*",
                "arn:aws:ec2:*:*:launch-template/*",
                "arn:aws:ec2:*:*:volume/*",
                "arn:aws:ec2:*:*:security-group/*",
                "arn:aws:ec2:*:*:placement-group/*",
                "arn:aws:ec2:*:*:network-interface/*",
                "arn:aws:ec2:*::image/*"
            ]
        }
    ]
}