사용자 애플리케이션에 대한 인증 및 액세스 제어 - Amazon WorkDocs

참고: Amazon에서는 새 고객 가입 및 계정 업그레이드를 더 이상 사용할 수 없습니다 WorkDocs. 여기에서 마이그레이션 단계에 대해 알아봅니다. Amazon에서 데이터를 마이그레이션하는 방법 WorkDocs.

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

사용자 애플리케이션에 대한 인증 및 액세스 제어

Amazon WorkDocs 사용자 수준의 애플리케이션은 Amazon WorkDocs 콘솔을 통해 등록하고 관리합니다. 개발자가 Amazon WorkDocs 콘솔의 My Applications 페이지에 애플리케이션을 등록하면 각 애플리케이션에 대한 고유 ID가 제공됩니다. 등록 과정에서 개발자는 액세스 토큰과 애플리케이션 범위를 받을 리디렉션 URI를 지정해야 합니다.

현재는 애플리케이션을 등록한 동일 AWS 계정 안에서 애플리케이션이 액세스할 수 있는 곳은 Amazon WorkDocs 사이트뿐입니다.

Amazon WorkDocs API를 직접적으로 호출할 수 있는 권한 부여

명령줄 인터페이스 사용자는 Amazon WorkDocs 및 AWS Directory Service에 대한 전체 권한을 가지고 있어야 합니다. 권한이 없는 경우 모든 API 직접 호출은 UnauthorizedResourceAccessException 메시지를 반환합니다. 다음 정책은 모든 권한을 부여합니다.

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "workdocs:*", "ds:*", "ec2:CreateVpc", "ec2:CreateSubnet", "ec2:CreateNetworkInterface", "ec2:CreateTags", "ec2:CreateSecurityGroup", "ec2:DescribeVpcs", "ec2:DescribeSubnets", "ec2:DescribeNetworkInterfaces", "ec2:DescribeAvailabilityZones", "ec2:AuthorizeSecurityGroupEgress", "ec2:AuthorizeSecurityGroupIngress", "ec2:DeleteSecurityGroup", "ec2:DeleteNetworkInterface", "ec2:RevokeSecurityGroupEgress", "ec2:RevokeSecurityGroupIngress" ], "Effect": "Allow", "Resource": "*" } ] }

읽기 전용 권한을 부여하려면 이 정책을 사용하십시오.

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "workdocs:Describe*", "ds:DescribeDirectories", "ec2:DescribeVpcs", "ec2:DescribeSubnets" ], "Effect": "Allow", "Resource": "*" } ] }

이 정책에서 첫 번째 작업은 모든 Amazon WorkDocs Describe 작업에 대한 액세스 권한을 부여합니다. DescribeDirectories 작업은 AWS Directory Service 디렉터리에 대한 정보를 가져옵니다. Amazon EC2 작업을 통해 Amazon WorkDocs는 VPC 및 서브넷 목록을 가져올 수 있습니다.

API 직접 호출 시 폴더 ID 사용

API 직접 호출로 폴더에 액세스할 때마다 폴더 이름이 아닌 폴더 ID를 사용해야 합니다. 예를 들어 client.get_folder(FolderId='MyDocs')을(를) 통과하면 API 직접 호출은 UnauthorizedResourceAccessException 메시지와 다음 404 메시지를 반환합니다.

client.get_folder(FolderId='MyDocs') Traceback (most recent call last): File "<stdin>", line 1, in <module> File "C:\Users\user-name\AppData\Local\Programs\Python\Python36-32\lib\site-packages\botocore\client.py", line 253, in _api_call return self._make_api_call(operation_name, kwargs) File "C:\Users\user-name\AppData\Local\Programs\Python\Python36-32\lib\site-packages\botocore\client.py", line 557, in _make_api_call raise error_class(parsed_response, operation_name) botocore.errorfactory.UnauthorizedResourceAccessException: An error occurred (UnauthorizedResourceAccessException) when calling the GetFolder operation: Principal [arn:aws:iam::395162986870:user/Aman] is not allowed to execute [workdocs:GetFolder] on the resource.

이를 방지하려면 폴더의 URL에 있는 ID를 사용하십시오.

site.workdocs/index.html#/folder/abc123def456ghi789jkl789mno4be7024df198736472dd50ca970eb22796082e3d489577.

해당 ID를 전달하면 올바른 결과가 반환됩니다.

client.get_folder(FolderId='abc123def456ghi789jkl789mno4be7024df198736472dd50ca970eb22796082e3d489577') {'ResponseMetadata': {'RequestId': 'f8341d4e-4047-11e7-9e70-afa8d465756c', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': 'f234564e-1234-56e7-89e7-a10fa45t789c', 'cache-control': 'private, no-cache, no-store, max-age=0', 'content-type': 'application/json', 'content-length': '733', 'date': 'Wed, 24 May 2017 06:12:30 GMT'}, 'RetryAttempts': 0}, 'Metadata': {'Id': 'abc123def456ghi789jkl789mno4be7024df198736472dd50ca970eb22796082e3d489577', 'Name': 'sentences', 'CreatorId': 'S-1-5-21-2125721135-1643952666-3011040551-2105&d-906724f1ce', 'ParentFolderId': '0a811a922403ae8e1d3c180f4975f38f94372c3d6a2656c50851c7fb76677363', 'CreatedTimestamp': datetime.datetime(2017, 5, 23, 12, 59, 13, 8000, tzinfo=tzlocal()), 'ModifiedTimestamp': datetime.datetime(2017, 5, 23, 13, 13, 9, 565000, tzinfo=tzlocal()), 'ResourceState': 'ACTIVE', 'Signature': 'b7f54963d60ae1d6b9ded476f5d20511'}}

애플리케이션 생성

Amazon WorkDocs 관리자가 다음 단계를 사용하여 애플리케이션을 생성합니다.

애플리케이션을 생성하려면
  1. https://console.aws.amazon.com/zocalo/에서 Amazon WorkDocs 콘솔을 엽니다.

  2. My Applications(내 애플리케이션), 애플리케이션 생성을 선택합니다.

  3. 다음 값을 입력합니다.

    애플리케이션 이름

    애플리케이션의 이름을 지정합니다.

    이메일

    애플리케이션과 연결할 이메일 주소입니다.

    애플리케이션 설명

    애플리케이션에 대한 설명입니다.

    리디렉션 URI

    Amazon WorkDocs가 트래픽을 리디렉션할 위치입니다.

    애플리케이션 범위

    애플리케이션의 읽기 또는 쓰기 범위입니다. 자세한 내용은 애플리케이션 범위을(를) 참조하십시오.

  4. 생성을 선택합니다.

애플리케이션 범위

Amazon WorkDocs는 다음 애플리케이션 범위를 지원합니다.

  • 다음 Amazon WorkDocs API에 애플리케이션 액세스를 부여하는 콘텐츠 읽기(workdocs.content.read):

    • Get*

    • Describe*

  • 다음 Amazon WorkDocs API에 애플리케이션 액세스를 부여하는 콘텐츠 쓰기(workdocs.content.write):

    • Create*

    • Update*

    • Delete*

    • Initiate*

    • Abort*

    • Add*

    • Remove*

승인

애플리케이션 등록이 완료되면 Amazon WorkDocs 사용자 대신 애플리케이션에서 권한 부여를 요청할 수 있습니다. 이를 위해 애플리케이션이 Amazon WorkDocs OAuth 엔드포인트인 https://auth.amazonworkdocs.com/oauth을(를) 방문하여 다음 쿼리 파라미터를 제공해야 합니다.

  • [필수] app_id—애플리케이션 등록 시 생성되는 애플리케이션 ID.

  • [필수] auth_type—요청에 대한 OAuth 유형. 지원되는 값은 ImplicitGrant입니다.

  • [필수] redirect_uri—액세스 토큰을 받기 위하여 애플리케이션에 등록한 리디렉션 URI.

  • [선택 사항] scopes—쉼표로 구분되는 범위 목록. 지정하지 않은 경우 등록 과정에서 선택한 범위 목록이 사용됩니다.

  • [선택 사항] state—액세스 토큰과 함께 반환되는 스트링.

참고

명령줄 인터페이스 또는 API를 통해 AWS에 액세스할 때 FIPS 140-2 검증된 암호화 모듈이 필요한 경우 FIPS 엔드포인트를 사용합니다. 사용 가능한 FIPS 엔드포인트에 대한 자세한 내용은 Federal Information Processing Standard(FIPS) 140-2를 참조하세요.

액세스 토큰을 얻기 위해 OAuth 흐름을 시작하는 샘플 GET 요청:

GET https://auth.amazonworkdocs.com/oauth?app_id=my-app-id&auth_type=ImplicitGrant&redirect_uri=https://myapp.com/callback&scopes=workdocs.content.read&state=xyz

OAuth 권한 부여 흐름 중에는 다음 작업이 진행됩니다.

  1. 애플리케이션 사용자에게 Amazon WorkDocs 사이트 이름을 입력하라는 메시지가 표시됩니다.

  2. 사용자는 보안 인증 정보를 입력하도록 Amazon WorkDocs 인증 페이지로 리디렉션됩니다.

  3. 인증에 성공하면 사용자가 애플리케이션에 Amazon WorkDocs에 액세스할 수 있는 권한을 부여하거나 거부할 수 있는 동의 화면이 표시됩니다.

  4. 동의 화면에서 사용자가 Accept를 선택하면 쿼리 파라미터와 마찬가지로 액세스 토큰, 리전 정보와 더불어 애플리케이션의 콜백 URL로 브라우저가 리디렉션됩니다.

Amazon WorkDocs의 샘플 GET 요청:

GET https://myapp.com/callback?acessToken=accesstoken&region=us-east-1&state=xyz

액세스 토큰 외에도 OAuth 서비스는 선택한 Amazon WorkDocs 사이트에 대한 쿼리 파라미터로 region을(를) 반환합니다. 외부 애플리케이션은 region 파라미터를 사용하여 Amazon WorkDocs 서비스 엔드포인트를 결정해야 합니다.

명령줄 인터페이스 또는 API를 통해 AWS에 액세스할 때 FIPS 140-2 검증된 암호화 모듈이 필요한 경우 FIPS 엔드포인트를 사용합니다. 사용 가능한 FIPS 엔드포인트에 대한 자세한 내용은 Federal Information Processing Standard(FIPS) 140-2를 참조하세요.

Amazon WorkDocs API 간접 호출

액세스 토큰을 얻은 후 애플리케이션에서 Amazon WorkDocs 서비스에 대한 API 직접 호출을 수행할 수 있습니다.

중요

이 예시는 curl GET 요청을 사용하여 문서의 메타데이터를 가져오는 방법을 보여줍니다.

Curl "https://workdocs.us-east-1.amazonaws.com/api/v1/documents/{document-id}" -H "Accept: application/json" -H "Authentication: Bearer accesstoken"

사용자의 루트 폴더를 설명하기 위한 JavaScript 함수 샘플:

function printRootFolders(accessToken, siteRegion) { var workdocs = new AWS.WorkDocs({region: siteRegion}); workdocs.makeUnauthenticatedRequest("describeRootFolders", {AuthenticationToken: accessToken}, function (err, folders) { if (err) console.log(err); else console.log(folders); }); }

Java 기반 API 호출의 샘플은 아래 설명이 나와 있습니다.

AWSCredentialsProvider credentialsProvider = new AWSCredentialsProvider() { @Override public void refresh() {} @Override public AWSCredentials getCredentials() { new AnonymousAWSCredentials(); } }; // Set the correct region obtained during OAuth flow. workDocs = AmazonWorkDocsClient.builder().withCredentials(credentialsProvider) .withRegion(Regions.US_EAST_1).build(); DescribeRootFoldersRequest request = new DescribeRootFoldersRequest(); request.setAuthenticationToken("access-token-obtained-through-workdocs-oauth"); DescribeRootFoldersResult result = workDocs.describeRootFolders(request); for (FolderMetadata folder : result.getFolders()) { System.out.printf("Folder name=%s, Id=%s \n", folder.getName(), folder.getId()); }