Session Manager 的其他示例 IAM policy - AWS Systems Manager

Session Manager 的其他示例 IAM policy

请参阅以下示例策略,以帮助您为要支持的任何 Session Manager 用户访问场景创建自定义 AWS Identity and Access Management (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", "ssm:ResumeSession" ], "Resource": [ "arn:aws:ssm:*:*:session/${aws:username}-*" ] } ] }

示例 2:根据标签限制访问

您可以根据特定标签限制对托管式节点的访问。在以下示例中,允许用户在任何托管式节点 (Effect: Allow, Action: ssm:StartSession, ssm:ResumeSession) 上启动和恢复会话 (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:us-east-2:123456789012:instance/*" ], "Condition": { "StringLike": { "ssm:resourceTag/Finance": [ "WebServers" ] } } }, { "Effect": "Allow", "Action": [ "ssm:TerminateSession", "ssm:ResumeSession" ], "Resource": [ "arn:aws:ssm:*:*:session/${aws:username}-*" ] } ] }

您可以创建 IAM policy 来允许用户启动与使用多个标签标记的托管式节点的会话。以下策略允许用户启动与应用了指定标签的托管式节点的会话。如果用户向未使用这些标签标记的托管式节点发送命令,则命令结果将包括 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 用户指南中的托管式策略与内联策略。有关标记托管式节点的更多信息,请参阅适用于 Linux 实例的 Amazon EC2 用户指南(内容适用于 Windows 和 Linux 托管式节点)中的 标记托管式节点标记 Amazon EC2 资源。有关在托管式节点上提高针对未授权根级别命令的安保状况的更多信息,请参阅 通过 SSM Agent 限制对根级别命令的访问

示例 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 policy 允许用户查看您账户中所有会话的 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 提供的标签授予 TerminateSession 权限

您可以通过在 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。有关信息,请参阅《IAM 用户指南》中 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 命令参考中的 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-id–和–aws:ssmmessages:session-id

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

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

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

以下 IAM policy 允许用户与所有托管式节点以及所有用户为所有节点创建的所有会话进行不受限制的交互。只应将其授予需要完全控制组织的 Session Manager 活动的管理员。

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