오류 메시지:
An error occurred (AccessDenied) when calling the ListObjectsV2 operation: Access Denied
이 오류는 AWS S3에서 객체 목록을 가져올 권한이 없을 때 발생합니다.
즉, s3:ListBucket 권한이 부족하거나, S3 버킷 정책 또는 IAM 정책이 적절하게 설정되지 않은 경우에 나타납니다.
✅ 1. 현재 사용자의 권한 확인
먼저, AWS CLI에서 현재 IAM 사용자가 S3 버킷에 대한 권한을 가지고 있는지 확인해야 합니다.
1.1 현재 IAM 사용자 확인
aws sts get-caller-identity
출력 예시:
{
"UserId": "AIDXXXXXXXXXXXXXX",
"Account": "123456789012",
"Arn": "arn:aws:iam::123456789012:user/my-user"
}
👉 여기서 표시된 IAM 사용자(my-user)가 적절한 권한을 가지고 있는지 확인해야 합니다.
1.2 현재 IAM 사용자의 S3 권한 확인
aws iam get-user-policy --user-name my-user --policy-name MyS3Policy
또는 사용자에게 연결된 IAM 역할(Role)의 정책을 확인하려면:
aws iam list-attached-user-policies --user-name my-user
✅ 2. S3 버킷에 대한 권한 부여
사용자 또는 역할(Role)에 올바른 IAM 정책을 추가해야 합니다.
2.1 IAM 정책 추가 (s3:ListBucket 권한)
S3 버킷 내 객체 목록을 가져오려면 s3:ListBucket 권한이 필요합니다.
아래 정책을 IAM 사용자 또는 역할(Role)에 추가하세요.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::your-bucket-name"
},
{
"Effect": "Allow",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::your-bucket-name/*"
}
]
}
📌 IAM 콘솔(AWS Console) → IAM → 사용자(Users) → 사용자 선택 → 권한(Policies) 추가
✅ 3. S3 버킷 정책 확인 및 수정
S3 버킷 자체에 퍼블릭 액세스 제한이 걸려 있거나, 허용되지 않은 IAM 역할 또는 사용자에게 차단된 경우 발생할 수 있습니다.
3.1 현재 S3 버킷 정책 확인
aws s3api get-bucket-policy --bucket your-bucket-name
3.2 버킷 정책 추가
버킷 정책이 없다면, 다음과 같은 정책을 추가해야 합니다.
👉 특정 IAM 사용자만 허용하려면 Principal을 해당 사용자 또는 역할로 설정하세요.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": ["s3:ListBucket"],
"Resource": "arn:aws:s3:::your-bucket-name"
}
]
}
📌 S3 콘솔 → 버킷 선택 → 권한(Permissions) → 버킷 정책(Bucket Policy) 편집
✅ 4. 퍼블릭 액세스 제한 및 ACL 확인
S3 버킷이 퍼블릭 액세스 차단(Block Public Access) 설정이 활성화된 경우, 버킷 정책이 적용되지 않을 수 있습니다.
4.1 퍼블릭 액세스 차단 설정 확인
aws s3api get-public-access-block --bucket your-bucket-name
출력 예시:
{
"PublicAccessBlockConfiguration": {
"BlockPublicAcls": true,
"IgnorePublicAcls": true,
"BlockPublicPolicy": true,
"RestrictPublicBuckets": true
}
}
👉 위 값이 true인 경우 퍼블릭 액세스 차단이 설정됨, 필요 시 수정해야 함.
4.2 퍼블릭 액세스 제한 해제 (필요한 경우)
aws s3api delete-public-access-block --bucket your-bucket-name
✅ 5. AWS Assume Role을 사용하는 경우
EC2, Lambda, EKS 등의 서비스에서 IAM 역할(Role)을 사용하여 S3에 접근하는 경우, 해당 역할에 올바른 정책이 추가되어 있는지 확인해야 합니다.
5.1 현재 역할(Role) 확인
aws sts get-caller-identity
5.2 역할에 대한 권한 추가
AWS IAM 콘솔에서 해당 역할(Role)에 s3:ListBucket 및 s3:GetObject 권한 추가 필요.
🚀 최종 정리
해결 방법실행 명령
현재 IAM 사용자 확인 | aws sts get-caller-identity |
IAM 정책 확인 | aws iam list-attached-user-policies --user-name my-user |
IAM 정책 추가 (s3:ListBucket, s3:GetObject) | IAM 콘솔에서 정책 추가 |
S3 버킷 정책 확인 및 수정 | aws s3api get-bucket-policy --bucket your-bucket-name |
퍼블릭 액세스 차단 확인 및 해제 | aws s3api get-public-access-block --bucket your-bucket-name |
AWS Role을 사용하는 경우 권한 확인 | aws sts get-caller-identity |
이 과정을 수행하면 S3 AccessDenied 오류를 해결하고, AWS에서 S3 객체 목록을 정상적으로 가져올 수 있습니다. 🚀