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

Session Manager 的其他示例 IAM policy

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

示例 1:在控制台中授予对文档的访问权限

您可以允许用户在使用会话管理器控制台启动会话时指定自定义文档。以下示例 IAM policy 授予访问指定 AWS 区域 和 AWS 账户 中名称以 SessionDocument- 开头的文档的权限。

将每个示例资源占位符替换为您自己的信息。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssm:GetDocument", "ssm:ListDocuments" ], "Resource": [ "arn:aws:ssm:region:account-id:document/SessionDocument-*" ] } ] }
注意

会话管理器控制台仅支持用于定义会话首选项、其 sessionTypeStandard_Stream 的会话文档。有关更多信息,请参阅 会话文档架构

示例 2:限制对特定托管式节点的访问

您可以创建一个 IAM policy,用于定义允许用户使用 Session Manager 连接到哪些托管节点。例如,以下策略将授予用户在三个特定节点上开始、结束和恢复其会话的权限。该策略将限制用户连接到指定节点以外的节点。

注意

有关联合用户的信息,请参阅 示例 4:仅允许用户结束自己启动的会话

{ "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", "arn:aws:ssm:us-east-2:123456789012:document/SSM-SessionManagerRunShell" ] }, { "Effect": "Allow", "Action": [ "ssm:TerminateSession", "ssm:ResumeSession" ], "Resource": [ "arn:aws:ssm:*:*:session/${aws:userid}-*" ] } ] }

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

您可以根据特定标签限制对托管式节点的访问。在以下示例中,允许用户在任何托管式节点 (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:userid}-*" ] }, { "Effect": "Allow", "Action": [ "ssm:StartSession" ], "Resource": [ "arn:aws:ssm:us-east-2:123456789012:document/SSM-SessionManagerRunShell" ] } ] }

您可以创建 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" ] } } }, { "Effect": "Allow", "Action": [ "ssm:StartSession" ], "Resource": [ "arn:aws:ssm:us-east-2:123456789012:document/SSM-SessionManagerRunShell" ] } ] }

有关创建 IAM policy 的更多信息,请参阅《IAM 用户指南》中的托管策略与内联策略。有关标记托管式节点的更多信息,请参阅《Amazon EC2 用户指南》中的标记 Amazon EC2 资源(内容适用于 Windows 和 Linux 托管式节点)。有关在托管式节点上提高针对未授权根级别命令的安保状况的更多信息,请参阅 通过 SSM Agent 限制对根级别命令的访问

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

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

  • 在 AWS Identity and Access Management (IAM) 权限策略中使用变量 {aws:userid}。联合用户只能结束自己启动的会话。对于非联合用户,请使用方法 1。对于联合用户,请使用方法 2。

  • 在 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 policy 中包括条件标签键变量,来控制用户可以结束哪些会话。该条件指定用户只能结束使用这些特定标记键变量和指定值之一或两者标记的会话。

当您的 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-idaws: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:userid}*" ] } } } ] }

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

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

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