

# 教程：将 BYOIP IPv4 CIDR 传输到 IPAM
<a name="tutorials-byoip-ipam-transfer-ipv4"></a>

按照以下步骤将现有的 IPv4 CIDR 传输到 IPAM。如果您已拥有 AWS 的 IPv4 BYOIP CIDR，则可以将 CIDR 从公有 IPv4 池移动到 IPAM。您不能将 IPv6 CIDR 移动到 IPAM。

本教程假定您已使用[在 Amazon EC2 中使用您自己的 IP 地址（BYOIP）](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-byoip.html)中所述的过程，成功将 IP 地址范围带到 AWS，并且您现在希望将该 IP 地址范围转移到 IPAM。如果您是第一次将新 IP 地址引入 AWS，请完成 [教程：将 IP 地址带入 IPAM](tutorials-byoip-ipam.md) 中的步骤。

如果您将公有 IPv4 池转移到 IPAM，则不会影响现有分配。将公有 IPv4 池转移到 IPAM 后，根据资源类型，您可能能够监控现有分配。有关更多信息，请参阅 [按资源监控 CIDR 使用情况](monitor-cidr-compliance-ipam.md)。

**注意**  
本教程假设您已完成 [创建 IPAM](create-ipam.md) 中的步骤。
本教程的每个步骤都必须由以下两个 AWS 账户之一完成：  
IPAM 管理员的账户。在本教程中，此账户将被称为 IPAM 账户。
您的组织中拥有 BYOIP CIDR 的账户。在本教程中，此账户将被称为 BYOIP CIDR 拥有者账户。

**Topics**
+ [第 1 步：创建 AWS CLI 命名配置文件和 IAM 角色](#tutorials-byoip-ipam-ipv4-console-1)
+ [步骤 2：获取 IPAM 的公有范围 ID](#tutorials-byoip-ipam-transfer-ipv4-2)
+ [步骤 3：创建 IPAM 池](#tutorials-byoip-ipam-transfer-ipv4-3)
+ [步骤 4：使用 AWS RAM 共享 IPAM 池](#tutorials-byoip-ipam-transfer-ipv4-4)
+ [步骤 5：将现有的 BYOIP IPV4 CIDR 传输到 IPAM](#tutorials-byoip-ipam-transfer-ipv4-5)
+ [步骤 6：在 IPAM 中查看 CIDR](#tutorials-byoip-ipam-transfer-ipv4-6)
+ [步骤 7：清除](#tutorials-byoip-ipam-transfer-ipv4-7)

## 第 1 步：创建 AWS CLI 命名配置文件和 IAM 角色
<a name="tutorials-byoip-ipam-ipv4-console-1"></a>

要以单个 AWS 用户的身份完成本教程，您可以使用 AWS CLI 命名配置文件在 IAM 角色之间切换。[命名配置文件](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html#cli-configure-files-using-profiles) 是您在将 `--profile` 选项与 AWS CLI 结合使用时引用的设置和凭证集合。有关如何为 AWS 账户创建 IAM 角色和命名配置文件的更多信息，请参阅[在 AWS CLI 中使用 IAM 角色](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-role.html)。

为您将在本教程中使用的三个 AWS 账户分别创建一个角色和一个命名配置文件：
+ 为 IPAM 管理员 AWS 账户创建名为 `ipam-account` 的配置文件。
+ 为您所在企业中拥有 BYOIP CIDR 的 AWS 账户创建名为 `byoip-owner-account` 的配置文件。

创建 IAM 角色和命名配置文件后，请返回本页面并转至下一步。在本教程的其余部分中，您将注意到示例 AWS CLI 命令会将 `--profile` 选项与其中一个命名配置文件一起使用，以指示哪个账户必须运行该命令。

## 步骤 2：获取 IPAM 的公有范围 ID
<a name="tutorials-byoip-ipam-transfer-ipv4-2"></a>

请按照本部分中的步骤获取 IPAM 的公有范围 ID。此步骤应该由 **ipam-account** 账户执行。

运行以下命令以获取您的公有范围 ID。

```
aws ec2 describe-ipams --region us-east-1 --profile ipam-account
```

在输出中，您将看到自己的公有范围 ID。记下 `PublicDefaultScopeId` 的值。您在下一个步骤中需要使用此值。

```
{
 "Ipams": [
        {
            "OwnerId": "123456789012",
            "IpamId": "ipam-090e48e75758de279",
            "IpamArn": "arn:aws:ec2::123456789012:ipam/ipam-090e48e75758de279",
            "PublicDefaultScopeId": "ipam-scope-0087d83896280b594",
            "PrivateDefaultScopeId": "ipam-scope-08b70b04fbd524f8d",
            "ScopeCount": 2,
            "Description": "my-ipam",
            "OperatingRegions": [
                {
                    "RegionName": "us-east-1"
                },
                {
                    "RegionName": "us-west-2"
                }
            ],
            "Tags": []
        }
    ]
}
```

## 步骤 3：创建 IPAM 池
<a name="tutorials-byoip-ipam-transfer-ipv4-3"></a>

按照本部分中的步骤创建 IPAM 池。此步骤应该由 **ipam-account** 账户执行。您创建的 IPAM 池必须是 `--locale` 选项与 BYOIP CIDR AWS 区域匹配的顶级池。您只能将 BYOIP 传输到顶级 IPAM 池。

**重要**  
创建池时，您必须包括 `--aws-service ec2`。您选择的服务将决定可传播 CIDR 的 AWS 服务。目前，唯一的选择是 `ec2`，这意味着从此池中分配的 CIDR 在 Amazon EC2 服务（适用于弹性 IP 地址）和 Amazon VPC 服务（适用于与 VPC 关联的 CIDR）中是可传播的。

**要使用 AWS CLI 为传输的 BYOIP CIDR 创建 IPv4 地址池**

1. 运行以下命令以创建 IPAM 池。请使用您在上一步中检索的 IPAM 的公有范围的 ID。

   ```
   aws ec2 create-ipam-pool --region us-east-1 --profile ipam-account --ipam-scope-id ipam-scope-0087d83896280b594 --description "top-level-pool" --locale us-west-2 --aws-service ec2 --address-family ipv4
   ```

   在输出中，您将会看到 `create-in-progress`，这表明池的创建正在进行中。

   ```
   {
       "IpamPool": {
           "OwnerId": "123456789012",
           "IpamPoolId": "ipam-pool-0a03d430ca3f5c035",
           "IpamPoolArn": "arn:aws:ec2::123456789012:ipam-pool/ipam-pool-0a03d430ca3f5c035",
           "IpamScopeArn": "arn:aws:ec2::123456789012:ipam-scope/ipam-scope-0087d83896280b594",
           "IpamScopeType": "public",
           "IpamArn": "arn:aws:ec2::123456789012:ipam/ipam-090e48e75758de279",
           "Locale": "us-west-2",
           "PoolDepth": 1,
           "State": "create-in-progress",
           "Description": "top-level-pool",
           "AutoImport": false,
           "AddressFamily": "ipv4",
           "Tags": [],
           "AwsService": "ec2"
       }
   }
   ```

1. 运行以下命令，直到您在输出中看到 `create-complete` 的状态。

   ```
   aws ec2 describe-ipam-pools --region us-east-1 --profile ipam-account
   ```

   下面的示例输出显示池的状态。在下一步骤中，您需要用到 **OwnerId**。

   ```
   {
       "IpamPools": [
           {
               "OwnerId": "123456789012",
               "IpamPoolId": "ipam-pool-0a03d430ca3f5c035",
               "IpamPoolArn": "arn:aws:ec2::123456789012:ipam-pool/ipam-pool-0a03d430ca3f5c035",
               "IpamScopeArn": "arn:aws:ec2::123456789012:ipam-scope/ipam-scope-0087d83896280b594",
               "IpamScopeType": "public",
               "IpamArn": "arn:aws:ec2::123456789012:ipam/ipam-090e48e75758de279",
               "Locale": "us-west-2",
               "PoolDepth": 1,
               "State": "create-complete",
               "Description": "top-level-pool",
               "AutoImport": false,
               "AddressFamily": "ipv4",
               "Tags": [],
               "AwsService": "ec2"
           }
       ]
   }
   ```

## 步骤 4：使用 AWS RAM 共享 IPAM 池
<a name="tutorials-byoip-ipam-transfer-ipv4-4"></a>

按照本部分中的步骤使用 AWS RAM 来共享 IPAM 池，以便其他 AWS 账户可以将现有 BYOIP IPV4 CIDR 传输到 IPAM 池并使用 IPAM 池。此步骤应该由 **ipam-account** 账户执行。

**使用 AWS CLI 共享 IPv4 地址池**

1. 查看 IPAM 池可用的 AWS RAM 权限。您需要两个 ARN 才能完成本部分中的步骤。

   ```
   aws ram list-permissions --region us-east-1 --profile ipam-account --resource-type ec2:IpamPool
   ```

   ```
   {
       "permissions": [
           {
              "arn": "arn:aws:ram::aws:permission/AWSRAMDefaultPermissionsIpamPool",
              "version": "1",
              "defaultVersion": true,
              "name": "AWSRAMDefaultPermissionsIpamPool",
              "resourceType": "ec2:IpamPool",
              "status": "ATTACHABLE",
              "creationTime": "2022-06-30T13:04:29.335000-07:00",
              "lastUpdatedTime": "2022-06-30T13:04:29.335000-07:00",
              "isResourceTypeDefault": true
           },
           {
               "arn": "arn:aws:ram::aws:permission/AWSRAMPermissionIpamPoolByoipCidrImport",
               "version": "1",
               "defaultVersion": true,
               "name": "AWSRAMPermissionIpamPoolByoipCidrImport",
               "resourceType": "ec2:IpamPool",
               "status": "ATTACHABLE",
               "creationTime": "2022-06-30T13:03:55.032000-07:00",
               "lastUpdatedTime": "2022-06-30T13:03:55.032000-07:00",
               "isResourceTypeDefault": false
           }
       ]
   }
   ```

1. 创建资源共享以使 **byoip-owner-account** 账户能够将 BYOIP CIDR 导入 IPAM。`--resource-arns` 的值是您在上一部分中创建的 IPAM 池的 ARN。`--principals` 的值是 BYOIP CIDR 拥有者账户的账户 ID。`--permission-arns` 的值是 `AWSRAMPermissionIpamPoolByoipCidrImport` 权限的 ARN。

   ```
   aws ram create-resource-share --region us-east-1 --profile ipam-account --name PoolShare2 --resource-arns arn:aws:ec2::123456789012:ipam-pool/ipam-pool-0a03d430ca3f5c035 --principals 111122223333 --permission-arns arn:aws:ram::aws:permission/AWSRAMPermissionIpamPoolByoipCidrImport
   ```

   ```
   {                                                                                                                    
       "resourceShare": {                                                                                               
           "resourceShareArn": "arn:aws:ram:us-east-1:123456789012:resource-share/7993758c-a4ea-43ad-be12-b3abaffe361a",
           "name": "PoolShare2",                                                                                      
           "owningAccountId": "123456789012",                                                                                         
           "allowExternalPrincipals": true,                                                                             
           "status": "ACTIVE",                                                                                          
           "creationTime": "2023-04-28T07:32:25.536000-07:00",                                                          
           "lastUpdatedTime": "2023-04-28T07:32:25.536000-07:00"                                                        
           }                                                                                                                
   }
   ```

1. （可选）如果要允许 **byoip-owner-account** 账户在传输完成后将 IP 地址 CIDRS 从 IPAM 池分配到公有 IPv4 池，请复制 `AWSRAMDefaultPermissionsIpamPool` 的 ARN 并创建第二个资源共享。`--resource-arns` 的值是您在上一部分中创建的 IPAM 池的 ARN。`--principals` 的值是 BYOIP CIDR 拥有者账户的账户 ID。`--permission-arns` 的值是 `AWSRAMDefaultPermissionsIpamPool` 权限的 ARN。

   ```
   aws ram create-resource-share --region us-east-1 --profile ipam-account --name PoolShare1 --resource-arns arn:aws:ec2::123456789012:ipam-pool/ipam-pool-0a03d430ca3f5c035 --principals 111122223333 --permission-arns arn:aws:ram::aws:permission/AWSRAMDefaultPermissionsIpamPool
   ```

   ```
   {                                                                                                                    
       "resourceShare": {                                                                                               
           "resourceShareArn": "arn:aws:ram:us-east-1:123456789012:resource-share/8d1e229b-2830-4cf4-8b10-19c889235a2f",
           "name": "PoolShare1",                                                                                      
           "owningAccountId": "123456789012",                                                                                         
           "allowExternalPrincipals": true,                                                                             
           "status": "ACTIVE",                                                                                          
           "creationTime": "2023-04-28T07:31:25.536000-07:00",                                                          
           "lastUpdatedTime": "2023-04-28T07:31:25.536000-07:00"                                                        
           }                                                                                                                
   }
   ```

由于在 RAM 中创建了资源共享，byoip-owner-account 账户现在可以将 CIDR 移至 IPAM。

## 步骤 5：将现有的 BYOIP IPV4 CIDR 传输到 IPAM
<a name="tutorials-byoip-ipam-transfer-ipv4-5"></a>

按照本部分中的步骤将现有的 BYOIP IPV4 CIDR 传输到 IPAM。此步骤应该由 **byoip-owner-account** 账户执行。

**重要**  
将 IPv4 地址范围设置为 AWS 后，您可以使用该范围内的所有 IP 地址，包括第一个地址（网络地址）和最后一个地址（广播地址）。

要将 BYOIP CIDR 传输到 IPAM，BYOIP CIDR 所有者必须在其 IAM 策略中拥有以下权限：
+ `ec2:MoveByoipCidrToIpam`
+ `ec2:ImportByoipCidrToIpam`

**注意**  
您可以为此步骤使用 AWS 管理控制台 或 AWS CLI。

------
#### [ AWS Management Console ]

**要将 BYOIP CIDR 传输到 IPAM 池，请执行以下操作：**

1. 在 [https://console.aws.amazon.com/ipam/](https://console.aws.amazon.com/ipam/) 以 **byoip-owner-account** 账户身份打开 IPAM 控制台。

1. 在导航窗格中，选择**池**。

1. 选择在本教程中创建和共享的顶级池。

1. 选择**操作** > **传输 BYOIP CIDR**。

1. 选择**传输 BYOIP CIDR**。

1. 选择您的 BYOIP CIDR。

1. 选择**预置**。

------
#### [ Command line ]

使用 AWS CLI 通过以下 AWS CLI 命令将 BYIP CIDR 传输到 IPAM 池：

1. 请运行以下命令以传输 CIDR。确保 `--region` 值是 BYOIP CIDR 的 AWS 区域。

   ```
   aws ec2 move-byoip-cidr-to-ipam --region us-west-2 --profile byoip-owner-account --ipam-pool-id ipam-pool-0a03d430ca3f5c035 --ipam-pool-owner 123456789012 --cidr 130.137.249.0/24
   ```

   在输出中，您将看到 CIDR 待定预置。

   ```
   {
       "ByoipCidr": {                                                                 
           "Cidr": "130.137.249.0/24",                                              
           "State": "pending-transfer"                                                      
       }                                                                              
   }
   ```

1. 确保 CIDR 已被传输。运行以下命令，直到您在输出中看到 `complete-transfer` 的状态。

   ```
   aws ec2 move-byoip-cidr-to-ipam --region us-west-2  --profile byoip-owner-account --ipam-pool-id ipam-pool-0a03d430ca3f5c035 --ipam-pool-owner 123456789012 --cidr 130.137.249.0/24
   ```

   下面的示例输出显示状态。

   ```
   {
       "ByoipCidr": {                                                                 
           "Cidr": "130.137.249.0/24",                                              
           "State": "complete-transfer"                                                      
       }                                                                              
   }
   ```

------

## 步骤 6：在 IPAM 中查看 CIDR
<a name="tutorials-byoip-ipam-transfer-ipv4-6"></a>

请按照本部分中的步骤查看 IPAM 中的 CIDR。此步骤应该由 **ipam-account** 账户执行。

**要使用 AWS CLI 在 IPAM 池中查看传输的 BYOIP CIDR**
+ 运行以下命令以查看 IPAM 中管理的分配。确保 `--region` 值是 BYOIP CIDR 的 AWS 区域。

  ```
  aws ec2 get-ipam-pool-allocations --region us-west-2  --profile ipam-account --ipam-pool-id ipam-pool-0d8f3646b61ca5987
  ```

  输出将显示 IPAM 中的分配。

  ```
  {
      "IpamPoolAllocations": [
          {
              "Cidr": "130.137.249.0/24",
              "IpamPoolAllocationId": "ipam-pool-alloc-5dedc8e7937c4261b56dc3e3eb53dc46",
              "ResourceId": "ipv4pool-ec2-0019eed22a684e0b3",
              "ResourceType": "ec2-public-ipv4-pool",
              "ResourceOwner": "111122223333"
          }
      ]
  }
  ```

## 步骤 7：清除
<a name="tutorials-byoip-ipam-transfer-ipv4-7"></a>

按照本部分中的步骤删除您在本教程中创建的资源。此步骤应该由 **ipam-account** 账户执行。

**要使用 AWS CLI 清除本教程中创建的资源**

1. 要删除 IPAM 池共享资源，请运行以下命令以获取第一个资源共享 ARN：

   ```
   aws ram get-resource-shares --region us-east-1 --profile ipam-account --name PoolShare1 --resource-owner SELF
   ```

   ```
   {
       "resourceShares": [
           {
               "resourceShareArn": "arn:aws:ram:us-east-1:123456789012:resource-share/8d1e229b-2830-4cf4-8b10-19c889235a2f",
               "name": "PoolShare1",
               "owningAccountId": "123456789012",
               "allowExternalPrincipals": true,
               "status": "ACTIVE",
               "creationTime": "2023-04-28T07:31:25.536000-07:00",
               "lastUpdatedTime": "2023-04-28T07:31:25.536000-07:00",
               "featureSet": "STANDARD"
           }
       ]
   }
   ```

1. 复制资源共享 ARN 并使用它删除 IPAM 池资源共享。

   ```
   aws ram delete-resource-share --region us-east-1 --profile ipam-account --resource-share-arn arn:aws:ram:us-east-1:123456789012:resource-share/8d1e229b-2830-4cf4-8b10-19c889235a2f
   ```

   ```
   {                      
       "returnValue": true
   }
   ```

1. 如果您在 [步骤 4：使用 AWS RAM 共享 IPAM 池](#tutorials-byoip-ipam-transfer-ipv4-4) 中创建了额外的资源共享，请重复前两个步骤以获取 `PoolShare2` 的第二个资源共享 ARN，然后删除第二个资源共享。

1. 运行以下命令以获取 BYOIP CIDR 的分配 ID。确保 `--region` 值与 BYOIP CIDR 的 AWS 区域匹配。

   ```
   aws ec2 get-ipam-pool-allocations --region us-west-2  --profile ipam-account --ipam-pool-id ipam-pool-0d8f3646b61ca5987
   ```

   输出将显示 IPAM 中的分配。

   ```
   {
       "IpamPoolAllocations": [
           {
               "Cidr": "130.137.249.0/24",
               "IpamPoolAllocationId": "ipam-pool-alloc-5dedc8e7937c4261b56dc3e3eb53dc46",
               "ResourceId": "ipv4pool-ec2-0019eed22a684e0b3",
               "ResourceType": "ec2-public-ipv4-pool",
               "ResourceOwner": "111122223333"
           }
       ]
   }
   ```

1. 从公有 IPv4 池中释放 CIDR。运行本部分中的命令时，`--region` 的值必须与 IPAM 的区域匹配。

   此步骤必须由 **byoip-owner-account** 账户完成。

   ```
   aws ec2 deprovision-public-ipv4-pool-cidr --region us-east-1  --profile byoip-owner-account --pool-id ipv4pool-ec2-0019eed22a684e0b3 --cidr 130.137.249.0/24
   ```

1. 再次查看您的 BYOIP CIDR，并确保没有更多的预置地址。运行本部分中的命令时，`--region` 的值必须与 IPAM 的区域匹配。

   此步骤必须由 **byoip-owner-account** 账户完成。

   ```
   aws ec2 describe-public-ipv4-pools --region us-east-1 --profile byoip-owner-account
   ```

   在输出中，您将看到公有 IPv4 池中的 IP 地址计数。

   ```
   {
       "PublicIpv4Pools": [
           {
               "PoolId": "ipv4pool-ec2-0019eed22a684e0b3",
               "Description": "",
               "PoolAddressRanges": [],
               "TotalAddressCount": 0,
               "TotalAvailableAddressCount": 0,
               "NetworkBorderGroup": "us-east-1",
               "Tags": []
           }
       ]
   }
   ```

1. 运行以下命令以删除顶级池。

   ```
   aws ec2 delete-ipam-pool --region us-east-1  --profile ipam-account --ipam-pool-id ipam-pool-0a03d430ca3f5c035
   ```

   在输出中，您可以看到删除状态。

   ```
   {
       "IpamPool": {
           "OwnerId": "123456789012",
           "IpamPoolId": "ipam-pool-0a03d430ca3f5c035",
           "IpamPoolArn": "arn:aws:ec2::123456789012:ipam-pool/ipam-pool-0a03d430ca3f5c035",
           "IpamScopeArn": "arn:aws:ec2::123456789012:ipam-scope/ipam-scope-0087d83896280b594",
           "IpamScopeType": "public",
           "IpamArn": "arn:aws:ec2::123456789012:ipam/ipam-090e48e75758de279",
           "Locale": "us-east-1",
           "PoolDepth": 2,
           "State": "delete-in-progress",
           "Description": "top-level-pool",
           "AutoImport": false,
           "Advertisable": true,
           "AddressFamily": "ipv4",
           "AwsService": "ec2"
       }
   }
   ```