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 接続のアクセス許可を有効にして制御する」を参照してください。