source

AWS S3: 액세스하려는 버킷은 지정된 끝점을 사용하여 주소를 지정해야 합니다.

factcode 2023. 6. 3. 08:46
반응형

AWS S3: 액세스하려는 버킷은 지정된 끝점을 사용하여 주소를 지정해야 합니다.

업로드한 이미지 파일을 AWS-SDK-Core Ruby Gem으로 삭제하려고 합니다.

다음 코드가 있습니다.

require 'aws-sdk-core'

def pull_picture(picture)
    Aws.config = {
        :access_key_id => ENV["AWS_ACCESS_KEY_ID"],
        :secret_access_key => ENV["AWS_SECRET_ACCESS_KEY"],
        :region => 'us-west-2'
    }

    s3 = Aws::S3::Client.new

    test = s3.get_object(
        :bucket => ENV["AWS_S3_BUCKET"],
        :key => picture.image_url.split('/')[-2],   
    )
end

그러나 다음과 같은 오류가 발생합니다.

액세스하려는 버킷은 지정된 끝점을 사용하여 주소를 지정해야 합니다.향후 모든 요청을 이 엔드포인트로 보내주십시오.

저는 그 지역이 맞는 것을 압니다 왜냐하면 제가 그것을 바꾸면us-east-1다음 오류가 표시됩니다.

지정한 키가 없습니다.

내가 여기서 뭘 잘못하고 있는 거지?

이 버킷은 us-west-2가 아닌 다른 지역에서 생성된 것 같습니다.액세스하려는 버킷은 지정된 엔드포인트를 사용하여 주소를 지정해야 합니다.향후 모든 요청을 이 엔드포인트로 보내주십시오."

는 미국표입니다.us-east-1

이 지역에 있어서 비슷한 오류에 직면했습니다.us-west-2경로에 URL 패턴의 버킷 이름이 있습니다.한번은 파일을 잡기 위해 URL 패턴을 버킷 이름을 URL 서브도메인으로 변경하여 적용했습니다.

예를 들어 이전 URL은

https://s3.amazonaws.com/bucketname/filePath/filename

그런 다음 다음 다음과 같이 교체했습니다.

https://bucketname.s3.amazonaws.com/filePath/filename

콘솔에서 버킷 위치를 확인한 다음 사용할 엔드포인트에 대한 참조로 사용합니다. http://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region

저의 경우, 지역 끝점을 잘못 선택했습니다.올바른 지역 끝점을 선택한 후 작동하기 시작했습니다 :)

오랜 수색 끝에, 저는 효과적인 해결책을 찾았습니다.문제는 잘못된 것 때문이었습니다.region-code.

아래는 지역 코드 목록입니다. 해당 코드를 설정하면 문제가 해결됩니다.

Code                         Name
US East (Ohio)               us-east-2

US East (N. Virginia)       us-east-1

US West (N. California)     us-west-1

US West (Oregon)            us-west-2

Asia Pacific (Hong Kong)    ap-east-1

Asia Pacific (Mumbai)       ap-south-1

Asia Pacific (Osaka-Local)  ap-northeast-3

Asia Pacific (Seoul)        ap-northeast-2

Asia Pacific (Singapore)    ap-southeast-1

Asia Pacific (Sydney)       ap-southeast-2

Asia Pacific (Tokyo)        ap-northeast-1

Canada (Central)            ca-central-1

Europe (Frankfurt)          eu-central-1

Europe (Ireland)            eu-west-1

Europe (London)             eu-west-2

Europe (Paris)             eu-west-3

Europe (Stockholm)         eu-north-1

Middle East (Bahrain)      me-south-1

South America (São Paulo)   sa-east-1

버킷 이름 오른쪽 코너를 클릭하면 지역 번호를 찾을 수 있습니다.

여기에 이미지 설명 입력

모드 세부 정보를 보려면 클릭

다른 AWS 프로파일을 사용할 때 이 문제가 발생했습니다.관리자 권한이 있는 계정을 사용할 때 오류가 발생하여 권한 문제가 발생할 가능성은 거의 없는 것 같습니다.

AWS가 사용자 관점에서 필요한 작업과 상관관계가 거의 없는 오류 메시지를 표시하는 경향이 있다는 것은 정말 유감스러운 일입니다.

다음을 사용하는 사용자를 위해@aws-sdk/client-s3명령을 보내기 전에 버킷의 영역을 클라이언트에 제공해야 합니다.CLI를 사용하여 다음과 같은 이점을 얻을 수 있습니다.

$ aws s3api get-bucket-location --bucket <bucket_name>
{
    "LocationConstraint": "ca-central-1"
}
const client = new S3Client({ region: "ca-central-1", credentials...

이 문제가 여전히 발생하는 ppl의 경우 다음과 같이 s3_host를 구성 해시에 추가해 보십시오.

   :storage => :s3,
   :s3_credentials => {:access_key_id => access key,
   :secret_access_key => secret access key},
   :bucket => bucket name here,
   :s3_host_name => s3-us-west-1.amazonaws.com or whatever comes as per your region}.

이것으로 저는 그 문제를 해결했습니다.

저도 같은 실수를 했어요.버킷을 생성하는 동안 설정된 엔드포인트와 다른 엔드포인트로 s3 클라이언트를 생성할 때 발생했습니다.

  • 오류 코드 - 버킷이 EAST 지역으로 설정되었습니다.

s3Client = 새 Amazon S3Client(AWS_ACCESS_KEY, AWS_SECRET_KEY, RegionEndpoint).USWest2)

  • 고치다

s3Client = 새 Amazon S3Client(AWS_ACCESS_KEY, AWS_SECRET_KEY, RegionEndpoint).마지막으로 사용1)

위의 답변 중 어느 것도 제 문제를 해결하지 못했습니다.

위의 답변들이 당신의 문제의 원인일 가능성이 더 높지만, 제 문제는 제가 잘못된 버킷 이름을 사용하고 있었다는 것입니다.유효한 버킷 이름이었는데, 제 버킷이 아니었습니다.

제가 가리키는 버킷은 제 람다 기능이 있는 다른 영역에 있었으니 버킷 이름을 확인하세요!

S3 버킷은 글로벌하지만 버킷에 액세스하는 동안 지역을 지정해야 합니다..netcore에서 오류가 발생했습니다. 아래 코드에 지역을 추가하면 작동하기 시작합니다.

var s3Client = new AmazonS3Client(Amazon.RegionEndpoint.USWest2);

제 경우에는 버킷 이름이 잘못되었습니다.

C#에서 다음과 같은 확인을 할 수 있습니다. 다른 SDK에서도 비슷한 코드가 가능할 것 같습니다.

        var client = new AmazonS3Client(
            credentials.AccessKey,
            credentials.ClientSecret,
            new AmazonS3Config{}
        );

        var bucketLocationRequest = new GetBucketLocationRequest
        {
            BucketName = amazonS3Bucket.BucketName
        };

        var response = await client.GetBucketLocationAsync(bucketLocationRequest);
        var region = response.Location;

        var regionEndpoint = region != null ? RegionEndpoint.GetBySystemName(region.Value) : RegionEndpoint.EUCentral1;
       
        var clientWithRegion = new AmazonS3Client(
            credentials.AccessKey,
            credentials.ClientSecret,
            new AmazonS3Config
            {
                RegionEndpoint = regionEndpoint
            }
        );

많은 S3 API 패키지(최근에 npm s3 패키지에서 이 문제가 발생했습니다)의 경우 해당 지역이 미국 표준으로 가정되는 문제가 발생할 수 있으며, 이름으로 조회하면 해당 지역 외부에서 버킷을 호스팅하도록 선택한 경우 해당 지역을 명시적으로 정의해야 합니다.

S3Client를 만드는 동안 특정 영역에 대한 끝점 매핑을 지정할 수 있습니다.이 " "인 경우"입니다.s3.amazonaws.com그러면 버킷이 생성됩니다.us-east-1노스버지니아입니다.

AWS 문서에서 S3 엔드포인트 및 지역에 대한 자세한 내용은 http://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region .

따라서 S3Client를 생성하는 동안 항상 끝점/영역을 확인하고 동일한 영역에 있는 동일한 클라이언트를 사용하여 S3 리소스에 액세스합니다.

버킷이 AWS S3 콘솔에서 생성된 경우 콘솔에서 해당 버킷의 영역을 확인한 다음 위 링크에 언급된 엔드포인트 세부 정보를 사용하여 해당 영역에 S3 클라이언트를 생성합니다.

저는 같은 문제에 직면했습니다.많은 어려움을 겪은 후에 저는 진짜 문제가 com.amazonaws 의존성에 있다는 것을 알게 되었습니다.종속성을 추가한 후 이 오류가 사라졌습니다.

c#.net에서 이 예외가 발생했습니다. 클라이언트 생성 시 RegionEndpoint 값을 아래와 같이 변경한 후 수정되었습니다.

var client = new AmazonS3Client(accesKey,secretKey, RegionEndpoint.APSoutheast2)

존재하지 않는 버킷에 액세스하려고 할 때 이 오류가 발생했습니다.

경로 변수를 버킷 이름 변수로 잘못 전환하여 버킷 이름에 파일 경로 값이 있습니다.요청에 설정한 버킷 이름이 올바른지 다시 확인하십시오.

저는 영국에 살고 있습니다. 계속해서 'us-west-2' 지역을 위해 노력하고 있었습니다.그래서 'eu-west-2'로 리디렉션되었습니다.S3의 올바른 영역은 'eu-west-2'입니다.

s3 버킷을 생성하기 위해 사용자(액세스 키/비밀 키)가 사용하는 정책에 대한 source ip 제약 조건이 있을 때 이 문제가 발생했습니다.제 IP는 정확했지만, 어떤 이유에서인지 작동하지 않아 이 오류가 발생했습니다.

언급URL : https://stackoverflow.com/questions/25027462/aws-s3-the-bucket-you-are-attempting-to-access-must-be-addressed-using-the-spec

반응형