미리 서명된 URLs 생성 - AWS SDK for Rust

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

미리 서명된 URLs 생성

나중에 다른 호출자가 자신의 자격 증명을 제시하지 않고 요청을 사용할 수 있도록 일부 AWS API 작업에 대한 요청에 미리 서명할 수 있습니다.

예를 들어 Jane이 Amazon Simple Storage Service(Amazon S3) 객체에 액세스할 수 있고 Alejandro와 객체 액세스를 일시적으로 공유하고 싶다고 가정합니다. Jane은 미리 서명된 GetObject 요청을 생성하여 Alejandro와 공유하므로 Jane의 자격 증명에 액세스하거나 자신의 자격 증명을 보유하지 않고도 객체를 다운로드할 수 있습니다. 미리 서명된 URL에서 사용하는 자격 증명은 Jane의 자격 증명입니다. Jane은 URL을 생성한 AWS 사용자이기 때문입니다.

Amazon S3의 미리 서명된 URLs에 대한 자세한 내용은 Amazon Simple Storage Service 사용 설명서미리 서명된 URLs 작업을 참조하세요.

기본 사항 사전 지정

는 미리 서명된 요청을 가져오는 데 사용할 수 있는 작업 유창 빌더에 대한 presigned() 메서드를 AWS SDK for Rust 제공합니다.

다음 예제에서는 Amazon S3에 대해 미리 서명된 GetObject 요청을 생성합니다. 요청은 생성 후 5분 동안 유효합니다.

use std::time::Duration; use aws_config::BehaviorVersion; use aws_sdk_s3::presigning::PresigningConfig; let config = aws_config::defaults(BehaviorVersion::latest()) .load() .await; let s3 = aws_sdk_s3::Client::new(&config); let presigned = s3.get_object() .presigned( PresigningConfig::builder() .expires_in(Duration::from_secs(60 * 5)) .build() .expect("less than one week") ) .await?;

presigned() 메서드는를 반환합니다Result<PresignedRequest, SdkError<E, R>>.

반환된 에는 메서드, URI 및 헤더를 포함하여 HTTP 요청의 구성 요소를 가져오는 메서드가 PresignedRequest 포함되어 있습니다. 요청이 유효하려면 이러한 모든 항목을 서비스로 전송해야 합니다. 그러나 미리 서명된 많은 요청은 URI만으로 표현할 수 있습니다.

POSTPUT 요청 사전 서명

미리 서명할 수 있는 많은 작업에는 URL만 필요하며 HTTP GET 요청으로 전송해야 합니다. 그러나 일부 작업은 본문을 사용하며 경우에 따라 헤더와 함께 HTTP POST 또는 HTTP PUT 요청으로 전송해야 합니다. 이러한 요청에 미리 서명하는 것은 GET 요청에 미리 서명하는 것과 동일하지만 미리 서명된 요청을 호출하는 것은 더 복잡합니다.

다음은 Amazon S3 PutObject 요청을 미리 서명하고 선택한 HTTP 클라이언트를 사용하여 전송할 수 http::request::Request 있는 로 변환하는 예제입니다.

into_http_1x_request() 메서드를 사용하려면 Cargo.toml 파일의 aws-sdk-s3 크레이트에 http-1x 기능을 추가합니다.

aws-sdk-s3 = { version = "1", features = ["http-1x"] }

소스 파일:

let presigned = s3.put_object() .presigned( PresigningConfig::builder() .expires_in(Duration::from_secs(60 * 5)) .build() .expect("less than one week") ) .await?; let body = "Hello AWS SDK for Rust"; let http_req = presigned.into_http_1x_request(body);

독립 실행형 서명자

참고

이는 고급 사용 사례입니다. 대부분의 사용자에게 필요하거나 권장되지는 않습니다.

SDK for Rust 컨텍스트 외부에서 서명된 요청을 생성해야 하는 몇 가지 사용 사례가 있습니다. 의 경우 SDK와 독립적으로 aws-sigv4 크레이트를 사용할 수 있습니다.

다음은 기본 요소를 보여주는 예제입니다. 자세한 내용은 상자 설명서를 참조하세요.

Cargo.toml 파일에 aws-sigv4http 상자를 추가합니다.

[dependencies] aws-sigv4 = "1" http = "1"

소스 파일:

use aws_smithy_runtime_api::client::identity::Identity; use aws_sigv4::http_request::{sign, SigningSettings, SigningParams, SignableRequest}; use aws_sigv4::sign::v4; use std::time::SystemTime; // Set up information and settings for the signing. // You can obtain credentials from `SdkConfig`. let identity = Credentials::new( "AKIDEXAMPLE", "wJalrXUtnFEMI/K7MDENG+bPxRfiCYEXAMPLEKEY", None, None, "hardcoded-credentials").into(); let settings = SigningSettings::default(); let params = v4::SigningParams::builder() .identity(&identity) .region("us-east-1") .name("service") .time(SystemTime::now()) .settings(settings) .build()? .into(); // Convert the HTTP request into a signable request. let signable = SignableRequest::new( "GET", "https://some-endpoint.some-region.amazonaws.com", std::iter::empty(), SignableBody::UnsignedPayload )?; // Sign and then apply the signature to the request. let (signing_instructions, _signature) = sign(signable, &params)?.into_parts(); let mut my_req = http::Request::new("..."); signing_instructions.apply_to_request_http1x(&mut my_req);