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

Session Manager 的其他示例 IAM 策略

请参阅以下示例策略,以帮助您为要支持的任何 Session Manager 用户访问场景创建自定义 IAM 策略。

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

您可以通过创建包含实例 ID 的 IAM 用户策略来限制对特定实例的访问。在以下示例中,仅允许用户对三个特定实例进行 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 标签限制对实例的访问。在以下示例中,允许用户在任何实例 (Resource: arn:aws:ec2:*:*:instance/*) 上启动会话 Effect: Allow, Action: ssm:StartSession),条件是实例为 Finance WebServer (ssm:resourceTag/Finance: WebServer)。如果用户向未设置标签或具有除 Finance: WebServer 以外的任意标签的实例发送命令,则命令结果将包括 AccessDenied

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssm:StartSession" ], "Resource": [ "arn:aws:ec2:*:*: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 用户策略的更多信息,请参阅 IAM User Guide 中的托管策略与内联策略。有关标记实例的更多信息,请参阅 Amazon EC2 User Guide for Linux Instances 中的标记 Amazon EC2 资源(内容适用于 Windows 和 Linux 实例)。有关在实例上提高针对未授权根级别命令的防御安全性的更多信息,请参阅通过 SSM 代理限制对根级别命令的访问

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

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

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

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

方法 1:使用变量 {aws:username} 授予终止会话权限

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

注意

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

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

方法 2:使用 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 的变量作为请求中的值来启动会话。

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

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

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

重要

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

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

{ "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": [ "*" ] } ] }