Laravel对接AWS S3使用客户托管CMK的配置修改方法咨询
适配客户托管CMK的Laravel S3配置修改方案
- 首先确认
AWS_SERVER_SIDE_ENCRYPTION环境变量值设置为aws:kms,客户托管CMK强制要求使用该加密类型 - 在
s3配置的options数组中新增SSEKMSKeyId参数,传入你在AWS KMS中创建的客户托管CMK的ARN(推荐使用ARN避免跨区域、跨账号场景下的识别歧义) - 确保你使用的AWS访问密钥对应的IAM身份,已被授予对应CMK的kms:GenerateDataKey、kms:Decrypt权限,否则上传/读取文件时会触发权限报错
修改后的config/filesystems.php完整S3配置如下:
's3' => [ 'driver' => 's3', 'key' => env('AWS_ACCESS_KEY_ID'), 'secret' => env('AWS_SECRET_ACCESS_KEY'), 'region' => env('AWS_DEFAULT_REGION'), 'bucket' => env('AWS_BUCKET'), 'url' => env('AWS_URL'), 'endpoint' => env('AWS_ENDPOINT'), 'options' => [ 'ServerSideEncryption' => env('AWS_SERVER_SIDE_ENCRYPTION'), // 新增客户托管CMK配置项 'SSEKMSKeyId' => env('AWS_S3_KMS_KEY_ID'), ], ],
对应.env文件新增配置示例:
# 客户托管CMK加密类型固定为aws:kms AWS_SERVER_SIDE_ENCRYPTION=aws:kms # 替换为你的CMK实际ARN,格式参考:arn:aws:kms:区域:账号ID:key/密钥ID AWS_S3_KMS_KEY_ID=arn:aws:kms:us-east-1:123456789012:key/12345678-1234-1234-1234-1234567890ab
如果需要对个别文件使用不同的CMK加密,可在上传时手动指定参数覆盖全局配置:
Storage::disk('s3')->put('example.txt', $fileContent, [ 'SSEKMSKeyId' => '其他CMK的ARN' ]);
内容的提问来源于stack exchange,提问作者matt
相关产品推荐
相关产品推荐

