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

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

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

例 1: コンソールでドキュメントへのアクセスを許可する

ユーザーが Session Manager コンソールを使用してセッションを開始する場合、カスタムドキュメントを指定できるようにすることができます。次の IAM ポリシーの例では、指定された AWS リージョン および AWS アカウント で SessionDocument- で始まる名前のドキュメントにアクセスする許可を付与します。

このポリシーを使用するには、独自の情報を含むそれぞれのリソースプレースホルダーの例を置き換えます。

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

Session Manager コンソールは、セッションプリファレンスの定義に使用される Standard_StreamsessionType を持つセッションドキュメントのみをサポートします。詳細については、「セッションドキュメントスキーマ」を参照してください。

例 2: 特定のマネージドノードへのアクセスを制限

Session Manager を使用して、ユーザーが接続できるマネージドノードを定義する IAM ポリシーを作成できます。例えば、次のポリシーは、特定の 3 つのノードでセッションを開始、終了、再開するアクセス許可をユーザーに付与します。このポリシーは、指定されたノード以外のノードにユーザーが接続することを制限します。

注記

フェデレーテッドユーザーについては、「例 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: タグに基づいてアクセスを制限

特定のタグに基づいてマネージドノードへのアクセスを制限できます。以下の例では、ノードが財務ウェブサーバー (ssm:resourceTag/Finance: WebServer) であるという条件で、ユーザーは任意のマネージドノード (Resource: arn:aws:ec2:region:987654321098:instance/*) にセッション (Effect: Allow, Action: ssm:StartSession, ssm:ResumeSession) の開始と再開することが許可されます。ユーザーがタグ付けされていない、または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 ポリシーを作成できます。以下のポリシーは、指定されたタグが両方とも適用されたマネージドノードに対してユーザーがセッションを開始することを許可します。ユーザーがこれら両方のタグが付いていないマネージドノードにコマンドを送信した場合、コマンド結果に 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 ポリシーの作成の詳細については、「IAM ユーザーガイド」の「マネージドポリシーとインラインポリシー」を参照してください。マネージドノードへのタグ付けの詳細については、「Amazon EC2 ユーザーガイド」(内容は Windows と Linux のマネージドノードに適用) の「Amazon EC2 リソースのタグ付け」を参照してください。マネージドノードで許可されていないルートレベルのコマンドに対するセキュリティ体制の強化方法の詳細については、 SSM Agent を介してルートレベルコマンドへのアクセスを制限する をご参照ください

例 4: ユーザーが開始したセッションのみを終了できるようにする

Session Manager では、AWS アカウント のフェデレーションユーザーがどのセッションを終了できるかを制御するために、2 つの方法を使用できます。

  • AWS Identity and Access Management (IAM) アクセス権限ポリシーで変数 {aws:userid} を使用します。フェデレーションユーザーは、開始したセッションのみを終了できます。非フェデレーティッドユーザーの場合は、方法 1 を使用します。フェデレーティッドユーザーの場合は、方法 2 を使用します。

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

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 ユーザーガイドの「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 コマンドリファレンスの「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":[ "i-02573cafcfEXAMPLE" ], "ssm:resourceTag/aws:ssmmessages:session-id":[ "${aws:userid}*" ] } } } ] }

例 5: すべてのセッションにフル (管理) アクセスを許可する

以下の IAM ポリシーは、すべてのユーザーがすべてのノード用に作成したすべてのマネージドノードとすべてのセッションに対して、ユーザーが完全にインタラクトすることを許可します。組織の Session Manager のアクティビティを完全に制御する必要がある管理者にのみ付与されます。

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