説明
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で特権モードを無効にしています。残るホストボリュームとその書き込み権限は、別途確認が必要です。