AWS CLI でセッションドキュメントのアクセス許可チェックを適用する - AWS Systems Manager

AWS CLI でセッションドキュメントのアクセス許可チェックを適用する

アカウントに Session Manager を設定すると、システムでは Session タイプのドキュメント SSM-SessionManagerRunShell が作成されます。このドキュメントには、セッションデータを Amazon Simple Storage Service (Amazon S3) バケットまたは Amazon CloudWatch Logs グループに保存するか、AWS Key Management Service (AWS KMS) を使用してセッションデータを暗号化するか、セッションで Run As サポートを有効にするかなど、セッションの設定が保存されます。次に例を示します。

{ "schemaVersion": "1.0", "description": "Document to hold regional settings for Session Manager", "sessionType": "Standard_Stream", "inputs": { "s3BucketName": "doc-example-bucket", "s3KeyPrefix": "BucketPrefix", "s3EncryptionEnabled": true, "cloudWatchLogGroupName": "LogGroupName", "cloudWatchEncryptionEnabled": true, "kmsKeyId": "kms-key", "runAsEnabled": true, "runAsDefaultUser": "RunAsUser" } }

デフォルトでは、AWS Identity and Access Management (IAM) ユーザーポリシーでセッションを開始するアクセス許可がアカウントのユーザーに付与されている場合、そのユーザーはこの SSM-SessionManagerRunShell SSM ドキュメントにアクセスできます。つまり、AWS CLI を使用して start-session コマンドを実行し、--document-name オプションでドキュメントを指定しない場合、システムは SSM-SessionManagerRunShell を使用してセッションを開始します。セッションは、ユーザーの IAM ポリシーで SSM-SessionManagerRunShell ドキュメントへのアクセスが明示的に許可されていない場合でも開始されます。

例えば、以下のコマンドではセッションドキュメントを指定していません。

aws ssm start-session \ --target i-02573cafcfEXAMPLE

以下の例では、デフォルトの Session Manager セッションドキュメントを指定しています。

aws ssm start-session \ --document-name SSM-SessionManagerRunShell \ --target i-02573cafcfEXAMPLE

デフォルトまたは任意のセッションドキュメントへのアクセスを制限するには、ユーザーにセッションドキュメントへのアクセスが明示的に許可されているかどうかを検証する条件要素を、ユーザーの IAM ポリシーに追加できます。この条件が適用されると、ユーザーは --document-name start-session コマンドの AWS CLI オプションの値を指定する必要があります。この値は、デフォルトの Session Manager セッションドキュメントまたは作成したカスタムのセッションドキュメントのいずれかです。以下の条件要素を IAM ポリシーの ssm:StartSession アクションに追加すると、その要素によってセッションドキュメントのアクセスチェックが実行されます。

"Condition": { "BoolIfExists": { "ssm:SessionDocumentAccessCheck": "true" } }

この条件要素を true に設定した場合、ユーザーがセッションを開始するためには、IAM ポリシーでセッションドキュメントへのアクセスが明示的に許可されている必要があります。条件エレメントが強制されるようにするには、ssm:StartSession アクションが許可されているすべてのポリシーステートメントにこのエレメントを含める必要があります。次に例を示します。

{ "Effect": "Allow", "Action": [ "ssm:StartSession" ], "Resource": [ "arn:aws:ec2:us-west-2:123456789012:instance/i-02573cafcfEXAMPLE", "arn:aws:ssm:us-west-2:123456789012:document/SSM-SessionManagerRunShell" ] }

SessionDocumentAccessCheck の条件エレメントが false に設定されていても、IAM ポリシーの評価には影響しません。つまり、SessionDocumentAccessCheck 条件エレメントが true に設定されており、Resource でドキュメント名を指定している場合は、セッションの開始時に指定したドキュメント名を提供する必要があります。セッションの開始時に別のドキュメント名を指定すると、リクエストは失敗します。

SessionDocumentAccessCheck 条件エレメントが false に設定されており、Resource でドキュメント名を指定していない場合は、セッションの開始時に指定したドキュメント名を提供する必要はありません。デフォルトで、SSM-SessionManagerRunShell ドキュメントがリクエストで使用されます。

IAM ポリシーで Session Manager セッションドキュメントを指定する例については、「クイックスタート Session Manager のエンドユーザーポリシー」を参照してください。

その他のシナリオ

SSM-SessionManagerRunShell CLI コマンドからドキュメント名を省略できるのは、デフォルトの start-session セッションドキュメントを使用する場合のみです。それ以外の場合、ユーザーは --document-name start-session コマンドの AWS CLI オプションに値を指定する必要があります。ユーザーは指定したセッションドキュメントへのアクセスが明示的に許可されているかどうかが、システムによってチェックされます。

例えば、お客様が作成したカスタムのセッションドキュメントの名前をユーザーが指定する場合は、ユーザーの IAM ポリシーで、そのドキュメントへのアクセスをユーザーに許可する必要があります。

ユーザーが SSH を使用してセッションを開始するコマンドを実行する場合は、ユーザーのポリシーで、AWS-StartSSHSession セッションドキュメントへのアクセスをユーザーに許可する必要があります。

注記

SSH を使用してセッションを開始する場合、ターゲットのマネージドノードとユーザーのローカルマシンの両方に対して設定手順を完了する必要があります。詳細については、「(オプション) Session Manager を通して SSH 接続のアクセス許可を有効にして制御する」を参照してください。