databricks에서 s3 bucket에 csv 형태로 저장하려니 다음과 같은 에러가 발생하였다.
실행 코드
login_history = spark.read.table("t_login_history").filter((first_date <= col('login_dtm')) & (col('login_dtm') < dt))
login_history.coalesce(1).write.mode('overwrite').option('header', 'true').csv(temp_path)
발생 Error
java.nio.file.AccessDeniedException
bucket에 접근 할 수 있는 IAM 사용자 권한 설정만 하면 되는 줄 알았는데 bucket 정책도 설정하여 상호작용으로 둘 다 설정해야하는 것이었다.
bucket 정책 설정
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "GEO_MI permissions",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::9xxxxxxxxx8:role/iam-role"
},
"Action": [
"s3:GetBucketLocation",
"s3:ListBucket",
"s3:PutObject",
"s3:GetObject",
"s3:DeleteObject",
"s3:PutObjectAcl"
],
"Resource": [
"arn:aws:s3:::bucket-name",
"arn:aws:s3:::bucket-name/*"
]
},
{
"Sid": "AllowSSLRequestsOnly",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::bucket-name",
"arn:aws:s3:::bucket-name/*"
],
"Condition": {
"Bool": {
"aws:SecureTransport": "false"
}
}
}
]
}
아래 AllowSSLRequestsOnly 설정은 보안 설정으로 SSL을 사용하지 않는 요청은 거절하는 설정이다.