追加の Session Manager のサンプル IAM ポリシー - AWS Systems Manager

追加の Session Manager のサンプル IAM ポリシー

サポートする Session Manager ユーザーのアクセスシナリオ用のカスタム IAM ポリシーを作成するのに役立つ、次のサンプルポリシーを参照してください。

例 1: 特定のインスタンスへのアクセスを制限する

特定のインスタンスへのアクセスを制限するには、インスタンスの ID を含む IAM ユーザーポリシーを作成します。次の例で、ユーザーは 3 つの特定のインスタンスにのみ 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 タグに基づいて、インスタンスへのアクセスを制限できます。次の例で、ユーザーは、インスタンスが Finance WebServer (ssm:resourceTag/Finance: WebServer) であるという条件で、任意のインスタンス (Resource: arn:aws:ec2:*:*:instance/*) でセッションを (Effect: Allow, Action: ssm:StartSession) 開始することができます。タグが付けられていないか、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 アカウントのユーザーがどのセッションを終了できるかを制御する 2 つの方法があります。

  • AWS Identity and Access Management (IAM) アクセス権限ポリシーで変数 {aws:username} を使用します。ユーザーは、開始したセッションのみを終了できます。この方法は、フェデレーション ID を使用して AWS へのアクセスを許可するアカウントでは機能しません。フェデレーション ID は {aws:username} の代わりに変数 {aws:userid} を使用します。

  • IAM アクセス権限ポリシーで AWS によって提供されたタグを使用します。このポリシーには、AWS によって提供された特定のタグでタグ付けされたセッションのみをユーザーが終了できるようにする条件を含めます。この方法は、フェデレーション ID を使用して AWS へのアクセスを許可するものを含めて、すべてのアカウントで機能します。

方法 1: 変数 {aws:username} を使用して TerminateSession 権限を付与する

次の 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 が提供するタグを使用して TerminateSession 権限を付与する

IAM ユーザーポリシーで特定のタグキー変数を持つ条件を使用して、ユーザーが終了できるセッションを制御できます。この条件では、ユーザーがこれらの特定のタグキー変数と指定された値のいずれかまたは両方でタグ付けされたセッションのみを終了できることを指定します。

AWS アカウントのユーザーがセッションを開始すると、Session Manager は 2 つのリソースタグをセッションに適用します。最初のリソースタグは aws:ssmmessages:target-id で、ユーザーが終了できるターゲットの ID を指定します。もう 1 つのリソースタグは 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 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:userid} 変数は、aws:ssmmessages:session-id に指定する値として使用できます。または、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-id および aws: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": [ "*" ] } ] }