위치 등록하기
위치 등록하기
계정의 한 AWS 리전에 Amazon S3 Access Grants 인스턴스를 만든 뒤에는 그 인스턴스에 S3 위치를 등록해요. S3 Access Grants 위치는 기본 S3 위치(s3://), 버킷, 또는 접두사를 AWS Identity and Access Management(IAM) 역할에 매핑해 줘요. S3 Access Grants는 이 IAM 역할을 사용해 특정 위치에 접근하는 수혜자에게 임시 자격 증명을 발급해요. 접근 권한을 만들기 전에 먼저 S3 Access Grants 인스턴스에 위치를 하나 이상 등록해야 해요.
권장 사용 사례
기본 위치(s3://)를 등록해 IAM 역할에 매핑할 것을 권장해요. 기본 S3 경로(s3://)의 위치는 계정의 해당 AWS 리전에 있는 모든 S3 버킷에 대한 접근을 포괄해요. 접근 권한을 만들 때는 접근 범위를 기본 위치 안의 버킷, 접두사, 또는 객체로 좁힐 수 있어요.
복잡한 접근 관리 사용 사례
더 복잡한 접근 관리 사용 사례에서는 기본 위치 외에 더 많은 위치를 등록해야 할 수 있어요. 예를 들어:
amzn-s3-demo-bucket이 IAM 역할이 매핑된 S3 Access Grants 인스턴스의 등록 위치인데, 이 IAM 역할이 버킷 안 특정 접두사에 대한 접근이 거부되어 있다고 가정해 보세요. 이 경우 IAM 역할이 접근할 수 없는 접두사를 별도의 위치로 등록하고, 필요한 접근 권한을 가진 다른 IAM 역할에 그 위치를 매핑할 수 있어요.- 특정 가상 프라이빗 클라우드(VPC) 엔드포인트 안의 사용자에게만 접근을 제한하는 접근 권한을 만들고 싶다고 가정해 보세요. 이 경우 IAM 역할이 VPC 엔드포인트로 접근을 제한하는 버킷의 위치를 등록할 수 있어요. 이후 수혜자가 S3 Access Grants에 자격 증명을 요청하면 S3 Access Grants가 위치의 IAM 역할을 사용해 임시 자격 증명을 발급해요. 이 자격 증명은 호출자가 VPC 엔드포인트 안에 있지 않으면 특정 버킷에 대한 접근을 거부해요. 이 거부 권한은 접근 권한에 지정된 일반 READ, WRITE, 또는 READWRITE 권한에 더해 적용돼요.
위치를 등록할 때는 S3 Access Grants가 임시 자격 증명을 발급하고 특정 접근 권한의 권한을 범위 지정할 때 사용하는 IAM 역할도 함께 지정해야 해요.
사용 사례에서 S3 Access Grants 인스턴스에 여러 위치를 등록해야 한다면 다음 중 아무거나 등록할 수 있어요.
| S3 URI | IAM 역할 | 설명 |
|---|---|---|
s3:// |
Default-IAM-role | 기본 위치 s3://는 AWS 리전의 모든 버킷을 포함해요. |
s3://amzn-s3-demo-bucket1/ |
IAM-role-For-bucket | 이 위치는 지정된 버킷의 모든 객체를 포함해요. |
s3://amzn-s3-demo-bucket1/prefix-name |
IAM-role-For-prefix | 이 위치는 이 접두사로 시작하는 객체 키 이름이 있는 버킷의 모든 객체를 포함해요. |
특정 버킷이나 접두사를 등록하기 전에 먼저 다음을 수행해야 해요.
- 접근 권한을 부여하려는 데이터가 들어 있는 버킷을 하나 이상 만듭니다. 이 버킷은 S3 Access Grants 인스턴스와 같은 AWS 리전에 있어야 해요. 자세한 내용은 버킷 만들기를 참고하세요.
- 접두사 추가는 선택 단계예요. 접두사는 객체 키 이름의 시작 부분에 오는 문자열이에요. 버킷의 객체를 구성하거나 접근 관리를 위해 사용할 수 있어요. 버킷에 접두사를 추가하려면 객체 키 이름 만들기를 참고하세요.
- 해당 AWS 리전의 내 S3 데이터에 접근할 권한이 있는 IAM 역할을 만듭니다. 자세한 내용은 AWS IAM 사용자 가이드의 IAM 역할 만들기를 참고하세요.
- IAM 역할 신뢰 정책에서 S3 Access Grants 서비스(
access-grants.s3.amazonaws.com) 보안 주체에게 만든 IAM 역할에 대한 접근 권한을 부여합니다. 이렇게 하려면 다음 문이 포함된 JSON 파일을 만들 수 있어요. 계정에 신뢰 정책을 추가하려면 사용자 지정 신뢰 정책을 사용해 역할 만들기를 참고하세요.
TestRolePolicy.json
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "TestRolePolicy",
"Effect": "Allow",
"Principal": {
"Service": "access-grants.s3.amazonaws.com"
},
"Action": [
"sts:AssumeRole",
"sts:SetSourceIdentity"
],
"Condition": {
"StringEquals": {
"aws:SourceAccount": "111122223333",
"aws:SourceArn": "arn:aws:s3::111122223333:access-grants/default"
}
}
}
]
}
또는 IAM Identity Center 사용 사례에서는 두 번째 문이 포함된 다음 정책을 사용할 수 있어요.
만든 IAM 역할에 Amazon S3 권한을 연결할 IAM 정책을 만듭니다. 다음 예제 iam-policy.json 파일을 보고 사용자 입력 자리 표시자를 자신의 정보로 바꾸세요.
참고
AWS Key Management Service(AWS KMS) 키를 사용한 서버 측 암호화로 데이터를 암호화한다면, 다음 예제는 정책에서 IAM 역할에 필요한 AWS KMS 권한을 포함해요. 이 기능을 사용하지 않는다면 IAM 정책에서 이 권한을 제거할 수 있어요.
IAM 역할은 S3 Access Grants가 발급한 자격 증명을 통해서만 S3 데이터에 접근하도록 제한할 수 있어요. 이 예제는 특정 S3 Access Grants 인스턴스에 대한 Condition 문을 추가하는 방법을 보여 줘요. 이 Condition을 사용하려면 Condition 문의 S3 Access Grants 인스턴스 ARN을 내 S3 Access Grants 인스턴스 ARN으로 바꾸세요. 형식은 다음과 같아요: arn:aws:s3:region:accountId:access-grants/default
iam-policy.json
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "ObjectLevelReadPermissions",
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:GetObjectVersion",
"s3:GetObjectAcl",
"s3:GetObjectVersionAcl",
"s3:ListMultipartUploadParts"
],
"Resource": [
"arn:aws:s3:::*"
],
"Condition": {
"StringEquals": { "aws:ResourceAccount": "accountId" },
"ArnEquals": {
"s3:AccessGrantsInstanceArn": ["arn:aws:s3:region:accountId:access-grants/default"]
}
}
},
{
"Sid": "ObjectLevelWritePermissions",
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:PutObjectAcl",
"s3:PutObjectVersionAcl",
"s3:DeleteObject",
"s3:DeleteObjectVersion",
"s3:AbortMultipartUpload"
],
"Resource": [
"arn:aws:s3:::*"
],
"Condition": {
"StringEquals": { "aws:ResourceAccount": "accountId" },
"ArnEquals": {
"s3:AccessGrantsInstanceArn": ["arn:aws:s3:AWS Region:accountId:access-grants/default"]
}
}
},
{
"Sid": "BucketLevelReadPermissions",
"Effect": "Allow",
"Action": [
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::*"
],
"Condition": {
"StringEquals": { "aws:ResourceAccount": "accountId" },
"ArnEquals": {
"s3:AccessGrantsInstanceArn": ["arn:aws:s3:AWS Region:accountId:access-grants/default"]
}
}
},
//Optionally add the following section if you use SSE-KMS encryption
{
"Sid": "KMSPermissions",
"Effect": "Allow",
"Action": [
"kms:Decrypt",
"kms:GenerateDataKey"
],
"Resource": [
"*"
]
}
]
}
S3 Access Grants 인스턴스의 위치 등록은 Amazon S3 콘솔, AWS Command Line Interface(AWS CLI), Amazon S3 REST API, 또는 AWS SDK를 사용해 할 수 있어요.
참고
S3 Access Grants 인스턴스에 첫 번째 위치를 등록한 뒤에도 그 인스턴스에는 아직 개별 접근 권한이 없는 상태예요. 접근 권한을 만들려면 접근 권한 만들기를 참고하세요.
S3 Access Grants로 내 S3 데이터에 접근 권한을 부여하려면 먼저 등록된 위치가 하나 이상 있어야 해요.
S3 Access Grants 인스턴스에 위치를 등록하려면
- AWS Management Console에 로그인하고 Amazon S3 콘솔을
https://console.aws.amazon.com/s3/에서 엽니다. - 왼쪽 탐색 창에서 Access Grants를 선택합니다.
- S3 Access Grants 페이지에서 작업하려는 S3 Access Grants 인스턴스가 들어 있는 리전을 선택합니다.
- S3 Access Grants 인스턴스를 처음 사용하는 경우, Set up Access Grants instance 마법사의 1단계 – S3 Access Grants 인스턴스 만들기를 완료하고 2단계로 이동했는지 확인합니다. 이미 S3 Access Grants 인스턴스가 있다면 View details를 선택한 다음 Locations 탭에서 Register location을 선택합니다.
- Location scope에서 Browse S3를 선택하거나 등록하려는 위치의 S3 URI 경로를 입력합니다. S3 URI 형식은 위의 위치 형식 표를 참고하세요. URI를 입력한 뒤 View를 선택해 위치를 탐색할 수 있어요.
- IAM role에서 다음 중 하나를 선택합니다.
- 기존 IAM 역할에서 선택 – 드롭다운 목록에서 IAM 역할을 선택합니다. 역할을 선택한 뒤 View를 선택해 이 역할이 등록하려는 위치를 관리하는 데 필요한 권한이 있는지 확인합니다. 특히 이 역할이 S3 Access Grants에
sts:AssumeRole과sts:SetSourceIdentity권한을 부여하는지 확인하세요. - IAM 역할 ARN 입력 – IAM 콘솔로 이동해 IAM 역할의 Amazon Resource Name(ARN)을 복사해 이 상자에 붙여 넣습니다.
- 기존 IAM 역할에서 선택 – 드롭다운 목록에서 IAM 역할을 선택합니다. 역할을 선택한 뒤 View를 선택해 이 역할이 등록하려는 위치를 관리하는 데 필요한 권한이 있는지 확인합니다. 특히 이 역할이 S3 Access Grants에
- 마무리하려면 Next 또는 Register location을 선택합니다.
문제 해결:
- Cannot register location (위치를 등록할 수 없음) – 위치가 이미 등록되어 있을 수 있어요.
- 위치를 등록할
s3:CreateAccessGrantsLocation권한이 없을 수 있어요. 계정 관리자에게 문의하세요.
AWS CLI를 설치하려면 AWS Command Line Interface 사용자 가이드의 AWS CLI 설치를 참고하세요.
S3 Access Grants 인스턴스에 기본 위치 s3:// 또는 사용자 지정 위치를 등록할 수 있어요. 먼저 위치에 대한 보안 주체 접근 권한이 있는 IAM 역할을 만든 다음, S3 Access Grants가 이 역할을 수임할 권한을 부여했는지 확인하세요. 다음 예제 명령을 사용할 때는 사용자 입력 자리 표시자를 자신의 정보로 바꾸세요.
예제 – 리소스 정책 만들기
S3 Access Grants가 IAM 역할을 수임할 수 있게 해 주는 정책을 만듭니다. 이렇게 하려면 다음 문이 포함된 JSON 파일을 만들 수 있어요. 계정에 리소스 정책을 추가하려면 첫 번째 고객 관리형 정책 만들기 및 연결을 참고하세요.
TestRolePolicy.json
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1234567891011",
"Action": ["sts:AssumeRole", "sts:SetSourceIdentity"],
"Effect": "Allow",
"Principal": {"Service": "access-grants.s3.amazonaws.com"}
}
]
}
예제 – 역할 만들기
역할을 만들려면 다음 IAM 명령을 실행합니다.
aws iam create-role --role-name accessGrantsTestRole \
--region us-east-2 \
--assume-role-policy-document file://TestRolePolicy.json
create-role 명령을 실행하면 정책이 반환됩니다:
{
"Role": {
"Path": "/",
"RoleName": "accessGrantsTestRole",
"RoleId": "AROASRDGX4WM4GH55GIDA",
"Arn": "arn:aws:iam::111122223333:role/accessGrantsTestRole",
"CreateDate": "2023-05-31T18:11:06+00:00",
"AssumeRolePolicyDocument": {
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1685556427189",
"Action": [
"sts:AssumeRole",
"sts:SetSourceIdentity"
],
"Effect": "Allow",
"Principal": {
"Service": "access-grants.s3.amazonaws.com"
}
}
]
}
}
}
예제
IAM 역할에 Amazon S3 권한을 연결할 IAM 정책을 만듭니다. 다음 예제 iam-policy.json 파일을 보고 사용자 입력 자리 표시자를 자신의 정보로 바꾸세요.
참고
AWS Key Management Service(AWS KMS) 키를 사용한 서버 측 암호화로 데이터를 암호화한다면, 다음 예제는 정책에서 IAM 역할에 필요한 AWS KMS 권한을 추가해요. 이 기능을 사용하지 않는다면 IAM 정책에서 이 권한을 제거할 수 있어요.
IAM 역할이 S3 Access Grants가 발급한 자격 증명으로만 S3 데이터에 접근할 수 있게 하려면, 이 예제는 IAM 정책에 S3 Access Grants 인스턴스(s3:AccessGrantsInstance:InstanceArn)를 지정하는 Condition 문을 추가하는 방법을 보여 줘요. 다음 예제 정책을 사용할 때는 사용자 입력 자리 표시자를 자신의 정보로 바꾸세요.
iam-policy.json
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "ObjectLevelReadPermissions",
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:GetObjectVersion",
"s3:GetObjectAcl",
"s3:GetObjectVersionAcl",
"s3:ListMultipartUploadParts"
],
"Resource": [
"arn:aws:s3:::*"
],
"Condition": {
"StringEquals": { "aws:ResourceAccount": "111122223333" },
"ArnEquals": {
"s3:AccessGrantsInstanceArn": ["arn:aws:s3:us-east-1::access-grants/default"]
}
}
},
{
"Sid": "ObjectLevelWritePermissions",
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:PutObjectAcl",
"s3:PutObjectVersionAcl",
"s3:DeleteObject",
"s3:DeleteObjectVersion",
"s3:AbortMultipartUpload"
],
"Resource": [
"arn:aws:s3:::*"
],
"Condition": {
"StringEquals": { "aws:ResourceAccount": "111122223333" },
"ArnEquals": {
"s3:AccessGrantsInstanceArn": ["arn:aws:s3:us-east-1::access-grants/default"]
}
}
},
{
"Sid": "BucketLevelReadPermissions",
"Effect": "Allow",
"Action": [
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::*"
],
"Condition": {
"StringEquals": { "aws:ResourceAccount": "111122223333" },
"ArnEquals": {
"s3:AccessGrantsInstanceArn": ["arn:aws:s3:us-east-1::access-grants/default"]
}
}
},
{
"Sid": "KMSPermissions",
"Effect": "Allow",
"Action": [
"kms:Decrypt",
"kms:GenerateDataKey"
],
"Resource": [
"*"
],
"Condition": {
"StringEquals": {
"kms:ViaService": "s3.us-east-1.amazonaws.com"
}
}
}
]
}
예제
다음 명령을 실행합니다:
aws iam put-role-policy \
--role-name accessGrantsTestRole \
--policy-name accessGrantsTestRole \
--policy-document file://iam-policy.json
예제 – 기본 위치 등록
aws s3control create-access-grants-location \
--account-id 111122223333 \
--location-scope s3:// \
--iam-role-arn arn:aws:iam::111122223333:role/accessGrantsTestRole
응답:
{
"CreatedAt": "2023-05-31T18:23:48.107000+00:00",
"AccessGrantsLocationId": "default",
"AccessGrantsLocationArn": "arn:aws:s3:us-east-2:111122223333:access-grants/default/location/default",
"LocationScope": "s3://"
"IAMRoleArn": "arn:aws:iam::111122223333:role/accessGrantsTestRole"
}
예제 – 사용자 지정 위치 등록
aws s3control create-access-grants-location \
--account-id 111122223333 \
--location-scope s3://DOC-BUCKET-EXAMPLE/ \
--iam-role-arn arn:aws:iam::123456789012:role/accessGrantsTestRole
응답:
{
"CreatedAt": "2023-05-31T18:23:48.107000+00:00",
"AccessGrantsLocationId": "635f1139-1af2-4e43-8131-a4de006eb456",
"AccessGrantsLocationArn": "arn:aws:s3:us-east-2: 111122223333:access-grants/default/location/635f1139-1af2-4e43-8131-a4de006eb888",
"LocationScope": "s3://DOC-BUCKET-EXAMPLE/",
"IAMRoleArn": "arn:aws:iam::111122223333:role/accessGrantsTestRole"
}
S3 Access Grants 인스턴스 관리에 대한 Amazon S3 REST API 지원에 대한 자세한 내용은 Amazon Simple Storage Service API Reference의 다음 섹션을 참고하세요.
- CreateAccessGrantsLocation
- DeleteAccessGrantsLocation
- GetAccessGrantsLocation
- ListAccessGrantsLocations
- UpdateAccessGrantsLocation
이 섹션은 AWS SDK를 사용해 위치를 등록하는 예제를 제공해요. 다음 예제를 사용할 때는 사용자 입력 자리 표시자를 자신의 정보로 바꾸세요.
Java
S3 Access Grants 인스턴스에 기본 위치 s3:// 또는 사용자 지정 위치를 등록할 수 있어요. 먼저 위치에 대한 보안 주체 접근 권한이 있는 IAM 역할을 만든 다음, S3 Access Grants가 이 역할을 수임할 권한을 부여했는지 확인하세요.
다음 예제 명령을 사용할 때는 사용자 입력 자리 표시자를 자신의 정보로 바꾸세요.
예제 – 기본 위치 등록
요청:
public void createAccessGrantsLocation() {
CreateAccessGrantsLocationRequest createRequest = CreateAccessGrantsLocationRequest.builder()
.accountId("111122223333")
.locationScope("s3://")
.iamRoleArn("arn:aws:iam::123456789012:role/accessGrantsTestRole")
.build();
CreateAccessGrantsLocationResponse createResponse = s3Control.createAccessGrantsLocation(createRequest);
LOGGER.info("CreateAccessGrantsLocationResponse: " + createResponse);
}
응답:
CreateAccessGrantsLocationResponse(
CreatedAt=2023-06-07T04:35:11.027Z,
AccessGrantsLocationId=default,
AccessGrantsLocationArn=arn:aws:s3:us-east-2:111122223333:access-grants/default/location/default,
LocationScope=s3://,
IAMRoleArn=arn:aws:iam::111122223333:role/accessGrantsTestRole
)
예제 – 사용자 지정 위치 등록
요청:
public void createAccessGrantsLocation() {
CreateAccessGrantsLocationRequest createRequest = CreateAccessGrantsLocationRequest.builder()
.accountId("111122223333")
.locationScope("s3://DOC-BUCKET-EXAMPLE/")
.iamRoleArn("arn:aws:iam::111122223333:role/accessGrantsTestRole")
.build();
CreateAccessGrantsLocationResponse createResponse = s3Control.createAccessGrantsLocation(createRequest);
LOGGER.info("CreateAccessGrantsLocationResponse: " + createResponse);
}
응답:
CreateAccessGrantsLocationResponse(
CreatedAt=2023-06-07T04:35:10.027Z,
AccessGrantsLocationId=18cfe6fb-eb5a-4ac5-aba9-8d79f04c2012,
AccessGrantsLocationArn=arn:aws:s3:us-east-2:111122223333:access-grants/default/location/18cfe6fb-eb5a-4ac5-aba9-8d79f04c2666,
LocationScope= s3://test-bucket-access-grants-user123/,
IAMRoleArn=arn:aws:iam::111122223333:role/accessGrantsTestRole
)
출처: 문서
본문
Register a location (위치 등록하기)
위치를 등록하는 방법은 위 안내를 따라 하면 돼요. 접근 권한을 만들기 전에 먼저 위치를 하나 이상 등록해야 하고, 등록할 때는 S3 Access Grants가 수임할 IAM 역할을 지정해야 해요.