搜索

第 3 章 使用自定义 AWS KMS 加密密钥创建带有 HCP 集群的 ROSA

download PDF

使用自定义 AWS 密钥管理服务(KMS)密钥,使用托管的 control plane (HCP)集群创建一个 Red Hat OpenShift Service on AWS (ROSA)集群。

3.1. 带有 HCP 先决条件的 ROSA

要使用 HCP 集群创建 ROSA,您必须有以下项目:

  • 配置的虚拟私有云(VPC)
  • 帐户范围内的角色
  • OIDC 配置
  • Operator 角色

3.1.1. 使用 HCP 集群为您的 ROSA 创建虚拟私有云

您必须有一个 Virtual Private Cloud (VPC)才能使用 HCP 集群创建 ROSA。您可以使用以下方法创建 VPC:

  • 使用 Terraform 模板创建 VPC
  • 在 AWS 控制台中手动创建 VPC 资源
注意

Terraform 指令用于测试和演示目的。您自己的安装需要对 VPC 进行一些修改,以便您自己的使用。您还应确保在使用这个 Terraform 脚本时,它位于您要安装集群的同一区域。在这些示例中,使用 us-east-2

重要

目前,使用 HCP 的 ROSA 不支持在 多个 AWS 帐户间共享 VPC。不要将带有 HCP 集群的 ROSA 安装到与另一个 AWS 帐户共享的子网。如需更多信息,请参阅 "支持单个 VPC 中的多个 ROSA 集群?"

使用 Terraform 创建虚拟私有云

Terraform 是一个工具,允许您使用已建立的模板创建各种资源。以下过程使用默认选项来创建带有 HCP 集群的 ROSA。有关使用 Terraform 的更多信息,请参阅其他资源。

先决条件

  • 您已在机器上安装 Terraform 版本 1.4.0 或更新版本。
  • 您已在机器上安装了 Git。

流程

  1. 运行以下命令,打开 shell 提示符并克隆 Terraform VPC 存储库:

    $ git clone https://github.com/openshift-cs/terraform-vpc-example
  2. 运行以下命令进入创建的目录:

    $ cd terraform-vpc-example
  3. 运行以下命令来启动 Terraform 文件:

    $ terraform init

    此进程完成后会出现确认初始化的消息。

  4. 要基于现有的 Terraform 模板构建 VPC Terraform 计划,请运行 plan 命令。您必须包含 AWS 区域。您可以选择指定集群名称。在 terraform plan 完成后,一个 rosa.tfplan 文件会被添加到 hypershift-tf 目录。有关更详细的选项,请参阅 Terraform VPC 存储库的 README 文件

    $ terraform plan -out rosa.tfplan -var region=<region>
  5. 运行以下命令应用此计划文件来构建 VPC:

    $ terraform apply rosa.tfplan
    1. 可选: 您可以运行以下命令来捕获 Terraform-provisioned private、public 和 machinepool 子网 ID 的值作为环境变量,以便在使用 HCP 集群创建 ROSA 时使用:

      $ export SUBNET_IDS=$(terraform output -raw cluster-subnets-string)
    2. 使用以下命令验证变量是否已正确设置:

      $ echo $SUBNET_IDS

      输出示例

      $ subnet-0a6a57e0f784171aa,subnet-078e84e5b10ecf5b0

其他资源

  • 有关自定义 VPC 时可用选项的详细列表,请参阅 Terraform VPC 存储库。
手动创建虚拟私有云

如果您选择手动创建 Virtual Private Cloud (VPC)而不是使用 Terraform,请访问 AWS 控制台中的 VPC 页面。您的 VPC 必须满足下表中显示的要求。

表 3.1. VPC 的要求
要求详情

VPC 名称

创建集群时需要具有特定的 VPC 名称和 ID。

CIDR 范围

您的 VPC CIDR 范围应该与您的机器 CIDR 匹配。

可用区

单个区需要一个可用区,对于多区的可用区需要三个可用区。

公共子网

对于公共集群,您必须有一个带有 NAT 网关的公共子网。私有集群不需要公共子网。

DNS 主机名和解析

您必须确保启用 DNS 主机名和解析。

3.1.2. 创建集群范围的 STS 角色和策略

在使用 Red Hat OpenShift Service on AWS (ROSA) CLI (rosa)创建带有托管 control plane (HCP)集群的 Red Hat OpenShift Service on AWS (ROSA)前,请创建所需的帐户范围角色和策略,包括 Operator 策略。

注意

使用 HCP 集群的 ROSA 需要附加 AWS 受管策略的帐户和 Operator 角色。不支持客户管理的策略。有关使用 HCP 集群的 ROSA 的 AWS 管理策略的更多信息,请参阅 ROSA 帐户角色的 AWS 管理策略

先决条件

  • 您已使用 HCP 为 ROSA 完成 AWS 的先决条件。
  • 您有可用的 AWS 服务配额。
  • 您已在 AWS 控制台中启用了 ROSA 服务。
  • 您已在安装主机上安装并配置了最新的 ROSA CLI (rosa)。
  • 已使用 ROSA CLI 登录到您的红帽帐户。

流程

  1. 如果 AWS 帐户中不存在它们,请创建所需的账户范围的 STS 角色,并通过运行以下命令附加策略:

    $ rosa create account-roles --hosted-cp
  2. 可选:运行以下命令将前缀设置为环境变量:

    $ export ACCOUNT_ROLES_PREFIX=<account_role_prefix>
    • 运行以下命令,查看变量的值:

      $ echo $ACCOUNT_ROLES_PREFIX

      输出示例

      ManagedOpenShift

如需有关 ROSA 的 AWS 管理 IAM 策略的更多信息,请参阅 ROSA 的 AWS 管理的 IAM 策略

3.1.3. 创建 OpenID Connect 配置

当将 ROSA 与 HCP 集群搭配使用时,您必须先创建 OpenID Connect (OIDC)配置。此配置已注册到 OpenShift Cluster Manager。

先决条件

  • 您已使用 HCP 为 ROSA 完成 AWS 的先决条件。
  • 您已完成了 Red Hat OpenShift Service on AWS 的 AWS 的先决条件。
  • 您已在安装主机上安装并配置了最新的 Red Hat OpenShift Service on AWS (ROSA) CLI rosa

流程

  1. 要创建 OIDC 配置和 AWS 资源,请运行以下命令:

    $ rosa create oidc-config --mode=auto --yes

    此命令返回以下信息:

    输出示例

    ? Would you like to create a Managed (Red Hat hosted) OIDC Configuration Yes
    I: Setting up managed OIDC configuration
    I: To create Operator Roles for this OIDC Configuration, run the following command and remember to replace <user-defined> with a prefix of your choice:
    	rosa create operator-roles --prefix <user-defined> --oidc-config-id 13cdr6b
    If you are going to create a Hosted Control Plane cluster please include '--hosted-cp'
    I: Creating OIDC provider using 'arn:aws:iam::4540112244:user/userName'
    ? Create the OIDC provider? Yes
    I: Created OIDC provider with ARN 'arn:aws:iam::4540112244:oidc-provider/dvbwgdztaeq9o.cloudfront.net/13cdr6b'

    在创建集群时,您必须提供 OIDC 配置 ID。CLI 输出为 --mode auto 提供这个值,否则您必须根据 --mode manualaws CLI 输出来确定这些值。

  2. 可选: 您可以将 OIDC 配置 ID 保存为变量,以便稍后使用。运行以下命令来保存变量:

    $ export OIDC_ID=<oidc_config_id>1
    1
    在上面的示例输出中,OIDC 配置 ID 是 13cdr6b。
    • 运行以下命令,查看变量的值:

      $ echo $OIDC_ID

      输出示例

      13cdr6b

验证

  • 您可以列出与用户机构关联的集群可用的 OIDC 配置。运行以下命令:

    $ rosa list oidc-config

    输出示例

    ID                                MANAGED  ISSUER URL                                                             SECRET ARN
    2330dbs0n8m3chkkr25gkkcd8pnj3lk2  true     https://dvbwgdztaeq9o.cloudfront.net/2330dbs0n8m3chkkr25gkkcd8pnj3lk2
    233hvnrjoqu14jltk6lhbhf2tj11f8un  false    https://oidc-r7u1.s3.us-east-1.amazonaws.com                           aws:secretsmanager:us-east-1:242819244:secret:rosa-private-key-oidc-r7u1-tM3MDN

3.1.4. 创建 Operator 角色和策略

当将 ROSA 与 HCP 集群搭配使用时,您必须创建带有托管 control plane (HCP)部署的 Red Hat OpenShift Service on AWS (ROSA)所需的 Operator IAM 角色。集群 Operator 使用 Operator 角色获取执行集群操作所需的临时权限,如管理后端存储、云供应商凭证和对集群的外部访问权限。

先决条件

  • 您已使用 HCP 为 ROSA 完成 AWS 的先决条件。
  • 您已在安装主机上安装并配置了最新的 Red Hat OpenShift Service on AWS ROSA CLI (rosa)。
  • 您创建了集群范围的 AWS 角色。

流程

  1. 使用以下命令将前缀名称设置为环境变量:

    $ export OPERATOR_ROLES_PREFIX=<prefix_name>
  2. 要创建 Operator 角色,请运行以下命令:

    $ rosa create operator-roles --hosted-cp --prefix=$OPERATOR_ROLES_PREFIX --oidc-config-id=$OIDC_ID --installer-role-arn arn:aws:iam::${AWS_ACCOUNT_ID}:role/${ACCOUNT_ROLES_PREFIX}-HCP-ROSA-Installer-Role

    以下分类提供了 Operator 角色创建的选项。

    $ rosa create operator-roles --hosted-cp
    	--prefix=$OPERATOR_ROLES_PREFIX 1
    	--oidc-config-id=$OIDC_ID 2
    	--installer-role-arn arn:aws:iam::${AWS_ACCOUNT_ID}:role/${ACCOUNT_ROLES_PREFIX}-HCP-ROSA-Installer-Role 3
    1
    在创建这些 Operator 角色时,您必须提供一个前缀。如果不这样做会产生错误。如需有关 Operator 前缀的信息,请参阅本节的附加资源。
    2
    这个值是您为使用 HCP 集群的 ROSA 创建的 OIDC 配置 ID。
    3
    这个值是您在创建 ROSA 帐户角色时创建的安装程序角色 ARN。

    您必须包含 --hosted-cp 参数,以使用 HCP 集群为 ROSA 创建正确的角色。此命令返回以下信息:

    输出示例

    ? Role creation mode: auto
    ? Operator roles prefix: <pre-filled_prefix> 1
    ? OIDC Configuration ID: 23soa2bgvpek9kmes9s7os0a39i13qm4 | https://dvbwgdztaeq9o.cloudfront.net/23soa2bgvpek9kmes9s7os0a39i13qm4 2
    ? Create hosted control plane operator roles: Yes
    W: More than one Installer role found
    ? Installer role ARN: arn:aws:iam::4540112244:role/<prefix>-HCP-ROSA-Installer-Role
    ? Permissions boundary ARN (optional):
    I: Reusable OIDC Configuration detected. Validating trusted relationships to operator roles:
    I: Creating roles using 'arn:aws:iam::4540112244:user/<userName>'
    I: Created role '<prefix>-openshift-cluster-csi-drivers-ebs-cloud-credentials' with ARN 'arn:aws:iam::4540112244:role/<prefix>-openshift-cluster-csi-drivers-ebs-cloud-credentials'
    I: Created role '<prefix>-openshift-cloud-network-config-controller-cloud-credenti' with ARN 'arn:aws:iam::4540112244:role/<prefix>-openshift-cloud-network-config-controller-cloud-credenti'
    I: Created role '<prefix>-kube-system-kube-controller-manager' with ARN 'arn:aws:iam::4540112244:role/<prefix>-kube-system-kube-controller-manager'
    I: Created role '<prefix>-kube-system-capa-controller-manager' with ARN 'arn:aws:iam::4540112244:role/<prefix>-kube-system-capa-controller-manager'
    I: Created role '<prefix>-kube-system-control-plane-operator' with ARN 'arn:aws:iam::4540112244:role/<prefix>-kube-system-control-plane-operator'
    I: Created role '<prefix>-kube-system-kms-provider' with ARN 'arn:aws:iam::4540112244:role/<prefix>-kube-system-kms-provider'
    I: Created role '<prefix>-openshift-image-registry-installer-cloud-credentials' with ARN 'arn:aws:iam::4540112244:role/<prefix>-openshift-image-registry-installer-cloud-credentials'
    I: Created role '<prefix>-openshift-ingress-operator-cloud-credentials' with ARN 'arn:aws:iam::4540112244:role/<prefix>-openshift-ingress-operator-cloud-credentials'
    I: To create a cluster with these roles, run the following command:
    	rosa create cluster --sts --oidc-config-id 23soa2bgvpek9kmes9s7os0a39i13qm4 --operator-roles-prefix <prefix> --hosted-cp

    1
    此字段预先填充您在初始创建命令中设置的前缀。
    2
    此字段要求您选择为使用 HCP 集群的 ROSA 创建的 OIDC 配置。

    Operator 角色现已创建,并可用于使用 HCP 集群创建 ROSA。

验证

  • 您可以列出与 ROSA 帐户关联的 Operator 角色。运行以下命令:

    $ rosa list operator-roles

    输出示例

    I: Fetching operator roles
    ROLE PREFIX  AMOUNT IN BUNDLE
    <prefix>      8
    ? Would you like to detail a specific prefix Yes 1
    ? Operator Role Prefix: <prefix>
    ROLE NAME                                                         ROLE ARN                                                                                         VERSION  MANAGED
    <prefix>-kube-system-capa-controller-manager                       arn:aws:iam::4540112244:role/<prefix>-kube-system-capa-controller-manager                       4.13     No
    <prefix>-kube-system-control-plane-operator                        arn:aws:iam::4540112244:role/<prefix>-kube-system-control-plane-operator                        4.13     No
    <prefix>-kube-system-kms-provider                                  arn:aws:iam::4540112244:role/<prefix>-kube-system-kms-provider                                  4.13     No
    <prefix>-kube-system-kube-controller-manager                       arn:aws:iam::4540112244:role/<prefix>-kube-system-kube-controller-manager                       4.13     No
    <prefix>-openshift-cloud-network-config-controller-cloud-credenti  arn:aws:iam::4540112244:role/<prefix>-openshift-cloud-network-config-controller-cloud-credenti  4.13     No
    <prefix>-openshift-cluster-csi-drivers-ebs-cloud-credentials       arn:aws:iam::4540112244:role/<prefix>-openshift-cluster-csi-drivers-ebs-cloud-credentials       4.13     No
    <prefix>-openshift-image-registry-installer-cloud-credentials      arn:aws:iam::4540112244:role/<prefix>-openshift-image-registry-installer-cloud-credentials      4.13     No
    <prefix>-openshift-ingress-operator-cloud-credentials              arn:aws:iam::4540112244:role/<prefix>-openshift-ingress-operator-cloud-credentials              4.13     No

    1
    命令运行后,它会显示与 AWS 帐户关联的所有前缀,并记下与这个前缀关联的角色数量。如果您需要查看所有这些角色及其详情,请在详细信息提示符处输入"是",使这些角色按特定情况列出。

3.1.5. 使用自定义 AWS KMS 密钥创建 ROSA 集群

您可以使用客户提供的 KMS 密钥来加密节点根卷、etcd 数据库或两者,创建 Red Hat OpenShift Service on AWS (ROSA)集群。可以为每个选项提供不同的 KMS 密钥 ARN。

注意

使用 HCP 的 ROSA 不会自动配置 默认存储类,以使用客户提供的 KMS 密钥加密持久性卷。这是安装后可以在集群中配置的对象。

流程

  1. 运行以下命令,创建自定义 AWS 客户管理的 KMS 密钥:

    $ KMS_ARN=$(aws kms create-key --region $AWS_REGION --description 'Custom ROSA Encryption Key' --tags TagKey=red-hat,TagValue=true --query KeyMetadata.Arn --output text)

    此命令保存此自定义密钥的 Amazon 资源名称(ARN)输出以获取进一步步骤。

    注意

    客户必须提供客户 KMS 密钥所需的 --tags TagKey=red-hat,TagValue=true 参数。

  2. 运行以下命令验证 KMS 密钥是否已创建:

    $ echo $KMS_ARN
  3. 将 AWS 帐户 ID 设置为环境变量。

    $ AWS_ACCOUNT_ID=<aws_account_id>
  4. 将您在上一步中创建的集群范围的安装程序角色和 operator 角色的 ARN 添加到 文件中的 Statement.Principal.AWS 部分。在以下示例中,添加了默认 ManagedOpenShift-HCP-ROSA-Installer-Role 角色的 ARN:

    {
      "Version": "2012-10-17",
      "Id": "key-rosa-policy-1",
      "Statement": [
      {
                  "Sid": "Enable IAM User Permissions",
                  "Effect": "Allow",
                  "Principal": {
                      "AWS": "arn:aws:iam::${AWS_ACCOUNT_ID}:root"
                  },
                  "Action": "kms:*",
                  "Resource": "*"
              },
            {
                  "Sid": "Installer Permissions",
                  "Effect": "Allow",
                  "Principal": {
                      "AWS": "arn:aws:iam::${AWS_ACCOUNT_ID}:role/ManagedOpenShift-HCP-ROSA-Installer-Role"
                  },
                  "Action": [
                      "kms:CreateGrant",
                      "kms:DescribeKey",
                      "kms:GenerateDataKeyWithoutPlaintext"
                  ],
                  "Resource": "*"
              },
              {
                  "Sid": "ROSA KubeControllerManager Permissions",
                  "Effect": "Allow",
                  "Principal": {
                      "AWS": "arn:aws:iam::${AWS_ACCOUNT_ID}:role/<operator_role_prefix>-kube-system-kube-controller-manager"
    
                  },
                  "Action": "kms:DescribeKey",
                  "Resource": "*"
              },
              {
                  "Sid": "ROSA KMS Provider Permissions",
                  "Effect": "Allow",
                  "Principal": {
                      "AWS": "arn:aws:iam::${AWS_ACCOUNT_ID}:role/<operator_role_prefix>-kube-system-kms-provider"
                  },
                  "Action": [
                      "kms:Encrypt",
                      "kms:Decrypt",
                      "kms:DescribeKey"
                  ],
                  "Resource": "*"
              },
              {
                  "Sid": "ROSA NodeManager Permissions",
                  "Effect": "Allow",
                  "Principal": {
                      "AWS": "arn:aws:iam::${AWS_ACCOUNT_ID}:role/<operator_role_prefix>-kube-system-capa-controller-manager"
                  },
                  "Action": [
                      "kms:DescribeKey",
                      "kms:GenerateDataKeyWithoutPlaintext",
                      "kms:CreateGrant"
                  ],
                  "Resource": "*"
              }
          ]
      }
  5. 运行以下命令确认创建的策略文件详情:

    $ cat rosa-key-policy.json
  6. 运行以下命令,将新生成的密钥策略应用到自定义 KMS 密钥:

    $ aws kms put-key-policy --key-id $KMS_ARN \
    --policy file://rosa-key-policy.json \
    --policy-name default
  7. 运行以下命令来创建集群:

    注意

    如果您的集群名称超过 15 个字符,它将包含自动生成的域前缀作为您 provisioned 集群 的子域

    要自定义子域,请使用 --domain-prefix 标志。域前缀不能超过 15 个字符,它必须是唯一的,且在集群创建后无法更改。

    $ rosa create cluster --cluster-name <cluster_name> \
    --subnet-ids <private_subnet_id>,<public_subnet_id> \
    --sts \
    --mode auto \
    --machine-cidr 10.0.0.0/16 \
    --compute-machine-type m5.xlarge \
    --hosted-cp \
    --region <aws_region> \
    --oidc-config-id $OIDC_ID \
    --kms-key-arn $KMS_ARN \ 1
    --etcd-encryption-kms-arn $KMS_ARN \ 2
    --operator-roles-prefix $OPERATOR_ROLES_PREFIX
    1
    这个 KMS 密钥 ARN 用于加密所有 worker 节点根卷。如果只需要 etcd 数据库加密,则不需要它。
    2
    这个 KMS 密钥 ARN 用于加密 etcd 数据库。默认情况下,etcd 数据库总是使用 AES 密码块加密,但可以使用 KMS 密钥加密。如果只需要节点根卷加密,则不需要它。

验证

您可以使用 OpenShift Cluster Manager 验证 KMS 密钥是否正常工作。

  1. 导航到 OpenShift Cluster Manager 并选择 Instances
  2. 选择您的实例。
  3. Storage 选项卡。
  4. 复制 KMS 密钥 ID
  5. 搜索并选择 Key Management Service
  6. Filter 字段中输入您复制的 KMS 密钥 ID
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.