허용 된 답변과 동일한 방향이지만 작은 (중요한) 차이점이 있으며 자세한 내용을 추가하는 답변을 추가하고 있습니다.
아래 구성을 고려하십시오.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["s3:ListBucket"],
"Resource": ["arn:aws:s3:::<Bucket-Name>"]
},
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:DeleteObject"
],
"Resource": ["arn:aws:s3:::<Bucket-Name>/*"]
}
]
}
이 정책은 프로그래밍 방식의 쓰기-삭제 액세스 권한을 부여하며 두 부분으로 구분됩니다.
이 ListBucket
작업은 버킷 수준에 대한 권한을 제공하고 다른 PutObject/DeleteObject
작업에는 버킷 내부의 객체에 대한 권한이 필요합니다.
첫 번째 Resource 요소 는 애플리케이션이 버킷의 모든 객체를 나열 할 수 있도록 작업에 arn:aws:s3:::<Bucket-Name>
대해 지정합니다 ListBucket
.
두 번째 Resource 요소 는 응용 프로그램이 버킷의 객체를 쓰거나 삭제할 수 있도록 및 작업에 arn:aws:s3:::<Bucket-Name>/*
대해 지정합니다 .PutObject
DeletObject
버킷 수준 및 객체 수준의 세분화 된 권한을 지정하려면 보안상의 이유로 두 가지 '원'으로 분리하는 것이 중요합니다.
GetObject
두 번째 블록 에만 지정 하면 프로그래밍 방식 액세스의 경우 다음과 같은 오류가 발생합니다.
Upload failed: <file-name> to <bucket-name>:<path-in-bucket> An error occurred (AccessDenied) when calling the PutObject operation: Access Denied
.
aws
한 사용자에 대해 구성 하고 다른 사용자의 cronjob이라는 bash 스크립트 내에서 사용했습니다. 즉, 액세스 키와 액세스 토큰이 잘못 / 설정 해제되었음을 의미합니다. 내 해결책은 여기에 설명 된대로 자격 증명 (AWS_ACCESS_KEY_ID
및AWS_SECRET_ACCESS_KEY
)을 bash 스크립트 파일 에 직접 넣는 것 입니다.