위치 등록 - Amazon Simple Storage Service

위치 등록

계정의 AWS 리전에서 Amazon S3 Access Grants 인스턴스를 생성한 후 해당 인스턴스에 S3 위치를 등록합니다. S3 Access Grans 위치는 기본 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은 S3 Access Grants 인스턴스의 등록된 위치로서 IAM 역할이 매핑되어 있지만 이 IAM 역할은 버킷 내 특정 접두사에 대한 액세스가 거부되었다고 가정해 보겠습니다. 이 경우 IAM 역할이 액세스할 수 없는 접두사를 별도의 위치로 등록하고 필요한 액세스 권한이 있는 다른 IAM 역할에 해당 위치를 매핑할 수 있습니다.

  • Virtual Private Cloud(VPC) 엔드포인트 내 사용자로만 액세스 권한을 제한하는 권한 부여를 생성한다고 가정해 보겠습니다. 이 경우, IAM 역할이 VPC 엔드포인트에 대한 액세스를 제한하는 버킷 위치를 등록할 수 있습니다. 나중에 피부여자가 S3 Access Grants에 자격 증명을 요청하면 S3 Access Grants는 해당 위치의 IAM 역할을 맡아 임시 자격 증명을 제공합니다. 이 자격 증명은 호출자가 VPC 엔드포인트 내에 있지 않는 한 특정 버킷에 대한 액세스를 거부합니다. 이 거부 권한은 권한 부여에 지정된 일반 READ, WRITE 또는 READWRITE 권한에 추가로 적용됩니다.

위치를 등록할 때는 S3 Access Grants가 임시 자격 증명을 제공하고 특정 권한 부여에 대한 권한 범위를 지정하기 위해 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 Identity Center IAM 사용 설명서의 IAM 역할 생성을 참조하세요.

  • IAM 역할 신뢰 정책에서 S3 Access Grants 서비스(access-grants.s3.amazonaws.com) 보안 주체에 생성한 IAM 역할에 대한 액세스 권한을 부여합니다. 이를 위해 다음 문이 포함된 JSON 파일을 생성할 수 있습니다. 계정에 신뢰 정책을 추가하려면 사용자 지정 신뢰 정책을 사용하여 역할 생성을 참조하세요.

    TestRolePolicy.json

    { "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt1234567891011", "Action": ["sts:AssumeRole", "sts:SetSourceIdentity", "sts:SetContext"], "Effect": "Allow", "Principal": {"Service":"access-grants.s3.amazonaws.com"}, "Condition":{ "StringEquals":{ "aws:SourceAccount":"accountId", "aws:SourceArn":"arn:aws:s3:region:accountId:access-grants/default" } //Optionally, for an IAM Identity Center use case, add: "ForAnyValue:StringEquals": { "aws:RequestContextProvider":"arn:aws:iam::aws:contextProvider/IdentityCenter" } } } ] }
  • Amazon S3 권한을 생성한 IAM 역할에 연결하기 위해 IAM 정책을 생성합니다. 다음 예시 iam-policy.json 파일을 확인하고 user input placeholders를 실제 정보로 대체하세요.

    참고
    • AWS Key Management Service(AWS KMS) 키를 통한 서버 측 암호화를 사용하여 데이터를 암호화하는 경우 다음 예시는 IAM 역할에 필요한 AWS KMS 권한을 정책에 포함합니다. 이 기능을 사용하지 않는 경우 IAM 정책에서 이러한 권한을 제거할 수 있습니다.

    • S3 Access Grants에서 벤딩하는 자격 증명인 경우에만 IAM 역할이 S3 데이터에 액세스하도록 제한할 수 있습니다. 이 예시는 특정 S3 Access Grants 인스턴스에 대한 Condition 문을 추가하는 방법을 보여 줍니다. 이 Condition을 사용하려면 Condition 문의 S3 Access Grants 인스턴스 ARN을 arn:aws:s3:region:accountId:access-grants/default 형식의 S3 Access Grants 인스턴스 ARN으로 바꾸세요.

    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 리전: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 리전: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":[ "*" ] } ] }

Amazon S3 콘솔, AWS Command Line Interface(AWS CLI), Amazon S3 REST API, AWS SDK를 사용하여 S3 Access Grants 인스턴스에 위치를 등록할 수 있습니다.

참고

S3 Access Grants 인스턴스에서 첫 번째 위치를 등록한 후에도 인스턴스에는 여전히 개별 액세스 권한이 부여되지 않습니다. 액세스 권한 부여를 생성하려면 권한 부여 생성 섹션을 참조하세요.

S3 Access Grants를 사용하여 S3 데이터에 액세스 권한을 부여하려면 먼저 등록된 위치가 하나 이상 있어야 합니다.

S3 Access Grants 인스턴스에 위치를 등록하는 방법
  1. AWS Management Console에 로그인한 후 https://console.aws.amazon.com/s3/에서 Amazon S3 콘솔을 엽니다.

  2. 왼쪽 탐색 창에서 Access Grants를 선택합니다.

  3. S3 Access Grants 페이지에서 사용하려는 S3 Access Grants 인스턴스가 포함된 리전을 선택합니다.

    S3 Access Grants 인스턴스를 처음 사용하는 경우 1단계 - S3 Access Grants 인스턴스 생성을 완료하고 Access Grants 인스턴스 설정 마법사의 2단계로 이동했는지 확인하세요. 이미 S3 Access Grants 인스턴스가 있는 경우 세부 정보 보기를 선택한 다음 위치 탭에서 위치 등록을 선택합니다.

    1. 위치 범위에서 S3 찾아보기를 선택하거나 등록하려는 위치의 S3 URI 경로를 입력합니다. S3 URI 형식에 대해서는 위치 형식 테이블을 참조하세요. URI를 입력한 후 보기를 선택하여 위치를 찾아볼 수 있습니다.

    2. IAM 역할의 경우, 다음 중 하나를 선택합니다.

      • 기존 IAM 역할에서 선택

        드롭다운 목록에서 IAM 역할을 선택합니다. 역할을 선택한 후 보기를 선택하여 등록하려는 위치를 관리하는 데 필요한 권한이 이 역할에 있는지 확인하세요. 특히, 이 역할이 S3 Access Grants에 sts:AssumeRolests:SetSourceIdentity 권한을 부여하는지 확인하세요.

      • IAM 역할 ARN 입력

        IAM 콘솔로 이동합니다. IAM 역할의 Amazon 리소스 이름(ARN)을 복사하여 이 상자에 붙여넣습니다.

    3. 완료하려면 다음 또는 위치 등록을 선택합니다.

  4. 문제 해결:

    위치를 등록할 수 없음
    • 위치가 이미 등록되었을 수 있습니다.

      위치를 등록할 s3:CreateAccessGrantsLocation 권한이 없을 수도 있습니다. 계정 관리자에게 문의하세요.

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

S3 Access Grants 인스턴스에 기본 위치인 s3:// 또는 사용자 지정 위치를 등록할 수 있습니다. 먼저 해당 위치에 대한 보안 주체 액세스 권한이 있는 IAM 역할을 생성한 다음 S3 Access Grants에 이 역할을 수임할 권한을 부여해야 합니다.

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

예 리소스 정책 생성

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" } } ] } } }

Amazon S3 권한을 IAM 역할에 연결하기 위해 IAM 정책을 생성합니다. 다음 예시 iam-policy.json 파일을 확인하고 user input placeholders를 실제 정보로 대체하세요.

참고

AWS Key Management Service(AWS KMS) 키를 통한 서버 측 암호화를 사용하여 데이터를 암호화하는 경우 다음 예시는 IAM 역할에 필요한 AWS KMS 권한을 정책에 추가합니다. 이 기능을 사용하지 않는 경우 IAM 정책에서 이러한 권한을 제거할 수 있습니다.

S3 Access Grants에서 보안 인증 정보를 제공하는 경우에만 IAM 역할을 사용하여 S3의 데이터에 액세스할 수 있도록 하기 위해 이 예시에서는 IAM 정책에 S3 Access Grants 인스턴스(s3:AccessGrantsInstance: InstanceArn)를 지정하는 Condition 문을 추가하는 방법을 보여줍니다. 다음 예시 정책을 사용할 때 user input placeholders를 실제 정보로 대체하세요.

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 리전: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 리전:accountId:access-grants/default"] } } }, { "Sid": "KMSPermissions", "Effect":"Allow", "Action":[ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource":[ "*" ] } ] }

다음 명령 실행:

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 참조의 다음 섹션을 참조하세요.

이 섹션에서는 AWS SDK를 사용하여 위치를 등록하는 방법의 예시를 보여줍니다.

다음 예제를 사용하려면 user input placeholders를 사용자의 정보로 대체합니다.

Java

S3 Access Grants 인스턴스에 기본 위치인 s3:// 또는 사용자 지정 위치를 등록할 수 있습니다. 먼저 해당 위치에 대한 보안 주체 액세스 권한이 있는 IAM 역할을 생성한 다음 S3 Access Grants에 이 역할을 수임할 권한을 부여해야 합니다.

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

예 기본 위치 등록

요청:

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 )