AWS 基础设施设置 - SAP HANA on AWS

AWS 基础设施设置

此部分介绍为集群部署准备 AWS 环境所需的一次性设置任务:

为 Pacemaker 创建 IAM 角色和策略

在标准 SAP 操作所需的权限之外,集群还需要两个 IAM 策略来控制 AWS 资源。这些策略必须通过 IAM 角色分配给您的 Amazon EC2 实例。这使得 Amazon EC2 实例以及集群能够调用 AWS 服务。

注意

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

有关更多信息,请参阅 Amazon EC2 的 IAM 角色

STONITH 策略

Red Hat STONITH 资源代理(fence_aws)需要权限才能启动和停止集群的两个节点。创建策略,如以下示例所示。将此策略附加到分配给集群中两个 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" ] } ] }

AWS 重叠 IP 策略

Red Hat 重叠 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 共享,您可以与同一 AWS Organizations 中的其他 AWS 账户共享子网。Amazon EC2 实例可以使用共享 Amazon VPC 的子网来部署。

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

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

IAM 角色和策略

将重叠 IP 代理与共享 Amazon VPC 结合使用,需要向两个 AWS 账户(共享 VPC 账户和集群账户)授予不同的 IAM 权限集。

共享 VPC 账户

在共享 VPC 账户中,创建 IAM 角色用来向将加入集群的 EC2 实例委派权限。在创建 IAM 角色期间,选择“另一个 AWS 账户”作为可信实体的类型,然后输入部署/运行 EC2 实例的 AWS 账户 ID。

创建 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 角色中的“信任关系”选项卡进行编辑,确保已正确添加您在创建角色时输入的 AWS 账户。

在集群账户中,创建以下 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": "*" } ] }

修改集群通信的安全组

安全组控制允许到达和离开与其关联资源的流量。有关更多信息,请参阅使用安全组控制指向 AWS 资源的流量

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

来源 协议 端口范围 描述

安全组 ID(其自己的资源 ID)

UDP

5405

允许集群资源之间的 UDP 流量以进行 corosync 通信

  • 请注意此处使用 UDP 协议。

  • 如果您运行的是本地防火墙(例如 iptables),请确保在两个 Amazon EC2 实例之间允许通过上述端口进行通信。

为重叠 IP 添加 VPC 路由表条目

您需要为重叠 IP 添加初始路由表条目。有关重叠 IP 的更多信息,请参阅重叠 IP 概念

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

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

AWS Console
  1. 通过 https://console.aws.amazon.com/vpc/ 打开 Amazon VPC 控制台。

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

  3. 依次选择操作编辑路由

  4. 选择添加路由并配置 HANA 路由:

    目标位置 目标

    <hana_overlayip>/32

    i-xxxxinstidforhost1

  5. (可选)添加一条路由,启用对辅助系统的只读访问:

    目标位置 目标

    <readenabled_overlayip>/32

    i-xxxxinstidforhost2

  6. 选择保存更改

    除了标准路由之外,您的路由表现在还包括所需的重叠 IP 条目。

AWS 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>