S3 Access Grants를 통해 Amazon S3 데이터 접근 요청하기
S3 Access Grants를 통해 Amazon S3 데이터 접근 요청하기
S3 Access Grants를 사용해 접근 권한을 만든 뒤에는 수혜자가 자신에게 부여된 S3 데이터에 접근하기 위한 자격 증명을 요청할 수 있어요. 수혜자는 AWS Identity and Access Management(IAM) 보안 주체, 내 기업 디렉터리 신원, 또는 승인된 애플리케이션이 될 수 있어요.
애플리케이션이나 AWS 서비스는 S3 Access Grants의 GetDataAccess API 작업을 사용해 수혜자를 대신해 내 S3 데이터에 대한 접근을 요청할 수 있어요. GetDataAccess는 먼저 이 신원이 데이터에 접근 권한을 부여받았는지 확인해요. 그런 다음 S3 Access Grants는 AssumeRole API 작업을 사용해 임시 자격 증명 토큰을 얻어 요청자에게 발급해요. 이 임시 자격 증명 토큰은 AWS Security Token Service(AWS STS) 토큰이에요.
GetDataAccess 요청에는 임시 자격 증명이 적용되는 S3 데이터의 범위를 지정하는 target 매개 변수가 포함되어야 해요. 이 대상 범위는 접근 권한의 범위와 같거나 그 범위의 일부일 수 있지만, 대상 범위는 수혜자에게 부여된 접근 권한 범위 안에 있어야 해요. 요청에는 임시 자격 증명의 권한 수준(READ, WRITE, 또는 READWRITE)을 나타내는 permission 매개 변수도 지정해야 해요.
권한 수준(Privilege)
요청자는 자격 증명 요청에서 임시 토큰의 권한 수준을 지정할 수 있어요. privilege 매개 변수를 사용해 요청자는 접근 권한 범위 안에서 임시 자격 증명의 접근 범위를 줄이거나 늘릴 수 있어요. privilege 매개 변수의 기본값은 Default인데, 이는 반환되는 자격 증명의 대상 범위가 원래 접근 권한 범위라는 뜻이에요. privilege의 다른 가능한 값은 Minimal이에요. 대상 범위가 원래 접근 권한 범위에서 줄어들면, 대상 범위가 접근 권한 범위 안에 있는 한 임시 자격 증명이 대상 범위에 맞춰 범위가 축소돼요.
다음 표는 두 접근 권한에 대한 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/ 접두사만 포함해요.
| 접근 권한 범위 (Grant scope) | 요청 범위 (Requested scope) | 권한 (Privilege) | 반환 범위 (Returned scope) | 효과 (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인 객체에만 접근할 수 있어요. 다른 객체에는 접근할 수 없어요. |
디렉터리 신원(Directory identities)
GetDataAccess는 요청에 관여하는 모든 신원을 고려해 적절한 접근 권한을 매칭해요. 기업 디렉터리 신원의 경우 GetDataAccess는 신원 인식 세션(identity-aware session)에 사용된 IAM 신원의 접근 권한도 반환해요. 신원 인식 세션에 대한 자세한 내용은 AWS Identity and Access Management 사용자 가이드의 신원 인식 콘솔 세션 사용 권한 부여를 참고하세요. GetDataAccess는 다음 표에서 보듯 가장 제한적인 접근 권한으로 범위를 제한한 자격 증명을 생성해요.
| IAM 신원 접근 권한 범위 | 디렉터리 신원 접근 권한 범위 | 요청 범위 | 반환 범위 | 권한 (Privilege) | 효과 (Effect) |
|---|---|---|---|---|---|
S3://amzn-s3-demo-bucket1/bob/* |
amzn-s3-demo-bucket1/bob/images/* |
S3://amzn-s3-demo-bucket1/bob/images/image1.jpeg |
S3://amzn-s3-demo-bucket1/bob/images/* |
Default | 요청자는 IAM 역할의 접근 권한 일부로 bob/ 접두사로 시작하는 키 이름을 가진 모든 객체에 접근할 수 있지만, 디렉터리 신원의 접근 권한 일부로 bob/images/ 접두사로 제한돼요. IAM 역할과 디렉터리 신원 모두 요청 범위인 bob/images/image1.jpeg에 대한 접근을 제공하지만, 디렉터리 신원의 접근 권한이 더 제한적이에요. 따라서 반환 범위는 디렉터리 신원의 더 제한적인 접근 권한으로 제한돼요. |
S3://amzn-s3-demo-bucket1/bob/* |
amzn-s3-demo-bucket1/bob/images/* |
S3://amzn-s3-demo-bucket1/bob/images/image1.jpeg |
S3://amzn-s3-demo-bucket1/bob/images/image1.jpeg |
Minimal | Privilege가 Minimal로 설정되어 있어 신원이 더 큰 범위에 접근할 수 있어도 요청된 범위인 bob/images/image1.jpeg만 반환돼요. |
S3://amzn-s3-demo-bucket1/bob/images/* |
amzn-s3-demo-bucket1/bob/* |
S3://amzn-s3-demo-bucket1/bob/images/image1.jpeg |
S3://amzn-s3-demo-bucket1/bob/images/* |
Default | 요청자는 디렉터리 신원의 접근 권한 일부로 bob/ 접두사로 시작하는 키 이름을 가진 모든 객체에 접근할 수 있지만, IAM 역할의 접근 권한 일부로 bob/images/ 접두사로 제한돼요. IAM 역할과 디렉터리 신원 모두 요청 범위인 bob/images/image1.jpeg에 대한 접근을 제공하지만, IAM 역할의 접근 권한이 더 제한적이에요. 따라서 반환 범위는 IAM 역할의 더 제한적인 접근 권한으로 제한돼요. |
S3://amzn-s3-demo-bucket1/bob/images/* |
amzn-s3-demo-bucket1/bob/* |
S3://amzn-s3-demo-bucket1/bob/images/image1.jpeg |
S3://amzn-s3-demo-bucket1/bob/images/image1.jpeg |
Minimal | Privilege가 Minimal로 설정되어 있어 신원이 더 큰 범위에 접근할 수 있어도 요청된 범위인 bob/images/image1.jpeg만 반환돼요. |
기간(Duration)
durationSeconds 매개 변수는 임시 자격 증명의 기간을 초 단위로 설정해요. 기본값은 3600초(1시간)이며, 요청자(수혜자)는 900초(15분)에서 43200초(12시간) 사이의 범위를 지정할 수 있어요. 수혜자가 이 최대값보다 높은 값을 요청하면 요청이 실패해요.
참고
임시 토큰을 요청할 때 위치가 객체라면 요청에서
targetType매개 변수 값을Object로 설정하세요. 이 매개 변수는 위치가 객체이고 권한 수준이Minimal일 때만 필요해요. 위치가 버킷이나 접두사라면 이 매개 변수를 지정할 필요가 없어요.
예제
AWS Command Line Interface(AWS CLI), Amazon S3 REST API, AWS SDK를 사용해 임시 자격 증명을 요청할 수 있어요. 아래 예제를 참고하세요.
추가 정보는 Amazon Simple Storage Service API Reference의 GetDataAccess를 참고하세요.
AWS CLI를 설치하려면 AWS Command Line Interface 사용자 가이드의 AWS CLI 설치를 참고하세요. 다음 예제 명령을 사용할 때는 사용자 입력 자리 표시자를 자신의 정보로 바꾸세요.
예제 – 임시 자격 증명 요청
요청:
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**",
"Grantee": {
"GranteeType": "IAM",
"GranteeIdentifier": "arn:aws:iam::111122223333:role/role-name"
}
}
S3 Access Grants로부터 임시 자격 증명을 요청하는 Amazon S3 REST API 지원에 대한 자세한 내용은 Amazon Simple Storage Service API Reference의 GetDataAccess를 참고하세요.
이 섹션은 수혜자가 AWS SDK를 사용해 S3 Access Grants로부터 임시 자격 증명을 요청하는 예제를 제공해요.
Java
다음 코드 예제는 수혜자가 내 S3 데이터에 접근할 때 사용하는 임시 자격 증명을 반환해요. 이 코드 예제를 사용할 때는 사용자 입력 자리 표시자를 자신의 정보로 바꾸세요.
예제 – 임시 자격 증명 가져오기
요청:
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
))
출처: 문서
본문
Requesting access (접근 요청하기)
수혜자가 GetDataAccess API를 통해 임시 자격 증명을 요청하는 방법을 설명했어요. 요청은 target과 permission 매개 변수를 포함해야 하며, privilege와 durationSeconds로 범위와 기간을 조정할 수 있어요.