对 WorkSpaces 进行身份和访问管理 - Amazon WorkSpaces

对 WorkSpaces 进行身份和访问管理

默认情况下,IAM 用户无权管理 WorkSpaces 资源和操作。要允许 IAM 用户管理 WorkSpaces 资源,您必须创建一个 IAM 策略以向他们显式授予权限,然后将此策略附加到需要这些权限的 IAM 用户或组。

注意

Amazon WorkSpaces 不支持将 IAM 凭证预调配到 WorkSpace 中(例如使用实例配置文件)。

要提供访问权限,请为您的用户、组或角色添加权限:

以下是 IAM 的其他资源:

策略示例

以下示例显示了您可用于控制 IAM 用户对 Amazon WorkSpaces 的权限的策略语句。

以下策略语句将授予 IAM 用户执行 WorkSpaces 个人任务和池任务的权限。

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ds:*", "workspaces:*", "application-autoscaling:DeleteScalingPolicy", "application-autoscaling:DeleteScheduledAction", "application-autoscaling:DeregisterScalableTarget", "application-autoscaling:DescribeScalableTargets", "application-autoscaling:DescribeScalingActivities", "application-autoscaling:DescribeScalingPolicies", "application-autoscaling:DescribeScheduledActions", "application-autoscaling:PutScalingPolicy", "application-autoscaling:PutScheduledAction", "application-autoscaling:RegisterScalableTarget", "cloudwatch:DeleteAlarms", "cloudwatch:DescribeAlarms", "cloudwatch:PutMetricAlarm", "ec2:AssociateRouteTable", "ec2:AttachInternetGateway", "ec2:AuthorizeSecurityGroupEgress", "ec2:AuthorizeSecurityGroupIngress", "ec2:CreateInternetGateway", "ec2:CreateNetworkInterface", "ec2:CreateRoute", "ec2:CreateRouteTable", "ec2:CreateSecurityGroup", "ec2:CreateSubnet", "ec2:CreateTags", "ec2:CreateVpc", "ec2:DeleteNetworkInterface", "ec2:DeleteSecurityGroup", "ec2:DescribeAvailabilityZones", "ec2:DescribeInternetGateways", "ec2:DescribeNetworkInterfaces", "ec2:DescribeRouteTables", "ec2:DescribeSecurityGroups", "ec2:DescribeSubnets", "ec2:DescribeVpcs", "ec2:RevokeSecurityGroupEgress", "ec2:RevokeSecurityGroupIngress", "iam:AttachRolePolicy", "iam:CreatePolicy", "iam:CreateRole", "iam:GetRole", "iam:ListRoles", "iam:PutRolePolicy", "kms:ListAliases", "kms:ListKeys", "secretsmanager:ListSecrets", "tag:GetResources", "sso-directory:SearchUsers", "sso:CreateApplication", "sso:DeleteApplication", "sso:DescribeApplication", "sso:DescribeInstance", "sso:GetApplicationGrant", "sso:ListInstances", "sso:PutApplicationAssignmentConfiguration", "sso:PutApplicationAuthenticationMethod", "sso:PutApplicationGrant" ], "Resource": "*" }, { "Sid": "iamPassRole", "Effect": "Allow", "Action": "iam:PassRole", "Resource": "*", "Condition": { "StringEquals": { "iam:PassedToService": "workspaces.amazonaws.com" } } } ] }

以下策略语句将授予 IAM 用户执行所有 WorkSpaces 个人任务的权限。

尽管 Amazon WorkSpaces 在使用 API 和命令行工具时完全支持 ActionResource 元素,但要使用AWS 管理控制台中的 Amazon WorkSpaces,IAM 用户必须拥有使用以下操作和资源的权限:

  • 操作:"ds:*"

  • 资源:"Resource": "*"

以下策略示例演示了如何允许 IAM 用户使用AWS 管理控制台中的 Amazon WorkSpaces。

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "workspaces:*", "ds:*", "iam:GetRole", "iam:CreateRole", "iam:PutRolePolicy", "iam:CreatePolicy", "iam:AttachRolePolicy", "iam:ListRoles", "kms:ListAliases", "kms:ListKeys", "ec2:CreateVpc", "ec2:CreateSubnet", "ec2:CreateNetworkInterface", "ec2:CreateInternetGateway", "ec2:CreateRouteTable", "ec2:CreateRoute", "ec2:CreateTags", "ec2:CreateSecurityGroup", "ec2:DescribeInternetGateways", "ec2:DescribeSecurityGroups", "ec2:DescribeRouteTables", "ec2:DescribeVpcs", "ec2:DescribeSubnets", "ec2:DescribeNetworkInterfaces", "ec2:DescribeAvailabilityZones", "ec2:AttachInternetGateway", "ec2:AssociateRouteTable", "ec2:AuthorizeSecurityGroupEgress", "ec2:AuthorizeSecurityGroupIngress", "ec2:DeleteSecurityGroup", "ec2:DeleteNetworkInterface", "ec2:RevokeSecurityGroupEgress", "ec2:RevokeSecurityGroupIngress", "secretsmanager:ListSecrets", "sso-directory:SearchUsers", "sso:CreateApplication", "sso:DeleteApplication", "sso:DescribeApplication", "sso:DescribeInstance", "sso:GetApplicationGrant", "sso:ListInstances", "sso:PutApplicationAssignmentConfiguration", "sso:PutApplicationAuthenticationMethod", "sso:PutApplicationGrant" ], "Resource": "*" }, { "Sid": "iamPassRole", "Effect": "Allow", "Action": "iam:PassRole", "Resource": "*", "Condition": { "StringEquals": { "iam:PassedToService": "workspaces.amazonaws.com" } } } ] }

以下策略语句将授予 IAM 用户执行所有 WorkSpaces Pools 任务的权限。

JSON
{ "Version":"2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "workspaces:*", "application-autoscaling:DeleteScalingPolicy", "application-autoscaling:DeleteScheduledAction", "application-autoscaling:DeregisterScalableTarget", "application-autoscaling:DescribeScalableTargets", "application-autoscaling:DescribeScalingActivities", "application-autoscaling:DescribeScalingPolicies", "application-autoscaling:DescribeScheduledActions", "application-autoscaling:PutScalingPolicy", "application-autoscaling:PutScheduledAction", "application-autoscaling:RegisterScalableTarget", "cloudwatch:DeleteAlarms", "cloudwatch:DescribeAlarms", "cloudwatch:PutMetricAlarm", "ec2:CreateSecurityGroup", "ec2:CreateTags", "ec2:DescribeInternetGateways", "ec2:DescribeRouteTables", "ec2:DescribeSecurityGroups", "ec2:DescribeSubnets", "ec2:DescribeVpcs", "iam:AttachRolePolicy", "iam:CreatePolicy", "iam:CreateRole", "iam:GetRole", "iam:ListRoles", "iam:PutRolePolicy", "secretsmanager:ListSecrets", "tag:GetResources" ], "Resource": "*" }, { "Sid": "iamPassRole", "Effect": "Allow", "Action": "iam:PassRole", "Resource": "*", "Condition": { "StringEquals": { "iam:PassedToService": "workspaces.amazonaws.com" } } }, { "Action": "iam:CreateServiceLinkedRole", "Effect": "Allow", "Resource": "arn:aws:iam::*:role/aws-service-role/workspaces.application-autoscaling.amazonaws.com/AWSServiceRoleForApplicationAutoScaling_WorkSpacesPool", "Condition": { "StringLike": { "iam:AWSServiceName": "workspaces.application-autoscaling.amazonaws.com" } } } ] }

以下策略语句授予 IAM 用户执行所有 WorkSpaces 任务(包括创建自带许可 (BYOL) WorkSpaces 所需的 Amazon EC2 任务)的权限。

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ds:*", "workspaces:*", "ec2:AssociateRouteTable", "ec2:AttachInternetGateway", "ec2:AuthorizeSecurityGroupEgress", "ec2:AuthorizeSecurityGroupIngress", "ec2:CreateInternetGateway", "ec2:CreateNetworkInterface", "ec2:CreateRoute", "ec2:CreateRouteTable", "ec2:CreateSecurityGroup", "ec2:CreateSubnet", "ec2:CreateTags", "ec2:CreateVpc", "ec2:DeleteNetworkInterface", "ec2:DeleteSecurityGroup", "ec2:DescribeAvailabilityZones", "ec2:DescribeImages", "ec2:DescribeInternetGateways", "ec2:DescribeNetworkInterfaces", "ec2:DescribeRouteTables", "ec2:DescribeSecurityGroups", "ec2:DescribeSubnets", "ec2:DescribeVpcs", "ec2:ModifyImageAttribute", "ec2:RevokeSecurityGroupEgress", "ec2:RevokeSecurityGroupIngress", "iam:CreateRole", "iam:GetRole", "iam:PutRolePolicy", "kms:ListAliases", "kms:ListKeys" ], "Resource": "*" }, { "Sid": "iamPassRole", "Effect": "Allow", "Action": "iam:PassRole", "Resource": "*", "Condition": { "StringEquals": { "iam:PassedToService": "workspaces.amazonaws.com" } } } ] }

在 IAM 策略中指定 WorkSpaces 资源

要在策略语句的 Resource 元素中指定 WorkSpaces 资源,请使用资源的 Amazon 资源名称 (ARN)。通过允许或拒绝授予使用在 IAM 策略语句的 Action 元素中指定的 API 操作的权限,您可以控制对 WorkSpaces 资源的访问。WorkSpaces 为 WorkSpaces、捆绑包、IP 组和目录定义 ARN。

WorkSpace ARN 具有以下示例中显示的语法。

arn:aws:workspaces:region:account_id:workspace/workspace_identifier
区域

WorkSpace 所在的区域(例如,us-east-1)。

account_id

AWS 账户的 ID,不含连字符(例如,123456789012)。

workspace_identifier

WorkSpace 的 ID (例如,ws-a1bcd2efg)。

以下是用于标识某个特定 WorkSpace 的策略语句的 Resource 元素的格式。

"Resource": "arn:aws:workspaces:region:account_id:workspace/workspace_identifier"

您可以使用 * 通配符来指定属于特定区域中特定账户的所有 WorkSpaces。

WorkSpace 池 ARN 具有以下示例中显示的语法。

arn:aws:workspaces:region:account_id:workspacespool/workspacespool_identifier
区域

WorkSpace 所在的区域(例如,us-east-1)。

account_id

AWS 账户的 ID,不含连字符(例如,123456789012)。

workspacespool_identifier

WorkSpace 池的 ID(例如,ws-a1bcd2efg)。

以下是用于标识某个特定 WorkSpace 的策略语句的 Resource 元素的格式。

"Resource": "arn:aws:workspaces:region:account_id:workspacespool/workspacespool_identifier"

您可以使用 * 通配符来指定属于特定区域中特定账户的所有 WorkSpaces。

WorkSpace 证书 ARN 具有以下示例中显示的语法。

arn:aws:workspaces:region:account_id:workspacecertificate/workspacecertificateidentifier
区域

WorkSpace 所在的区域(例如,us-east-1)。

account_id

AWS 账户的 ID,不含连字符(例如,123456789012)。

workspacecertificate_identifier

WorkSpace 证书的 ID(例如,ws-a1bcd2efg)。

以下是用于标识某个特定 WorkSpace 证书的策略语句的 Resource 元素的格式。

"Resource": "arn:aws:workspaces:region:account_id:workspacecertificate/workspacecertificate_identifier"

您可以使用 * 通配符来指定属于特定区域中特定账户的所有 WorkSpaces。

WorkSpace 映像 ARN 具有以下示例中显示的语法。

arn:aws:workspaces:region:account_id:workspaceimage/image_identifier
区域

WorkSpace 映像所在的区域(例如,us-east-1)。

account_id

AWS 账户的 ID,不含连字符(例如,123456789012)。

bundle_identifier

WorkSpace 映像的 ID (例如,wsi-a1bcd2efg)。

以下是用于标识某个特定映像的策略语句的 Resource 元素的格式。

"Resource": "arn:aws:workspaces:region:account_id:workspaceimage/image_identifier"

您可以使用 * 通配符来指定属于特定区域中特定账户的所有映像。

服务包 ARN 具有以下示例中显示的语法。

arn:aws:workspaces:region:account_id:workspacebundle/bundle_identifier
区域

WorkSpace 所在的区域(例如,us-east-1)。

account_id

AWS 账户的 ID,不含连字符(例如,123456789012)。

bundle_identifier

WorkSpace 服务包的 ID (例如,wsb-a1bcd2efg)。

以下是用于标识某个特定服务包的策略语句的 Resource 元素的格式。

"Resource": "arn:aws:workspaces:region:account_id:workspacebundle/bundle_identifier"

您可以使用 * 通配符来指定属于特定区域中特定账户的所有捆绑包。

IP 组 ARN 具有以下示例中显示的语法。

arn:aws:workspaces:region:account_id:workspaceipgroup/ipgroup_identifier
区域

WorkSpace 所在的区域(例如,us-east-1)。

account_id

AWS 账户的 ID,不含连字符(例如,123456789012)。

ipgroup_identifier

IP 组的 ID(例如 wsipg-a1bcd2efg)。

以下是用于标识某个特定 IP 组的策略语句的 Resource 元素的格式。

"Resource": "arn:aws:workspaces:region:account_id:workspaceipgroup/ipgroup_identifier"

您可以使用 * 通配符来指定属于特定区域中特定账户的所有 IP 组。

目录 ARN 具有以下示例中显示的语法。

arn:aws:workspaces:region:account_id:directory/directory_identifier
区域

WorkSpace 所在的区域(例如,us-east-1)。

account_id

AWS 账户的 ID,不含连字符(例如,123456789012)。

directory_identifier

目录的 ID(例如 d-12345a67b8)。

以下是用于标识某个特定目录的策略语句的 Resource 元素的格式。

"Resource": "arn:aws:workspaces:region:account_id:directory/directory_identifier"

您可以使用 * 通配符来指定属于特定区域中特定账户的所有目录。

连接别名 ARN 具有以下示例中显示的语法。

arn:aws:workspaces:region:account_id:connectionalias/connectionalias_identifier
区域

连接别名所在的区域(例如,us-east-1)。

account_id

AWS 账户的 ID,不含连字符(例如,123456789012)。

connectionalias_identifier

连接别名的 ID(例如,wsca-12345a67b8)。

以下是用于标识某个特定连接别名的策略语句的 Resource 元素的格式。

"Resource": "arn:aws:workspaces:region:account_id:connectionalias/connectionalias_identifier"

您可以使用 * 通配符来指定属于特定区域中特定账户的所有连接别名。

您不能使用以下 API 操作指定资源 ARN:

  • AssociateIpGroups

  • CreateIpGroup

  • CreateTags

  • DeleteTags

  • DeleteWorkspaceImage

  • DescribeAccount

  • DescribeAccountModifications

  • DescribeIpGroups

  • DescribeTags

  • DescribeWorkspaceDirectories

  • DescribeWorkspaceImages

  • DescribeWorkspaces

  • DescribeWorkspacesConnectionStatus

  • DisassociateIpGroups

  • ImportWorkspaceImage

  • ListAvailableManagementCidrRanges

  • ModifyAccount

对于不支持资源级权限的 API 操作,必须指定以下示例中显示的资源语句。

"Resource": "*"

对于以下 API 操作,当资源不归账户所有时,您无法在资源 ARN 中指定账户 ID:

  • AssociateConnectionAlias

  • CopyWorkspaceImage

  • DisassociateConnectionAlias

对于这些 API 操作,只有当该账户拥有要处理的资源时,您才能在资源 ARN 中指定账户 ID。当账户不拥有资源时,您必须为账户 ID 指定 *,如以下示例中所示。

"arn:aws:workspaces:region:*:resource_type/resource_identifier"

创建 workspaces_DefaultRole 角色

在使用 API 注册目录之前,必须验证名为 workspaces_DefaultRole 的角色是否存在。此角色由快速设置功能创建,或者如果您使用AWS 管理控制台启动 WorkSpace,则它会向 Amazon WorkSpaces 授予代表您访问特定 AWS 资源的权限。如果此角色不存在,您可以使用以下程序创建它。

创建 workspaces_DefaultRole 角色
  1. 登录 AWS 管理控制台,然后通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/

  2. 在左侧的导航窗格中,选择角色

  3. 选择创建角色

  4. 选择受信任实体的类型下,选择其他 AWS 账户

  5. 对于账户 ID,请输入没有连字符或空格的账户 ID。

  6. 对于选项,请勿指定多重验证 (MFA)。

  7. 选择下一步: 权限

  8. 附加权限策略页面上,选择 AWS 托管策略 AmazonWorkSpacesServiceAccessAmazonWorkSpacesSelfServiceAccessAmazonWorkSpacesPoolServiceAccess。有关这些托管策略的更多信息,请参阅WorkSpaces 的 AWS 托管策略

  9. 设置权限边界下,建议您不要使用权限边界,因为可能会与附加到此角色的策略发生冲突。此类冲突可能会阻止角色的某些必要权限。

  10. 选择下一步:标签

  11. Add tags (optional) (添加标签(可选)) 页面上,根据需要添加标签。

  12. 选择下一步:审核

  13. 审核页面上,对于角色名称,输入 workspaces_DefaultRole

  14. (可选)对于角色描述,请输入描述。

  15. 选择创建角色

  16. 在 workspaces_DefaultRole 角色的摘要页面上,选择信任关系选项卡。

  17. 信任关系选项卡上,选择编辑信任关系

  18. 编辑信任关系页面上,将现有策略语句替换为以下语句。

    { "Statement": [ { "Effect": "Allow", "Principal": { "Service": "workspaces.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
  19. 选择更新信任策略

创建 AmazonWorkSpacesPCAAccess 服务角色

在用户使用基于证书的身份验证方式登录之前,您必须先验证名为 AmazonWorkSpacesPCAAccess 的角色是否存在。此角色是在您使用AWS 管理控制台对目录进行基于证书的身份验证时创建的,它授予 Amazon WorkSpaces 代表您访问 AWS 私有 CA 资源的权限。如果由于您未使用控制台管理基于证书的身份验证而导致此角色不存在,则您可以使用以下步骤创建此角色。

使用 AWS CLI 创建 AmazonWorkSpacesPCAAccess 服务角色
  1. 使用以下文本创建名为 AmazonWorkSpacesPCAAccess.json 的 JSON 文件。

    JSON
    { "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "prod.euc.ecm.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
  2. 根据需要调整 AmazonWorkSpacesPCAAccess.json 路径并运行以下 AWS CLI 命令来创建服务角色,同时附加 AmazonWorkSpaces PCAAccess 托管策略。

    aws iam create-role --path /service-role/ --role-name AmazonWorkSpacesPCAAccess --assume-role-policy-document file://AmazonWorkSpacesPCAAccess.json
    aws iam attach-role-policy —role-name AmazonWorkSpacesPCAAccess —policy-arn arn:aws:iam::aws:policy/AmazonWorkspacesPCAAccess