IAM 的其他示例 Session Manager 策略 - AWS Systems Manager

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

IAM 的其他示例 Session Manager 策略

请参阅以下示例策略,以帮助您为要支持的任何AWS Identity and Access Management用户访问方案创建自定义 IAM (Session Manager) 策略。

示例 1:限制对特定实例的访问权限

您可以通过创建包含实例的 的 IAM 用户策略来限制对特定IDs实例的访问。在以下示例中,仅允许用户对三个特定实例进行 Session Manager 访问,并且仅允许用户在这些实例上结束自己的会话。如果用户向任何其他实例发送命令或尝试结束任何其他会话,则命令结果将包括 AccessDenied.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssm:StartSession" ], "Resource": [ "arn:aws:ec2:us-east-2:123456789012:instance/i-1234567890EXAMPLE", "arn:aws:ec2:us-east-2:123456789012:instance/i-abcdefghijEXAMPLE", "arn:aws:ec2:us-east-2:123456789012:instance/i-0e9d8c7b6aEXAMPLE" ] }, { "Effect": "Allow", "Action": [ "ssm:TerminateSession" ], "Resource": [ "arn:aws:ssm:*:*:session/${aws:username}-*" ] } ] }

示例 2:基于实例标签限制访问

您可以根据特定的 Amazon EC2 标签限制对实例的访问。在以下示例中,允许用户在任何实例 (Effect: Allow, Action: ssm:StartSession) 上启动会话 (Resource: arn:aws:ec2:region:987654321098:instance/*),条件为实例为 Finance WebServer (ssm:resourceTag/Finance: WebServer)。如果用户向未设置标签或具有除 Finance: WebServer 以外的任意标签的实例发送命令,则命令结果将包括 AccessDenied.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssm:StartSession" ], "Resource": [ "arn:aws:ec2:region:987654321098:instance/*" ], "Condition": { "StringLike": { "ssm:resourceTag/Finance": [ "WebServers" ] } } }, { "Effect": "Allow", "Action": [ "ssm:TerminateSession" ], "Resource": [ "arn:aws:ssm:*:*:session/${aws:username}-*" ] } ] }

您可以创建 IAM 策略来允许用户启动到使用多个标签进行标记的实例的会话。以下策略允许用户启动到同时应用了指定标签的实例的会话。如果用户向未使用这两个标签标记的实例发送命令,则命令结果将包括 AccessDenied.

{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "ssm:StartSession" ], "Resource":"*", "Condition":{ "StringLike":{ "ssm:resourceTag/tag-key1":[ "tag-value1" ], "ssm:resourceTag/tag-key2":[ "tag-value2" ] } } } ] }

有关创建IAM用户策略的更多信息,请参阅 https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html 中的IAM 用户指南托管策略与内联策略。有关标记 实例的更多信息,请参阅 标记托管实例标记 中的Amazon EC2资源Amazon EC2 用户指南(适用于 Linux 实例)(内容适用于 Windows 和 Linux 实例)。有关在实例上提高针对未授权根级别命令的防御安全性的更多信息,请参阅通过 限制对根级命令的访问 SSM 代理

示例 3:仅允许用户结束自己启动的会话

Session Manager 提供了两种方法来控制允许您AWS账户中的用户结束哪些会话。

  • {aws:username} (AWS Identity and Access Management) 权限策略中使用变量 IAM 用户只能结束自己启动的会话。此方法不适用于使用联合身份IDs授予对 的访问权限的账户AWS。联合IDs使用 变量{aws:userid}而不是 {aws:username}

  • 在 AWS 权限策略中使用标签提供的IAM标签。在策略中,您包含一个条件,该条件允许用户仅结束使用 提供的特定标签标记的会话AWS。此方法适用于所有账户,包括使用联合身份IDs授予对 的访问权限的账户AWS。

方法 1:使用 变量授予TerminateSession权限 {aws:username}

以下IAM策略允许用户查看您账户中所有会话IDs的 。但是,用户只能通过其启动的会话与实例交互。分配了以下策略的用户无法连接或结束其他用户的会话。此策略使用变量 {aws:username} 来实现这一目的。

注意

此方法不适用于AWS使用联合身份 授予对 的访问权限的账户IDs。

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "ssm:DescribeSessions" ], "Effect": "Allow", "Resource": [ "*" ] }, { "Action": [ "ssm:TerminateSession" ], "Effect": "Allow", "Resource": [ "arn:aws:ssm:*:*:session/${aws:username}-*" ] } ] }

方法 2:使用 提供的标签授予TerminateSession权限 AWS

您可以通过在 用户策略中使用具有特定标签键变量的条件来控制IAM用户可以结束哪些会话。该条件指定用户只能结束使用这些特定标记键变量和指定值之一或两者标记的会话。

当您AWS账户中的用户启动会话时, Session Manager 会将两个资源标签应用于该会话。第一个资源标签是 aws:ssmmessages:target-id,用它可指定允许用户结束的目标的 ID。另一个资源标签是 aws:ssmmessages:session-id,值的格式为 role-id:caller-specified-role-name.

注意

Session Manager 不支持此 IAM 访问控制策略的自定义标签。您必须使用 提供的资源标签AWS,如下所述。

aws:ssmmessages:target-id

使用此标签键,您可以在策略中包含实例 ID 作为值。在以下策略块中,条件语句允许用户仅结束实例 i-02573cafcfEXAMPLE.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssm:TerminateSession" ], "Resource": "", "Condition": { "StringLike": { "ssm:resourceTag/aws:ssmmessages:target-id": [ "i-02573cafcfEXAMPLE" ] } } } ] }

如果用户尝试结束未获得此 TerminateSession 权限的会话,则会收到 AccessDeniedException 错误。

aws:ssmmessages:session-id

此标签键包含会话 ID 的变量作为请求中的值来启动会话。

以下示例演示了调用方类型为 的情况的策略User。 您为 提供的值aws:ssmmessages:session-id是用户的 ID。在此示例中, AIDIODR4TAW7CSEXAMPLE 表示您AWS账户中的用户的 ID。要检索您AWS账户中的用户的 ID,请使用 IAM 命令 get-user。 有关信息,请参阅 的 部分中的 AWS Identity and Access Management IAM 用户指南get-user

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssm:TerminateSession" ], "Resource": "", "Condition": { "StringLike": { "ssm:resourceTag/aws:ssmmessages:session-id": [ "AIDIODR4TAW7CSEXAMPLE" ] } } } ] }

以下示例演示了调用方类型为 的情况的策略AssumedRole。 您可以对您为 提供的值使用 {aws:userid} 变量aws:ssmmessages:session-id。 或者,您可以对为 提供的值的角色 ID 进行硬编码aws:ssmmessages:session-id。 如果对角色 ID 进行硬编码,则必须以 格式提供值role-id:caller-specified-role-name。 例如,AIDIODR4TAW7CSEXAMPLE:MyRole

重要

为了系统标签得以应用,您提供的角色 ID 只能包含以下字符:Unicode 字母、0-9、空格、_.:/=+-@\.

要检索您AWS账户中角色的角色 ID,请使用 get-caller-identity 命令。有关信息,请参阅 中的 get-caller-identityAWS CLI Command Reference。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssm:TerminateSession" ], "Resource": "", "Condition": { "StringLike": { "ssm:resourceTag/aws:ssmmessages:session-id": [ "${aws:userid}" ] } } } ] }

如果用户尝试结束未获得此 TerminateSession 权限的会话,则会收到 AccessDeniedException 错误。

aws:ssmmessages:target-idaws:ssmmessages:session-id

您还可以创建 IAM 策略,以允许用户结束使用这两个系统标签标记的会话,如本示例中所示。

{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "ssm:TerminateSession" ], "Resource":"*", "Condition":{ "StringLike":{ "ssm:resourceTag/aws:ssmmessages:target-id":[ "instance-id" ], "ssm:resourceTag/aws:ssmmessages:session-id":[ "${aws:username}-*" ] } } } ] }

示例 4:允许对所有会话进行完全(管理)访问

以下IAM策略允许用户与所有实例以及所有用户为所有实例创建的所有会话完全交互。只应将其授予需要完全控制组织的 Session Manager 活动的管理员。

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "ssm:StartSession", "ssm:TerminateSession", "ssm:ResumeSession", "ssm:DescribeSessions", "ssm:GetConnectionStatus" ], "Effect": "Allow", "Resource": [ "*" ] } ] }