예전에는 동작하던 PROC S3 의 버킷 목록 조회가 어느 시점부터 실패한다. SAS Studio 화면에는 "버킷 콘텐츠를 나열할 수 없습니다. invalid argument" 정도만 나오고 원인이 드러나지 않는다.
compute 세션 로그를 TRACE 로 올려 보면 실제 원인이 보인다.
{"source":"compsrv","timeStamp":"2025-04-08T06:16:52.145000+00:00","version":1}
Unknown element: ChecksumAlgorithm
Amazon S3 의 ListObjects · ListObjectsV2 응답 XML 에 <ChecksumAlgorithm> 요소가 포함되면서, 이 요소를 모르는 오래된 SAS S3 클라이언트가 XML 파싱 단계에서 실패하는 것이다. 객체 자체나 권한 문제가 아니다.
버킷에 예전 객체만 있으면 응답에 해당 요소가 없어 조회가 되고, 새로 올린 객체가 섞이면 실패한다. "어느 날짜까지는 되고 그 뒤로는 안 된다" 는 형태로 나타나는 이유다.
ChecksumAlgorithm 응답 필드는 버킷 정책 · IAM · 요청 헤더 · API 버전 중 어느 것으로도 끌 수 없다. 클라이언트가 모르는 요소를 무시하도록 설계된 필드라 서버 쪽 스위치가 없다.
AWS 가 언제부터 이 필드를 응답에 포함하기 시작했는지는 대화 기록에서 확정되지 않았다 (확인 필요). 원본 대화에서는 2024 년 중반부터 증상이 나타났다고 관찰했으나 공식 공지와 대조하지 못했다.
근본 해결은 S3 클라이언트가 이 요소를 아는 버전으로 올리는 것이다. Viya 버전과 핫픽스 적용 가능 여부는 SAS 기술지원에 문의한다.
당장 돌아가야 하면 목록 조회만 외부 도구로 빼고 SAS 는 결과 파일을 읽게 한다.
aws s3api list-objects-v2 --bucket <bucket> \
--query "Contents[].{Key:Key,Size:Size,LastModified:LastModified}" \
> s3list.json
libname s3j json '/path/s3list.json';
객체 목록 조회(list) 만 깨지고 개별 객체 읽기·쓰기는 영향이 없는 경우가 많으므로, 목록만 우회하면 나머지 코드는 그대로 둘 수 있다.
PROC S3 가 실패하는데 화면 메시지가 불친절하면 compute 세션 로그를 직접 본다. 코드 안에서 %log4sas_logger 로 레벨을 올리는 방식은 Viya 4 에서 동작하지 않으므로 logconfig.xml 쪽을 손대야 한다.
aws s3api 사용법.