

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

# Amazon 基础设施设置


本节介绍为集群部署准备 Amazon 环境所需的一次性设置任务：

**Topics**
+ [

## 为 Pacemaker 创建 IAM 角色和策略
](#iam_roles_sles)
+ [

## 修改集群通信的安全组
](#sg-sles)
+ [

## 为叠加层添加 VPC 路由表条目 IPs
](#rt-sles)

## 为 Pacemaker 创建 IAM 角色和策略


除了标准 SAP 操作所需的权限外，集群还需要两个 IAM 策略来控制 Amazon 资源。必须使用 IAM 角色将这些策略分配给您的 Amazon EC2 实例。这使得 Amazon EC2 实例和集群能够调用 Amazon 服务。

**注意**  
创建具有最低权限的策略，仅授予对集群内必需的特定资源的访问权限。对于多个集群，您可能需要创建多个策略。

有关更多信息，请参阅 [Amazon 的 IAM 角色 EC2](https://docs.amazonaws.cn/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html#ec2-instance-profile)。

### STONITH 策略


SLES STONITH 资源代理（external/ec2）需要权限才能启动和停止集群的两个节点。创建策略，如以下示例所示。将此策略附加到分配给集群中两个 Amazon EC2 实例的 IAM 角色。

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ec2:DescribeInstances",
        "ec2:DescribeTags"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "ec2:StartInstances",
        "ec2:StopInstances"
      ],
      "Resource": [
        "arn:aws:ec2:us-east-1:123456789012:instance/arn:aws:ec2:us-east-1:123456789012:instance/i-1234567890abcdef0",
        "arn:aws:ec2:us-east-1:123456789012:instance/arn:aws:ec2:us-east-1:123456789012:instance/i-1234567890abcdef0"
      ]
    }
  ]
}
```

### Amazon 覆盖 IP 政策


SLES Overlay IP 资源代理 (aws-vpc-move-ip) 需要修改路由表中路由条目的权限。创建策略，如以下示例所示。将此策略附加到分配给集群中两个 Amazon EC2 实例的 IAM 角色。

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "ec2:ReplaceRoute",
            "Resource": [
                 "arn:aws:ec2:us-east-1:123456789012:route-table/rtb-0123456789abcdef0",
                 "arn:aws:ec2:us-east-1:123456789012:route-table/rtb-0123456789abcdef0"
                        ]
        },
        {
            "Effect": "Allow",
            "Action": "ec2:DescribeRouteTables",
            "Resource": "*"
        }
    ]
}
```

### 共享 VPC（可选）


**注意**  
只有包含共享 VPC 的设置才需要按照以下说明操作。

Amazon VPC 共享允许您与同一 Organization Amazon s 中的其他账户共享子网 Amazon 。可以使用共享 Amazon VPC 的子网部署亚马逊 EC2 实例。

在 pacemaker 群集中， aws-vpc-move-ip资源代理已得到增强，可支持共享 VPC 设置，同时保持与先前现有功能的向后兼容性。

这需要进行下列检查和更改：我们将拥有 Amazon VPC 的账户称为共享 VPC 账户，将要部署集群节点的使用者账户称为集群账户。 Amazon 

**最低版本要求**  
默认情况下，随附的最新版本的 aws-vpc-move-ip代理 SLES15 SP3 支持共享 VPC 设置。以下是支持共享 VPC 设置所需的最低版本：
+ SLES 12-resource-agents-4.3.018.a7fb5035 SP5 -3.79.1.x86\$164
+ SLES 15-资源代理-4.4.0\$1git57.70549516 SP2 -3.30.1.x86\$164
+ SLES 15-资源代理-4.8.0\$1git30.d0077df0 SP3 -8.5.1

**IAM 角色和策略**  
在共享 Amazon VPC 上使用叠加 IP 代理需要向两个 Amazon 账户（共享 VPC 账户和集群账户）授予一组不同的 IAM 权限。

**共享 VPC 账户**  
在共享 VPC 账户中，创建一个 IAM 角色以向将成为集群一部分的 EC2 实例委派权限。在创建 IAM 角色期间，选择 “另一个 Amazon 账户” 作为可信实体的类型，然后输入 EC2 实例所在的 Amazon 账户 ID。 deployed/running 

创建 IAM 角色后，在共享 VPC 账户上创建以下 IAM 策略，并将其附加到 IAM 角色。根据需要添加或删除路由表条目。

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "VisualEditor0",
      "Effect": "Allow",
      "Action": "ec2:ReplaceRoute",
      "Resource": [
        "arn:aws:ec2:us-east-1:123456789012:route-table/rtb-0123456789abcdef0",
        "arn:aws:ec2:us-east-1:123456789012:route-table/rtb-0123456789abcdef0"
      ]
    },
    {
      "Sid": "VisualEditor1",
      "Effect": "Allow",
      "Action": "ec2:DescribeRouteTables",
      "Resource": "*"
    }
  ]
}
```

接下来，编辑，移至 IAM 角色中的 “信任关系” 选项卡，并确保已正确添加您在创建角色时输入的 Amazon 账户。

在集群账户中，创建以下 IAM 策略，并将其附加到 IAM 角色。这是要附加到 EC2 实例的 IAM 角色。

 **STS 策略** 

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "VisualEditor0",
      "Effect": "Allow",
      "Action": "sts:AssumeRole",
      "Resource": "arn:aws:iam::123456789012:role/sharing-vpc-account-cluster-role"
    }
  ]
}
```

 **STONITH 策略** 

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "VisualEditor0",
      "Effect": "Allow",
      "Action": [
        "ec2:StartInstances",
        "ec2:StopInstances"
      ],
      "Resource": [
        "arn:aws:ec2:us-east-1:123456789012:instance/arn:aws:ec2:us-east-1:123456789012:instance/i-1234567890abcdef0",
        "arn:aws:ec2:us-east-1:123456789012:instance/arn:aws:ec2:us-east-1:123456789012:instance/i-1234567890abcdef0"
      ]
    },
    {
      "Sid": "VisualEditor1",
      "Effect": "Allow",
      "Action": "ec2:DescribeInstances",
      "Resource": "*"
    }
  ]
}
```

## 修改集群通信的安全组


安全组控制允许到达和离开与其关联资源的流量。有关更多信息，请参阅[使用安全组控制 Amazon 资源流量](https://docs.amazonaws.cn/vpc/latest/userguide/vpc-security-groups.html)。

除了访问 SAP 和管理功能所需的标准端口外，还必须将以下规则应用于分配给集群中所有 Amazon EC2 实例的安全组。


| 来源 | 协议 | 端口范围 | 描述 | 
| --- | --- | --- | --- | 
|  安全组 ID（其自己的资源 ID）  |  UDP  |  5405  |  允许集群资源之间的 UDP 流量以进行 corosync 通信  | 
|  用于管理的堡垒主机安全组或 CIDR 范围  |  TCP  |  7630  |  （可选）供 SLES Hawk2 接口用来通过 Web 界面进行监控和管理。有关更多详细信息，请参阅 SUSE 文档[使用 Hawk2 配置和管理群集资源](https://documentation.suse.com/sle-ha/15-SP6/html/SLE-HA-all/cha-ha-manage-resources.html#sec-conf-hawk2-manage-edit)。  | 
+ 请注意此处使用 `UDP` 协议。
+ 如果您运行的是本地防火墙（例如 iptables），请确保允许在两个 Amazon EC2 实例之间通过上述端口进行通信。

## 为叠加层添加 VPC 路由表条目 IPs


您需要为重叠 IP 添加初始路由表条目。有关重叠 IP 的更多信息，请参阅[重叠 IP 概念](sap-hana-pacemaker-sles-concepts.md#overlay-ip-sles) 

向 VPC 路由表或与集群的 Amazon EC2 实例子网关联的表中添加条目。必须为 SAP HANA 主数据库节点手动添加目标（覆盖 IP CIDR）和目标（Amazon EC2 实例或 ENI）的条目。这样可以确保集群资源有路由可供修改。它还支持在配置集群之前，使用与重叠 IP 关联的虚拟名称安装 SAP。

使用 Amazon VPC 控制台或 Amazon CLI 命令向叠加 IP 的表或表中添加路由。

------
#### [  Amazon Console ]

1. 打开亚马逊 VPC 控制台，网址为 https://console.aws.amazon.com/vpc/。

1. 在导航窗格中，选择**路由表**，然后选择与您的集群节点子网关联的路由表。

1. 依次选择**操作**和**编辑路由**。

1. 选择**添加路由**并配置 HANA 路由：    
[\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/sap/latest/sap-hana/sap-hana-pacemaker-sles-infra-setup.html)

1. （可选）添加一条路由，启用对辅助系统的只读访问：    
[\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/sap/latest/sap-hana/sap-hana-pacemaker-sles-infra-setup.html)

1. 选择**保存更改**。

   除了标准路径外，您的路由表现在还包括必 IPs需的 Overlay 条目。

------
#### [  Amazon CLI ]

上述步骤也可以通过编程方式执行。我们建议使用管理权限而不是基于实例的权限来执行这些步骤以保持最低权限。 CreateRoute 正在进行的操作不需要 API。

例如：

```
$ aws ec2 create-route --route-table-id <routetable_id> --destination-cidr-block <hana_overlayip>/32 --instance-id <instance_id_1>
```

需要启用只读访问时

```
$ aws ec2 create-route --route-table-id <routetable_id> --destination-cidr-block <readenabled_overlayip>/32 --instance-id <instance_id_2>
```

------