파일 게이트웨이의 CloudWatch 상태 로그에서 S3AccessDenied 오류를 해결하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2020년 9월 25일

AWS Storage Gateway의 네트워크 파일 시스템 (NFS) 또는 서버 메시지 블록(SMB) 파일 공유에 액세스하려고 합니다. 그러나 Amazon CloudWatch의 파일 게이트웨이의 상태 로그에 S3AccessDenied 오류가 표시됩니다. 이 문제를 해결하려면 어떻게 해야 합니까?

해결 방법

S3AccessDenied 오류를 해결하려면 파일 공유와 연결된 사용 권한 정책을 검토해야 합니다. 그런 다음 누락된 필요한 사용 권한을 추가해야 합니다. 액세스 거부 오류가 발생한 시점을 기준으로 검토해야 하는 권한을 식별합니다.

  • 파일 공유 생성 및 파일 공유가 생성 중 또는 사용할 수 없는 상태에서 멈춤
  • 파일 공유에 파일 쓰기
  • 파일 공유에서 파일 읽기

파일 공유 생성 및 파일 공유가 생성 중 또는 사용할 수 없는 상태에서 멈춤

파일 공유를 생성할 때 액세스 거부 오류가 발생하고 파일 공유가 생성 중 또는 사용할 수 없는 상태로 멈춘 경우 CloudWatch 로그는 다음과 유사합니다.

{
"severity": "ERROR",
"bucket": "AWSDOC-EXAMPLE-BUCKET",
"prefix": "",
"roleArn": "arn:aws:iam::123456789:role/service-role/StorageGatewayBucketAccessRolec6914add-b232-40dc-abef-4a9eeaaed8",
"source": "share-ABCD1234",
"type": "S3AccessDenied",
"operation": "s3:ListObjects",
"gateway": "sgw-ABCD1234",
"timestamp": "1597486809991"
}

다음 사용 권한 설정을 검토합니다.

1.    파일 공유와 연결된 AWS Identity and Access Management(IAM) 역할을 확인하여 연결된 Amazon Simple Storage Service(Amazon S3) 버킷에 대해 다음과 같은 권한이 있는지 확인합니다.

  • s3:GetBucketLocation
  • s3:ListBucket

2.    연결된 버킷의 버킷 정책을 검토하여 다음 권한에 필요한 액세스를 차단하는 명시적 거부 문("Effect": "Deny")이 없는지 확인합니다.

  • s3:GetBucketLocation
  • s3:ListBucket

3.    파일 게이트웨이가 있는 Amazon Virtual Private Cloud(Amazon VPC)가 Amazon S3용 VPC 엔드포인트를 사용하는 경우 VPC 엔드포인트 정책을 검토합니다. 정책에서 파일 게이트웨이가 S3 버킷 및 객체에 액세스할 수 있도록 허용하는지 확인합니다.

파일 공유에 파일 쓰기

파일 공유에 파일을 쓸 때 액세스 거부 오류가 발생하면 CloudWatch 로그는 다음과 유사합니다.

{
"severity": "ERROR",
"bucket": "AWSDOC-EXAMPLE-BUCKET",
"prefix": "/test1",
"roleArn": "arn:aws:iam::123456789:role/service-role/StorageGatewayBucketAccessRole0617b6ee-4809-48bc-b646-8dda9e9c32",
"source": "share-ABCD1234",
"type": "S3AccessDenied",
"operation": "S3Upload",
"gateway": "sgw-ABCD1234",
"timestamp": "1597493322178"
}

다음 사용 권한 설정을 검토합니다.

1.    파일 공유와 연결된 IAM 역할을 확인하여 연결된 Amazon S3 버킷에 대해 다음과 같은 권한이 있는지 확인합니다.

  • s3:PutObject
  • s3:PutObjectAcl

2.    연결된 버킷의 버킷 정책을 검토하여 다음 권한에 필요한 액세스를 차단하는 명시적 거부 문("Effect": "Deny")이 없는지 확인합니다.

  • s3:PutObject
  • s3:PutObjectAcl

3.    파일 게이트웨이가 있는 Amazon VPC에서 Amazon S3용 VPC 엔드포인트를 사용하는 경우 VPC 엔드포인트 정책을 검토합니다. 정책에서 파일 게이트웨이가 S3 버킷 및 객체에 액세스할 수 있도록 허용하는지 확인합니다.

4.    연결된 S3 버킷이 AWS Key Management Service(AWS KMS)로 암호화되면 암호화 키의 정책을 검토합니다. 키 정책은 파일 공유와 연결된 IAM 역할에 다음 권한을 부여해야 합니다.

  • kms:Decrypt
  • kms:Encrypt
  • kms:ReEncrypt
  • kms:GenerateDataKey
  • kms:DescribeKey*

파일 공유의 IAM 역할과 AWS KMS 키가 서로 다른 AWS 계정에 속해 있는 경우 이러한 권한은 키 정책과 IAM 역할의 정책 모두에서 설정되어야 합니다.

파일 공유에서 파일 읽기

파일 공유에서 파일을 읽을 때 액세스 거부 오류가 발생하면 CloudWatch 로그는 다음과 유사합니다.

{
"severity": "ERROR",
"bucket": "AWSDOC-EXAMPLE-BUCKET",
"prefix": "/test1",
"roleArn": "arn:aws:iam::123456789:role/service-role/StorageGatewayBucketAccessRole0617b6ee-4809-48bc-b646-8dda9e9c32",
"source": "share-ABCD1234",
"type": "S3AccessDenied",
"operation": "s3:HeadObject",
"gateway": "sgw-ABCD12347",
"timestamp": "1597488260202"
}

다음 사용 권한 설정을 검토합니다.

1.    파일 공유와 연결된 IAM 역할을 확인하여 연결된 Amazon S3 버킷에 대해 다음과 같은 권한이 있는지 확인합니다.

  • s3:GetObject
  • s3:GetObjectAcl

2.    연결된 버킷의 버킷 정책을 검토하여 다음 권한에 필요한 액세스를 차단하는 명시적 거부 문("Effect": "Deny")이 없는지 확인합니다.

  • s3:GetObject
  • s3:GetObjectAcl

3.    파일 게이트웨이가 있는 Amazon VPC에서 Amazon S3용 VPC 엔드포인트를 사용하는 경우 VPC 엔드포인트 정책을 검토합니다. 정책에서 파일 게이트웨이가 S3 버킷 및 객체에 액세스할 수 있도록 허용하는지 확인합니다.

4.    연결된 S3 버킷이 AWS KMS로 암호화되면 암호화 키의 정책을 검토합니다. 키 정책은 파일 공유와 연결된 IAM 역할에 다음 권한을 부여해야 합니다.

  • kms:Decrypt
  • kms:Encrypt
  • kms:ReEncrypt
  • kms:GenerateDataKey
  • kms:DescribeKey*

파일 공유의 IAM 역할과 AWS KMS 키가 서로 다른 AWS 계정에 속해 있는 경우 이러한 권한은 키 정책과 IAM 역할의 정책 모두에서 설정되어야 합니다.

참고: 다음 예제 IAM 정책은 버킷에서 객체를 업로드, 다운로드 및 삭제하는 것은 물론 버킷을 나열하는 데 필요한 권한을 파일 공유에 부여합니다(AWSDOC-EXAMPLE-BACKE).

{
"Version": "2012-10-17",
"Statement": [{
"Action": [
"s3:GetAccelerateConfiguration",
"s3:GetBucketLocation",
"s3:GetBucketVersioning",
"s3:ListBucket",
"s3:ListBucketVersions",
"s3:ListBucketMultipartUploads"
],
"Resource": "arn:aws:s3:::AWSDOC-EXAMPLE-BUCKET",
"Effect": "Allow"
},
{
"Action": [
"s3:AbortMultipartUpload",
"s3:DeleteObject",
"s3:DeleteObjectVersion",
"s3:GetObject",
"s3:GetObjectAcl",
"s3:GetObjectVersion",
"s3:ListMultipartUploadParts",
"s3:PutObject",
"s3:PutObjectAcl"
],
"Resource": "arn:aws:s3:::AWSDOC-EXAMPLE-BUCKET/*",
"Effect": "Allow"
}
]
}

이 문서가 도움이 되었습니까?


결제 또는 기술 지원이 필요합니까?