S3 Access Grants를 통해 Amazon S3 데이터에 대한 액세스 요청 - Amazon Simple Storage Service

S3 Access Grants를 통해 Amazon S3 데이터에 대한 액세스 요청

Amazon S3 Access Grants를 사용하여 AWS Identity and Access Management(IAM) 보안 주체, 기업 디렉터리 ID 또는 승인된 애플리케이션에 S3 데이터에 대한 액세스 권한을 부여하는 액세스 권한 부여를 생성하고 나면, 피부여자는 이 데이터에 액세스하기 위한 보안 인증 정보를 요청할 수 있습니다.

애플리케이션 또는 GetDataAccess가 AWS 서비스 API 작업을 사용하여 피부여자를 대신하여 S3 데이터에 대한 액세스를 S3 Access Grants에 요청하면, S3 Access Grants는 먼저 이 ID에 해당 데이터에 대한 액세스 권한을 부여했는지 확인합니다. 그러면 S3 Access Grants가 AssumeRole API 작업을 사용하여 임시 자격 증명 토큰을 가져와 요청자에게 벤딩합니다. 이 임시 보안 인증 정보 토큰은 AWS Security Token Service(AWS STS) 토큰입니다.

GetDataAccess 요청에는 임시 보안 인증 정보가 적용되는 S3 데이터의 범위를 지정하는 target 파라미터가 포함되어야 합니다. 이 target 범위는 권한 부여 범위 또는 해당 범위의 하위 집합과 같을 수 있지만, target 범위는 요청자에게 제공된 권한 부여 범위 내에 있어야 합니다. 또한 요청은 임시 보안 인증 정보의 권한 수준(READ, WRITE 또는 READWRITE)을 나타내는 permission 파라미터를 지정해야 합니다.

요청자는 보안 인증 정보 요청에서 임시 토큰의 권한 수준을 지정할 수 있습니다. 요청자는 privilege 파라미터를 사용하여 권한 부여 범위 내에서 임시 보안 인증 정보의 액세스 범위를 줄이거나 늘릴 수 있습니다. privilege 파라미터의 기본값은 Default이며, 이는 반환되는 보안 인증 정보의 대상 범위가 원래 권한 부여 범위임을 의미합니다. Minimal 또한 privilege의 값이 될 수 있습니다. target 범위가 원래 권한 부여 범위보다 축소되면 target 범위가 권한 부여 범위 내에 있는 한 target 범위와 일치하도록 임시 보안 인증 정보의 범위가 축소됩니다.

다음 테이블에는 두 권한 부여에 대한 privilege 파라미터의 효과가 자세히 나와 있습니다. 권한 부여의 범위는 S3://amzn-s3-demo-bucket1/bob/*이며, 여기에는 amzn-s3-demo-bucket1 버킷의 전체 bob/ 접두사가 포함됩니다. 다른 권한 부여의 범위는 S3://amzn-s3-demo-bucket1/bob/reports/*이며, 여기에는 amzn-s3-demo-bucket1 버킷의 bob/reports/ 접두사만 포함됩니다.

권한 부여 범위 요청된 범위 권한 반환된 범위 Effect
S3://amzn-s3-demo-bucket1/bob/* amzn-s3-demo-bucket1/bob/* Default amzn-s3-demo-bucket1/bob/*

요청자는 amzn-s3-demo-bucket1 버킷에서 키 이름이 접두사 bob/으로 시작하는 모든 객체에 액세스할 수 있습니다.

S3://amzn-s3-demo-bucket1/bob/* amzn-s3-demo-bucket1/bob/ Minimal amzn-s3-demo-bucket1/bob/

접두사 이름 bob/ 뒤에 와일드카드를 나타내는 * 문자가 없으면 요청자는 amzn-s3-demo-bucket1 버킷에서 이름이 bob/인 객체에만 액세스할 수 있습니다. 이러한 객체가 있는 경우는 흔하지 않습니다. 요청자는 키 이름이 접두사 bob/으로 시작하는 객체를 비롯해 다른 객체에 액세스할 수 없습니다.

S3://amzn-s3-demo-bucket1/bob/* amzn-s3-demo-bucket1/bob/images/* Minimal amzn-s3-demo-bucket1/bob/images/*

요청자는 amzn-s3-demo-bucket1 버킷에서 키 이름이 접두사 bob/images/*로 시작하는 모든 객체에 액세스할 수 있습니다.

S3://amzn-s3-demo-bucket1/bob/reports/* amzn-s3-demo-bucket1/bob/reports/file.txt Default amzn-s3-demo-bucket1/bob/reports/*

요청자는 amzn-s3-demo-bucket1 버킷에서 키 이름이 접두사 bob/reports로 시작하는 모든 객체에 액세스할 수 있습니다. 이는 일치하는 권한 부여의 범위에 해당합니다.

S3://amzn-s3-demo-bucket1/bob/reports/* amzn-s3-demo-bucket1/bob/reports/file.txt Minimal amzn-s3-demo-bucket1/bob/reports/file.txt

요청자는 amzn-s3-demo-bucket1 버킷에서 키 이름이 bob/reports/file.txt인 객체에만 액세스할 수 있습니다. 다른 객체에는 액세스할 수 없습니다.

durationSeconds 파라미터는 임시 보안 인증 정보의 기간을 초 단위로 설정합니다. 기본값은 3600초(1시간)이지만 요청자(피부여자)는 900초(15분)에서 최대 43200초(12시간)까지 범위를 지정할 수 있습니다. 피부여자가 이 최댓값보다 큰 값을 요청하면 요청이 실패합니다.

참고

임시 토큰을 요청할 때 위치가 객체인 경우 요청의 targetType 파라미터 값을 Object로 설정하세요. 이 파라미터는 위치가 객체이고 권한 수준이 Minimal인 경우에만 필요합니다. 위치가 버킷 또는 접두사인 경우 이 파라미터를 지정할 필요가 없습니다.

자세한 내용은 Amazon Simple Storage Service API 참조의 GetDataAccess를 참조하세요.

AWS Command Line Interface(AWS CLI), Amazon S3 REST API, AWS SDK를 사용하여 임시 보안 인증 정보를 요청할 수 있습니다.

AWS CLI를 설치하려면 AWS Command Line Interface 사용 설명서AWS CLI 설치를 참조하세요.

다음 예시 명령을 사용하려면 user input placeholders를 실제 정보로 대체하세요.

예 임시 보안 인증 정보 요청

요청:

aws s3control get-data-access \ --account-id 111122223333 \ --target s3://amzn-s3-demo-bucket/prefixA* \ --permission READ \ --privilege Default \ --region us-east-2

응답:

{ "Credentials": { "AccessKeyId": "Example-key-id", "SecretAccessKey": "Example-access-key", "SessionToken": "Example-session-token", "Expiration": "2023-06-14T18:56:45+00:00"}, "MatchedGrantTarget": "s3://amzn-s3-demo-bucket/prefixA**" }

S3 Access Grants에서 임시 보안 인증 정보 요청을 위한 Amazon S3 REST API 지원에 대한 자세한 내용은 Amazon Simple Storage Service API 참조의 GetDataAccess를 참조하세요.

이 섹션에서는 피부여자가 AWS SDK를 사용하여 S3 Access Grants로부터 임시 보안 인증 정보를 요청하는 방법의 예를 제공합니다.

Java

다음 예시 코드는 피부여자가 S3 데이터에 액세스하는 데 사용하는 임시 보안 인증 정보를 반환합니다. 이 예시 코드를 사용하려면 user input placeholders를 실제 정보로 대체하세요.

예 임시 보안 인증 정보 가져오기

요청:

public void getDataAccess() { GetDataAccessRequest getDataAccessRequest = GetDataAccessRequest.builder() .accountId("111122223333") .permission(Permission.READ) .privilege(Privilege.MINIMAL) .target("s3://amzn-s3-demo-bucket/prefixA*") .build(); GetDataAccessResponse getDataAccessResponse = s3Control.getDataAccess(getDataAccessRequest); LOGGER.info("GetDataAccessResponse: " + getDataAccessResponse); }

응답:

GetDataAccessResponse( Credentials=Credentials( AccessKeyId="Example-access-key-id", SecretAccessKey="Example-secret-access-key", SessionToken="Example-session-token", Expiration=2023-06-07T06:55:24Z ))