特権モードが有効な AWS Batch ジョブ定義

CloudFormation の AWS Batch ジョブ定義で特権モードを確認し、不要なホスト権限を減らします。

説明

CloudFormation の AWS::Batch::JobDefinition で ContainerProperties.Privileged を有効にすると、コンテナーがホストに対して強い権限を持ち、ジョブが侵害されたときの影響が大きくなる可能性があります。ReadonlyRootFilesystem: true を併用しても、特権モードや別途設定した書き込み可能なホストマウントは無効になりません。Fargate のジョブでは特権モードを使用できません。

想定される影響

  • 侵害されたジョブが、ホストのデバイスやリソースに対する強い権限を悪用する可能性があります。
  • ジョブのコードに問題があると、同じホスト上のほかのジョブに影響が及ぶおそれがあります。

対処方法

  • ContainerProperties.Privileged を false にするか省略してください。
  • ホストマウント、デバイスアクセス、ジョブのロールをそれぞれ確認し、実際に必要な範囲だけを許可してください。
  • 変更したジョブ定義の新しいリビジョンでテストし、投入するジョブもそのリビジョンを使うことを確認してください。

例

JobRoleArn: String のプレースホルダーを有効なジョブロールの ARN に置き換え、イメージとホストのパスも実環境に合わせて確認してください。どちらの例も書き込み可能なホストマウントを使用しているため、必要性とアクセス範囲を確認してください。

変更前

yaml
AWSTemplateFormatVersion: "2010-09-09"
Description: "BatchJobDefinition"
Resources:
  JobDefinition:
    Type: AWS::Batch::JobDefinition
    Properties:
      Type: container
      JobDefinitionName: nvidia-smi
      ContainerProperties:
        MountPoints:
          - ReadOnly: false
            SourceVolume: nvidia
            ContainerPath: /usr/local/nvidia
        Volumes:
          - Host:
              SourcePath: /var/lib/nvidia-docker/volumes/nvidia_driver/latest
            Name: nvidia
        Command:
          - nvidia-smi
        Memory: 2000
        Privileged: true
        JobRoleArn: String
        ReadonlyRootFilesystem: true
        Vcpus: 2
        Image: nvidia/cuda

変更後

yaml
AWSTemplateFormatVersion: "2010-09-09"
Description: "BatchJobDefinition"
Resources:
  JobDefinition:
    Type: AWS::Batch::JobDefinition
    Properties:
      Type: container
      JobDefinitionName: nvidia-smi
      ContainerProperties:
        MountPoints:
          - ReadOnly: false
            SourceVolume: nvidia
            ContainerPath: /usr/local/nvidia
        Volumes:
          - Host:
              SourcePath: /var/lib/nvidia-docker/volumes/nvidia_driver/latest
            Name: nvidia
        Command:
          - nvidia-smi
        Memory: 2000
        Privileged: false
        JobRoleArn: String
        ReadonlyRootFilesystem: true
        Vcpus: 2
        Image: nvidia/cuda

説明:

  • 変更前: Privileged: true により、ホスト上の強い権限が与えられます。ルートファイルシステムを読み取り専用にしても、その権限は制限されません。
  • 変更後: Privileged: false で特権モードを無効にしています。残るホストボリュームとその書き込み権限は、別途確認が必要です。

参考資料