×

在 AWS 上的 Red Hat OpenShift 服务 (ROSA) Web UI 要求您在 AWS 账户上拥有特定权限,这些权限可以创建信任关系,从而在OpenShift 集群管理器rosa命令行界面 (CLI) 提供最终用户体验。

此信任关系是通过创建和关联ocm-role AWS IAM 角色实现的。此角色具有与 AWS 安装程序的信任策略,该策略将您的 Red Hat 账户链接到您的 AWS 账户。此外,您还需要为每个 Web UI 用户创建一个user-role AWS IAM 角色,用于识别这些用户。此user-role AWS IAM 角色没有任何权限。

使用 OpenShift 集群管理器所需的 AWS IAM 角色为:

  • ocm-role

  • user-role

无论您是使用 ROSA CLI (rosa) 还是 OpenShift 集群管理器 Web UI 管理集群,都必须使用 ROSA CLI 创建账户范围的角色,在 ROSA CLI 中称为account-roles。这些账户角色对于您的第一个集群是必需的,并且这些角色可以在多个集群中使用。这些必需的账户角色为:

  • Worker-Role

  • Support-Role

  • Installer-Role

  • ControlPlane-Role

角色创建不会请求您的 AWS 访问密钥或密钥。AWS 安全令牌服务 (STS) 用作此工作流程的基础。AWS STS 使用临时、特权受限的凭证来提供身份验证。

有关创建这些角色的更多信息,请参阅账户范围的 IAM 角色和策略参考

集群特定的 Operator 角色(在 ROSA CLI 中称为operator-roles)获取执行集群操作(例如管理后端存储、入口和注册表)所需的临时权限。这些角色是您创建的集群所必需的。这些必需的 Operator 角色为:

  • <cluster_name>-<hash>-openshift-cluster-csi-drivers-ebs-cloud-credentials

  • <cluster_name>-<hash>-openshift-cloud-network-config-controller-credentials

  • <cluster_name>-<hash>-openshift-machine-api-aws-cloud-credentials

  • <cluster_name>-<hash>-openshift-cloud-credential-operator-cloud-credentials

  • <cluster_name>-<hash>-openshift-image-registry-installer-cloud-credentials

  • <cluster_name>-<hash>-openshift-ingress-operator-cloud-credentials

有关创建这些角色的更多信息,请参阅集群特定的 Operator IAM 角色参考

关于 ocm-role IAM 资源

您必须创建ocm-role IAM 资源才能使 Red Hat 用户组织能够创建在 AWS 上的 Red Hat OpenShift 服务 (ROSA) 集群。在与 AWS 链接的上下文中,Red Hat 组织是 OpenShift 集群管理器中的单个用户。

关于您的ocm-role IAM 资源的一些注意事项:

  • 每个 Red Hat 组织只能链接一个ocm-role IAM 角色;但是,每个 AWS 账户可以拥有任意数量的ocm-role IAM 角色。Web UI 要求一次只能链接其中一个角色。

  • Red Hat 组织中的任何用户都可以创建和链接ocm-role IAM 资源。

  • 只有 Red Hat 组织管理员才能取消链接ocm-role IAM 资源。此限制是为了保护其他 Red Hat 组织成员不会干扰其他用户的界面功能。

    如果您刚刚创建了一个不属于现有组织的 Red Hat 账户,则此账户也是 Red Hat 组织管理员。

  • 有关基本和管理员ocm-role IAM 资源的 AWS 权限策略列表,请参阅本节“其他资源”中的“了解 OpenShift 集群管理器角色”。

使用 ROSA CLI (rosa),您可以在创建 IAM 资源时链接它。

将您的 IAM 资源“链接”或“关联”到您的 AWS 账户意味着使用您的ocm-role IAM 角色和 Red Hat OpenShift 集群管理器 AWS 角色创建信任策略。创建和链接您的 IAM 资源后,您将在 AWS 中看到来自您的ocm-role IAM 资源与arn:aws:iam::7333:role/RH-Managed-OpenShift-Installer资源的信任关系。

在 Red Hat 组织管理员创建和链接ocm-role IAM 资源后,所有组织成员可能都需要创建和链接他们自己的user-role IAM 角色。此 IAM 资源每个用户只需要创建和链接一次。如果您的 Red Hat 组织中的其他用户已经创建并链接了ocm-role IAM 资源,则您需要确保您已经创建并链接了自己的user-role IAM 角色。

其他资源

创建 ocm-role IAM 角色

您可以使用命令行界面 (CLI) 创建您的ocm-role IAM 角色。

先决条件
  • 您拥有一个 AWS 账户。

  • 您在 OpenShift 集群管理器组织中拥有 Red Hat 组织管理员权限。

  • 您拥有安装 AWS 账户范围角色所需的权限。

  • 您已在安装主机上安装并配置了最新的 Red Hat OpenShift Service on AWS (ROSA) CLI (rosa)。

步骤
  • 要创建具有基本权限的 ocm-role IAM 角色,请运行以下命令:

    $ rosa create ocm-role
  • 要创建具有管理员权限的 ocm-role IAM 角色,请运行以下命令:

    $ rosa create ocm-role --admin

    此命令允许您通过指定特定属性来创建角色。以下示例输出显示了选择的“自动模式”,它允许 ROSA CLI (rosa) 创建您的 Operator 角色和策略。有关更多信息,请参阅“其他资源”中的“账户范围角色创建方法”。

示例输出
I: Creating ocm role
? Role prefix: ManagedOpenShift (1)
? Enable admin capabilities for the OCM role (optional): No (2)
? Permissions boundary ARN (optional): (3)
? Role Path (optional): (4)
? Role creation mode: auto (5)
I: Creating role using 'arn:aws:iam::<ARN>:user/<UserName>'
? Create the 'ManagedOpenShift-OCM-Role-182' role? Yes (6)
I: Created role 'ManagedOpenShift-OCM-Role-182' with ARN  'arn:aws:iam::<ARN>:role/ManagedOpenShift-OCM-Role-182'
I: Linking OCM role
? OCM Role ARN: arn:aws:iam::<ARN>:role/ManagedOpenShift-OCM-Role-182 (7)
? Link the 'arn:aws:iam::<ARN>:role/ManagedOpenShift-OCM-Role-182' role with organization '<AWS ARN>'? Yes (8)
I: Successfully linked role-arn 'arn:aws:iam::<ARN>:role/ManagedOpenShift-OCM-Role-182' with organization account '<AWS ARN>'
1 所有已创建 AWS 资源的前缀值。在此示例中,ManagedOpenShift作为所有 AWS 资源的前缀。
2 选择是否要使此角色拥有额外的管理员权限。

如果您使用了--admin选项,则不会看到此提示。

3 要设置权限边界的策略的 Amazon 资源名称 (ARN)。
4 为用户名指定 IAM 路径。
5 选择创建 AWS 角色的方法。使用auto,ROSA CLI 会生成并链接角色和策略。在auto模式下,您会收到一些不同的提示来创建 AWS 角色。
6 auto方法会询问您是否要使用您的前缀创建一个特定的ocm-role
7 确认您要将您的 IAM 角色与您的 OpenShift 集群管理器关联。
8 将创建的角色与您的 AWS 组织链接。

关于 user-role IAM 角色

您需要为每个 Web UI 用户创建一个user-role IAM 角色,以使这些用户能够创建 ROSA 集群。

关于您的user-role IAM 角色的一些注意事项:

  • 每个 Red Hat 用户账户只需要一个user-role IAM 角色,但您的 Red Hat 组织可以拥有许多此类 IAM 资源。

  • Red Hat 组织中的任何用户都可以创建和链接user-role IAM 角色。

  • 每个 AWS 账户每个 Red Hat 组织可以有多个user-role IAM 角色。

  • Red Hat 使用user-role IAM 角色来识别用户。此 IAM 资源没有任何 AWS 账户权限。

  • 您的 AWS 账户可以有多个user-role IAM 角色,但您必须将每个 IAM 角色链接到 Red Hat 组织中的每个用户。任何用户都不能拥有多个已链接的user-role IAM 角色。

将您的 IAM 资源“链接”或“关联”到您的 AWS 账户意味着使用您的user-role IAM 角色和 Red Hat OpenShift 集群管理器 AWS 角色创建一个信任策略。创建并链接此 IAM 资源后,您将在 AWS 中看到从您的user-role IAM 角色到arn:aws:iam::710019948333:role/RH-Managed-OpenShift-Installer资源的信任关系。

创建 user-role IAM 角色

您可以使用命令行界面 (CLI) 创建您的user-role IAM 角色。

先决条件
  • 您拥有一个 AWS 账户。

  • 您已在安装主机上安装并配置了最新的 Red Hat OpenShift Service on AWS (ROSA) CLI (rosa)。

步骤
  • 要创建具有基本权限的user-role IAM 角色,请运行以下命令:

    $ rosa create user-role

    此命令允许您通过指定特定属性来创建角色。以下示例输出显示了选择的“自动模式”,该模式允许 ROSA CLI (rosa) 创建您的 Operator 角色和策略。有关更多信息,请参阅其他资源中的“了解自动和手动部署模式”。

示例输出
I: Creating User role
? Role prefix: ManagedOpenShift (1)
? Permissions boundary ARN (optional): (2)
? Role Path (optional): (3)
? Role creation mode: auto (4)
I: Creating ocm user role using 'arn:aws:iam::2066:user'
? Create the 'ManagedOpenShift-User.osdocs-Role' role? Yes (5)
I: Created role 'ManagedOpenShift-User.osdocs-Role' with ARN 'arn:aws:iam::2066:role/ManagedOpenShift-User.osdocs-Role'
I: Linking User role
? User Role ARN: arn:aws:iam::2066:role/ManagedOpenShift-User.osdocs-Role
? Link the 'arn:aws:iam::2066:role/ManagedOpenShift-User.osdocs-Role' role with account '1AGE'? Yes (6)
I: Successfully linked role ARN 'arn:aws:iam::2066:role/ManagedOpenShift-User.osdocs-Role' with account '1AGE'
1 所有已创建 AWS 资源的前缀值。在此示例中,ManagedOpenShift作为所有 AWS 资源的前缀。
2 要设置权限边界的策略的 Amazon 资源名称 (ARN)。
3 为用户名指定 IAM 路径。
4 选择创建 AWS 角色的方法。使用auto,ROSA CLI 会生成并链接角色和策略。在auto模式下,您会收到一些不同的提示来创建 AWS 角色。
5 auto 方法会询问您是否要使用您的前缀创建一个特定的user-role
6 将创建的角色与您的 AWS 组织链接。

如果您在删除集群之前取消链接或删除您的user-role IAM 角色,则会发生错误,阻止您删除集群。您必须创建或重新链接此角色才能继续删除过程。有关更多信息,请参阅修复无法删除的集群

AWS 账户关联

AWS 上的 Red Hat OpenShift 服务 (ROSA) 集群配置任务需要使用您的 Amazon 资源名称 (ARN) 将ocm-roleuser-role IAM 角色链接到您的 AWS 账户。

ocm-role ARN 存储在您的 Red Hat 组织中的标签中,而user-role ARN 存储在您的 Red Hat 用户账户中的标签中。Red Hat 使用这些 ARN 标签来确认用户是有效的账户持有者,并且拥有执行 AWS 账户中必要任务所需的正确权限。

链接您的 AWS 账户

您可以使用 AWS 上的 Red Hat OpenShift 服务 (ROSA) CLI (rosa) 将您的 AWS 账户链接到现有的 IAM 角色。

先决条件
  • 您拥有一个 AWS 账户。

  • 您正在使用OpenShift 集群管理器创建集群。

  • 您拥有安装 AWS 全账户角色所需的权限。有关更多信息,请参阅本节的“其他资源”。

  • 您已在安装主机上安装并配置了最新的 AWS (aws) 和 ROSA (rosa) CLI。

  • 您已创建ocm-roleuser-role IAM 角色,但尚未将它们链接到您的 AWS 账户。您可以通过运行以下命令来检查您的 IAM 角色是否已链接:

    $ rosa list ocm-role
    $ rosa list user-role

    如果Linked列中两个角色都显示Yes,则表示您已将角色链接到 AWS 账户。

步骤
  1. 从 CLI 中,使用您的 Amazon 资源名称 (ARN) 将您的ocm-role 资源链接到您的 Red Hat 组织:

    您必须具有 Red Hat 组织管理员权限才能运行rosa link命令。将ocm-role资源与您的 AWS 账户链接后,组织中的所有用户都可以看到它。

    $ rosa link ocm-role --role-arn <arn>
    示例输出
    I: Linking OCM role
    ? Link the '<AWS ACCOUNT ID>` role with organization '<ORG ID>'? Yes
    I: Successfully linked role-arn '<AWS ACCOUNT ID>' with organization account '<ORG ID>'
  2. 从 CLI 中,使用您的 Amazon 资源名称 (ARN) 将您的user-role 资源链接到您的 Red Hat 用户账户:

    $ rosa link user-role --role-arn <arn>
    示例输出
    I: Linking User role
    ? Link the 'arn:aws:iam::<ARN>:role/ManagedOpenShift-User-Role-125' role with organization '<AWS ID>'? Yes
    I: Successfully linked role-arn 'arn:aws:iam::<ARN>:role/ManagedOpenShift-User-Role-125' with organization account '<AWS ID>'

将多个 AWS 账户与您的 Red Hat 组织关联

您可以将多个 AWS 账户与您的 Red Hat 组织关联。关联多个账户允许您从您的 Red Hat 组织在任何关联的 AWS 账户上创建 AWS 上的 Red Hat OpenShift 服务 (ROSA) 集群。

使用此功能,您可以通过使用多个 AWS 配置文件作为区域绑定环境在不同的 AWS 区域中创建集群。

先决条件
  • 您拥有一个 AWS 账户。

  • 您正在使用OpenShift 集群管理器创建集群。

  • 您拥有安装 AWS 账户范围角色所需的权限。

  • 您已在安装主机上安装并配置了最新的 AWS (aws) 和 ROSA (rosa) CLI。

  • 您已创建您的ocm-roleuser-role IAM 角色。

步骤

要关联其他 AWS 账户,首先在您的本地 AWS 配置中创建一个配置文件。然后,通过在其他 AWS 账户中创建ocm-role、用户和账户角色,将该账户与您的 Red Hat 组织关联。

要在其他区域创建角色,请在运行rosa create命令时指定--profile <aws-profile>参数,并将<aws_profile>替换为其他账户配置文件名称。

  • 在创建 OpenShift 集群管理器角色时指定 AWS 账户配置文件:

    $ rosa create --profile <aws_profile> ocm-role
  • 在创建用户角色时指定 AWS 账户配置文件:

    $ rosa create --profile <aws_profile> user-role
  • 在创建账户角色时指定 AWS 账户配置文件:

    $ rosa create --profile <aws_profile> account-roles

如果您未指定配置文件,则使用默认的 AWS 配置文件。

安装程序角色的权限边界

您可以将策略作为安装程序角色的权限边界应用。您可以使用 AWS 托管策略或客户托管策略来设置 Amazon Web Services (AWS) Identity and Access Management (IAM) 实体(用户或角色)的边界。策略和边界策略的组合限制了用户或角色的最大权限。ROSA 包含一组三个预准备的权限边界策略文件,您可以使用这些文件来限制安装程序角色的权限,因为不支持更改安装程序策略本身。

此功能仅受 AWS 上的 Red Hat OpenShift 服务(经典架构)集群支持。

权限边界策略文件如下:

  • 核心边界策略文件包含 ROSA(经典架构)安装程序安装 AWS 上的 Red Hat OpenShift 服务集群所需的最低权限。安装程序没有创建虚拟私有云 (VPC) 或 PrivateLink (PL) 的权限。需要提供 VPC。

  • VPC 边界策略文件包含 ROSA(经典架构)安装程序创建/管理 VPC 所需的最低权限。它不包含 PL 或核心安装的权限。如果您需要安装一个集群,其权限足以让安装程序安装集群并创建/管理 VPC,但您不需要设置 PL,则将核心和 VPC 边界文件与安装程序角色一起使用。

  • PrivateLink (PL) 边界策略文件包含 ROSA(经典架构)安装程序创建具有集群的 AWS PL 所需的最低权限。它不包含 VPC 或核心安装的权限。在安装期间为所有 PL 集群提供预先创建的 VPC。

使用权限边界策略文件时,适用以下组合:

  • 没有权限边界策略意味着完整的安装程序策略权限将应用于您的集群。

  • 仅核心为安装程序角色设置最严格的权限。VPC 和 PL 权限不包含在仅核心边界策略中。

    • 安装程序无法创建或管理 VPC 或 PL。

    • 您必须拥有客户提供的 VPC,并且 PrivateLink (PL) 不可使用。

  • 核心 + VPC 为安装程序角色设置核心和 VPC 权限。

    • 安装程序无法创建或管理 PL。

    • 假设您未使用自定义/BYO-VPC。

    • 假设安装程序将创建和管理 VPC。

  • 核心 + PrivateLink (PL) 表示安装程序可以配置 PL 基础设施。

    • 您必须拥有客户提供的 VPC。

    • 这是用于具有 PL 的私有集群。

本示例流程适用于具有最严格权限的安装程序角色和策略,仅使用ROSA的核心安装程序权限边界策略。您可以使用AWS控制台或AWS CLI完成此操作。本示例使用AWS CLI和以下策略

sts_installer_core_permission_boundary_policy.json
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
		    "autoscaling:DescribeAutoScalingGroups",
		    "ec2:AllocateAddress",
		    "ec2:AssociateAddress",
		    "ec2:AttachNetworkInterface",
		    "ec2:AuthorizeSecurityGroupEgress",
		    "ec2:AuthorizeSecurityGroupIngress",
		    "ec2:CopyImage",
		    "ec2:CreateNetworkInterface",
		    "ec2:CreateSecurityGroup",
		    "ec2:CreateTags",
		    "ec2:CreateVolume",
		    "ec2:DeleteNetworkInterface",
		    "ec2:DeleteSecurityGroup",
		    "ec2:DeleteSnapshot",
		    "ec2:DeleteTags",
		    "ec2:DeleteVolume",
		    "ec2:DeregisterImage",
		    "ec2:DescribeAccountAttributes",
		    "ec2:DescribeAddresses",
		    "ec2:DescribeAvailabilityZones",
		    "ec2:DescribeDhcpOptions",
		    "ec2:DescribeImages",
		    "ec2:DescribeInstanceAttribute",
		    "ec2:DescribeInstanceCreditSpecifications",
		    "ec2:DescribeInstances",
		    "ec2:DescribeInstanceStatus",
		    "ec2:DescribeInstanceTypeOfferings",
		    "ec2:DescribeInstanceTypes",
		    "ec2:DescribeInternetGateways",
		    "ec2:DescribeKeyPairs",
		    "ec2:DescribeNatGateways",
		    "ec2:DescribeNetworkAcls",
		    "ec2:DescribeNetworkInterfaces",
		    "ec2:DescribePrefixLists",
		    "ec2:DescribeRegions",
		    "ec2:DescribeReservedInstancesOfferings",
		    "ec2:DescribeRouteTables",
		    "ec2:DescribeSecurityGroups",
		    "ec2:DescribeSecurityGroupRules",
		    "ec2:DescribeSubnets",
		    "ec2:DescribeTags",
		    "ec2:DescribeVolumes",
		    "ec2:DescribeVpcAttribute",
		    "ec2:DescribeVpcClassicLink",
		    "ec2:DescribeVpcClassicLinkDnsSupport",
		    "ec2:DescribeVpcEndpoints",
		    "ec2:DescribeVpcs",
		    "ec2:GetConsoleOutput",
		    "ec2:GetEbsDefaultKmsKeyId",
		    "ec2:ModifyInstanceAttribute",
		    "ec2:ModifyNetworkInterfaceAttribute",
		    "ec2:ReleaseAddress",
		    "ec2:RevokeSecurityGroupEgress",
		    "ec2:RevokeSecurityGroupIngress",
		    "ec2:RunInstances",
		    "ec2:StartInstances",
		    "ec2:StopInstances",
		    "ec2:TerminateInstances",
		    "elasticloadbalancing:AddTags",
		    "elasticloadbalancing:ApplySecurityGroupsToLoadBalancer",
		    "elasticloadbalancing:AttachLoadBalancerToSubnets",
		    "elasticloadbalancing:ConfigureHealthCheck",
		    "elasticloadbalancing:CreateListener",
		    "elasticloadbalancing:CreateLoadBalancer",
		    "elasticloadbalancing:CreateLoadBalancerListeners",
		    "elasticloadbalancing:CreateTargetGroup",
		    "elasticloadbalancing:DeleteLoadBalancer",
		    "elasticloadbalancing:DeleteTargetGroup",
		    "elasticloadbalancing:DeregisterInstancesFromLoadBalancer",
		    "elasticloadbalancing:DeregisterTargets",
		    "elasticloadbalancing:DescribeInstanceHealth",
		    "elasticloadbalancing:DescribeListeners",
		    "elasticloadbalancing:DescribeLoadBalancerAttributes",
		    "elasticloadbalancing:DescribeLoadBalancers",
		    "elasticloadbalancing:DescribeTags",
		    "elasticloadbalancing:DescribeTargetGroupAttributes",
		    "elasticloadbalancing:DescribeTargetGroups",
		    "elasticloadbalancing:DescribeTargetHealth",
		    "elasticloadbalancing:ModifyLoadBalancerAttributes",
		    "elasticloadbalancing:ModifyTargetGroup",
		    "elasticloadbalancing:ModifyTargetGroupAttributes",
		    "elasticloadbalancing:RegisterInstancesWithLoadBalancer",
		    "elasticloadbalancing:RegisterTargets",
		    "elasticloadbalancing:SetLoadBalancerPoliciesOfListener",
		    "elasticloadbalancing:SetSecurityGroups",
		    "iam:AddRoleToInstanceProfile",
		    "iam:CreateInstanceProfile",
		    "iam:DeleteInstanceProfile",
		    "iam:GetInstanceProfile",
		    "iam:TagInstanceProfile",
		    "iam:GetRole",
		    "iam:GetRolePolicy",
		    "iam:GetUser",
		    "iam:ListAttachedRolePolicies",
		    "iam:ListInstanceProfiles",
		    "iam:ListInstanceProfilesForRole",
		    "iam:ListRolePolicies",
		    "iam:ListRoles",
		    "iam:ListUserPolicies",
		    "iam:ListUsers",
		    "iam:PassRole",
		    "iam:RemoveRoleFromInstanceProfile",
		    "iam:SimulatePrincipalPolicy",
		    "iam:TagRole",
		    "iam:UntagRole",
		    "route53:ChangeResourceRecordSets",
		    "route53:ChangeTagsForResource",
		    "route53:CreateHostedZone",
		    "route53:DeleteHostedZone",
		    "route53:GetAccountLimit",
		    "route53:GetChange",
		    "route53:GetHostedZone",
		    "route53:ListHostedZones",
		    "route53:ListHostedZonesByName",
		    "route53:ListResourceRecordSets",
		    "route53:ListTagsForResource",
		    "route53:UpdateHostedZoneComment",
		    "s3:CreateBucket",
		    "s3:DeleteBucket",
		    "s3:DeleteObject",
		    "s3:GetAccelerateConfiguration",
		    "s3:GetBucketAcl",
		    "s3:GetBucketCORS",
		    "s3:GetBucketLocation",
		    "s3:GetBucketLogging",
		    "s3:GetBucketObjectLockConfiguration",
		    "s3:GetBucketPolicy",
		    "s3:GetBucketRequestPayment",
		    "s3:GetBucketTagging",
		    "s3:GetBucketVersioning",
		    "s3:GetBucketWebsite",
		    "s3:GetEncryptionConfiguration",
		    "s3:GetLifecycleConfiguration",
		    "s3:GetObject",
		    "s3:GetObjectAcl",
		    "s3:GetObjectTagging",
		    "s3:GetObjectVersion",
		    "s3:GetReplicationConfiguration",
		    "s3:ListBucket",
		    "s3:ListBucketVersions",
		    "s3:PutBucketAcl",
		    "s3:PutBucketPolicy",
		    "s3:PutBucketTagging",
		    "s3:PutEncryptionConfiguration",
		    "s3:PutObject",
		    "s3:PutObjectAcl",
		    "s3:PutObjectTagging",
		    "servicequotas:GetServiceQuota",
		    "servicequotas:ListAWSDefaultServiceQuotas",
		    "sts:AssumeRole",
		    "sts:AssumeRoleWithWebIdentity",
		    "sts:GetCallerIdentity",
		    "tag:GetResources",
		    "tag:UntagResources",
		    "kms:DescribeKey",
		    "cloudwatch:GetMetricData",
		    "ec2:CreateRoute",
		    "ec2:DeleteRoute",
		    "ec2:CreateVpcEndpoint",
		    "ec2:DeleteVpcEndpoints",
		    "ec2:CreateVpcEndpointServiceConfiguration",
		    "ec2:DeleteVpcEndpointServiceConfigurations",
		    "ec2:DescribeVpcEndpointServiceConfigurations",
		    "ec2:DescribeVpcEndpointServicePermissions",
		    "ec2:DescribeVpcEndpointServices",
		    "ec2:ModifyVpcEndpointServicePermissions"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "secretsmanager:GetSecretValue"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/red-hat-managed": "true"
                }
            }
        }
    ]
}

要使用权限边界,您需要准备权限边界策略并将其添加到AWS IAM中的相关安装程序角色。虽然ROSA (rosa) CLI提供权限边界功能,但它适用于所有角色,而不仅仅是安装程序角色,这意味着它不适用于提供的权限边界策略(这些策略仅适用于安装程序角色)。

先决条件
  • 您拥有一个 AWS 账户。

  • 您拥有管理AWS角色和策略所需的权限。

  • 您已在工作站上安装并配置了最新的AWS (aws) 和ROSA (rosa) CLI。

  • 您已准备好ROSA帐户范围内的角色,包括安装程序角色和相应的策略。如果您的AWS帐户中不存在这些角色和策略,请参阅附加资源中的“创建帐户范围的STS角色和策略”。

步骤
  1. 通过在rosa CLI中输入以下命令来准备策略文件

    $ curl -o ./rosa-installer-core.json https://raw.githubusercontent.com/openshift/managed-cluster-config/master/resources/sts/4.17/sts_installer_core_permission_boundary_policy.json
  2. 在AWS中创建策略并通过输入以下命令收集其Amazon资源名称(ARN)

    $ aws iam create-policy \
    --policy-name rosa-core-permissions-boundary-policy \
    --policy-document file://./rosa-installer-core.json \
    --description "ROSA installer core permission boundary policy, the minimum permission set, allows BYO-VPC, disallows PrivateLink"
    示例输出
    {
        "Policy": {
            "PolicyName": "rosa-core-permissions-boundary-policy",
            "PolicyId": "<Policy ID>",
            "Arn": "arn:aws:iam::<account ID>:policy/rosa-core-permissions-boundary-policy",
            "Path": "/",
            "DefaultVersionId": "v1",
            "AttachmentCount": 0,
            "PermissionsBoundaryUsageCount": 0,
            "IsAttachable": true,
            "CreateDate": "<CreateDate>",
            "UpdateDate": "<UpdateDate>"
        }
    }
  3. 通过输入以下命令将权限边界策略添加到您要限制的安装程序角色

    $ aws iam put-role-permissions-boundary \
    --role-name ManagedOpenShift-Installer-Role \
    --permissions-boundary arn:aws:iam::<account ID>:policy/rosa-core-permissions-boundary-policy
  4. 通过在rosa CLI中输入以下命令来显示安装程序角色以验证附加的策略(包括权限边界)

    $ aws iam get-role --role-name ManagedOpenShift-Installer-Role \
    --output text | grep PERMISSIONSBOUNDARY
    示例输出
    PERMISSIONSBOUNDARY	arn:aws:iam::<account ID>:policy/rosa-core-permissions-boundary-policy	Policy

    有关PL和VPC权限边界策略的更多示例,请参阅

    sts_installer_privatelink_permission_boundary_policy.json
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "ec2:ModifyVpcEndpointServiceConfiguration",
            "route53:ListHostedZonesByVPC",
            "route53:CreateVPCAssociationAuthorization",
            "route53:AssociateVPCWithHostedZone",
            "route53:DeleteVPCAssociationAuthorization",
            "route53:DisassociateVPCFromHostedZone",
            "route53:ChangeResourceRecordSets"
          ],
          "Resource": "*"
        }
      ]
    }
    sts_installer_vpc_permission_boundary_policy.json
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
    		    "ec2:AssociateDhcpOptions",
    		    "ec2:AssociateRouteTable",
    		    "ec2:AttachInternetGateway",
    		    "ec2:CreateDhcpOptions",
    		    "ec2:CreateInternetGateway",
    		    "ec2:CreateNatGateway",
    		    "ec2:CreateRouteTable",
    		    "ec2:CreateSubnet",
    		    "ec2:CreateVpc",
    		    "ec2:DeleteDhcpOptions",
    		    "ec2:DeleteInternetGateway",
    		    "ec2:DeleteNatGateway",
    		    "ec2:DeleteRouteTable",
    		    "ec2:DeleteSubnet",
    		    "ec2:DeleteVpc",
    		    "ec2:DetachInternetGateway",
    		    "ec2:DisassociateRouteTable",
    		    "ec2:ModifySubnetAttribute",
    		    "ec2:ModifyVpcAttribute",
    		    "ec2:ReplaceRouteTableAssociation"
                ],
                "Resource": "*"
            }
        ]
    }

附加资源