액세스 포인트를 사용하여 S3 버킷에 액세스해야합니다 boto3
.
읽기 및 쓰기를 허용하는 정책으로 액세스 포인트를 만들었습니다 ( <access_point_arn>
is my access point ARN
).
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": ["s3:GetObject", "s3:PutObject"],
"Resource": "<access_point_arn>/object/*"
]
}
공식 문서에는 ARN
버킷 이름 ( https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/s3.html ) 대신 액세스 포인트 가 있어야 하는 액세스 포인트에 대한 언급이 있습니다. . 개발자를위한 공식 설명서 사이트 ( https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html ) 에는 예제가 없습니다 .
따라서 정보를 기반으로 올바른 사용 방법은 다음과 같습니다.
import boto3
s3 = boto3.resource('s3')
s3.Bucket('<access_point_arn>').download_file('hello.txt', '/tmp/hello.txt')
AmazonS3FullAccess
관리 형 정책이 연결된 Lambda에서이 코드를 실행 하면ClientError: An error occurred (403) when calling the HeadObject operation: Forbidden
Lambda 및 S3 액세스 포인트는 모두 동일한 VPC에 연결됩니다.
내 첫 번째 추측은 (1) 버킷 (버킷 정책) 및 (2) boto3 SDK에서 사용중인 IAM 사용자 또는 역할에 대해 정의해야하는 권한이 누락 된 것입니다.
(1) 문서 에서
애플리케이션 또는 사용자가 액세스 포인트를 통해 객체에 액세스 할 수 있으려면 액세스 포인트 와 기본 버킷이 모두 요청을 허용해야합니다 .
예를 들어 액세스 포인트를 통해 제공되는 각 보안 주체를 지정할 필요가 없도록 액세스 제어를 액세스 포인트에 위임하는 버킷 정책을 추가 할 수 있습니다. 링크 된 문서에 예제가 있습니다.
(2) 질문에서 언급했듯이 LambdaExecutionRole에서 AmazonS3FullAccess 정책을 이미 사용하고 있습니다. 내 유일한 추측 (즉, 나에게 일어난 일)은 예를 들어 버킷의 객체에 KMS 암호화가 있고 역할에 kms 작업에 대한 권한이 없다는 것입니다. 관리자 정책이 첨부 된 기능을 실행하고 작동하는지 확인하십시오. 그렇다면 어떤 특정 권한이 누락되었는지 확인하십시오.
추가 참고 사항 :
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다