위치 등록하기

위치 등록하기

계정의 한 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 인스턴스에 위치를 등록하려면

  1. AWS Management Console에 로그인하고 Amazon S3 콘솔을 https://console.aws.amazon.com/s3/에서 엽니다.
  2. 왼쪽 탐색 창에서 Access Grants를 선택합니다.
  3. S3 Access Grants 페이지에서 작업하려는 S3 Access Grants 인스턴스가 들어 있는 리전을 선택합니다.
  4. S3 Access Grants 인스턴스를 처음 사용하는 경우, Set up Access Grants instance 마법사의 1단계 – S3 Access Grants 인스턴스 만들기를 완료하고 2단계로 이동했는지 확인합니다. 이미 S3 Access Grants 인스턴스가 있다면 View details를 선택한 다음 Locations 탭에서 Register location을 선택합니다.
  5. Location scope에서 Browse S3를 선택하거나 등록하려는 위치의 S3 URI 경로를 입력합니다. S3 URI 형식은 위의 위치 형식 표를 참고하세요. URI를 입력한 뒤 View를 선택해 위치를 탐색할 수 있어요.
  6. IAM role에서 다음 중 하나를 선택합니다.
    • 기존 IAM 역할에서 선택 – 드롭다운 목록에서 IAM 역할을 선택합니다. 역할을 선택한 뒤 View를 선택해 이 역할이 등록하려는 위치를 관리하는 데 필요한 권한이 있는지 확인합니다. 특히 이 역할이 S3 Access Grants에 sts:AssumeRole과 sts:SetSourceIdentity 권한을 부여하는지 확인하세요.
    • IAM 역할 ARN 입력 – IAM 콘솔로 이동해 IAM 역할의 Amazon Resource Name(ARN)을 복사해 이 상자에 붙여 넣습니다.
  7. 마무리하려면 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 역할을 지정해야 해요.

더 알아보기 (Learn more)