

**注意**: 新しい顧客のサインアップとアカウントのアップグレードは、Amazon WorkDocs では利用できなくなりました。移行手順については、[WorkDocs からデータを移行する方法](https://aws.amazon.com/blogs/business-productivity/how-to-migrate-content-from-amazon-workdocs)」を参照してください。

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# ユーザーアプリケーションの認証とアクセス制御
<a name="wd-auth-user"></a>

WorkDocs ユーザーレベルのアプリケーションは、WorkDocs コンソールを使用して登録および管理されます。開発者は、各アプリケーションに一意の IDs を提供する WorkDocs コンソールの`My Applications`ページにアプリケーションを登録する必要があります。登録時に、開発者はリダイレクト URI を指定して、アクセストークンとアプリケーションスコープを受け取る必要があります。

現在、アプリケーションは登録されているのと同じ AWS アカウント内の WorkDocs サイトにのみアクセスできます。

**Topics**
+ [WorkDocs APIs を呼び出すアクセス許可の付与](#api-auth)
+ [API 呼び出しでのフォルダー ID の使用](#use-folder-ids)
+ [アプリケーションの作成](#wd-app-create-app)
+ [アプリケーションスコープ](#wd-app-scopes)
+ [Authorization](#wd-authorization)
+ [WorkDocs APIs呼び出し](#wd-auth-invoke)

## WorkDocs APIs を呼び出すアクセス許可の付与
<a name="api-auth"></a>

コマンドラインインターフェイスのユーザーには、WorkDocs および に対する完全なアクセス許可が必要です Directory Service。権限がないと、どの API **呼び出しでも不正リソースアクセス例外メッセージが返されます**。次のポリシーは完全な権限を付与します。

```
{
  "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": "*"
    }
  ]
}
```

ポリシーでは、最初のアクションはすべての WorkDocs `Describe`オペレーションへのアクセスを許可します。`DescribeDirectories ` アクションは、 Directory Service ディレクトリに関する情報を取得します。Amazon EC2 オペレーションにより、WorkDocs は VPCsとサブネットのリストを取得できます。

## API 呼び出しでのフォルダー ID の使用
<a name="use-folder-ids"></a>

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'}}
```

## アプリケーションの作成
<a name="wd-app-create-app"></a>

WorkDocs 管理者として、次の手順を使用してアプリケーションを作成します。

**アプリケーションを作成する方法**

1. [https://console.aws.amazon.com/zocalo/](https://console.aws.amazon.com/zocalo/) で WorkDocs コンソールを開きます。

1. **[マイアプリケーション]**、**[アプリケーションの作成]**の順に選択します。

1. 次の値を入力します。  
**アプリケーション名**  
アプリケーションの名前。  
**Email**(メール)  
アプリケーションに関連付るメールアドレス。  
**Application Description(アプリケーションの説明)**  
アプリケーションの説明。  
**リダイレクト URI**  
WorkDocs がトラフィックをリダイレクトする場所。  
**Application Scopes**(アプリケーションスコープ)  
アプリケーションに設定するスコープ (読み取りまたは書き込みのいずれか)。詳細については、「[アプリケーションスコープ](#wd-app-scopes)」をご参照ください。

1. **[作成]** を選択します。

## アプリケーションスコープ
<a name="wd-app-scopes"></a>

WorkDocs は、次のアプリケーションスコープをサポートしています。
+ Content Read (`workdocs.content.read`) は、アプリケーションに次の WorkDocs APIs へのアクセスを許可します。
  + 取得\*
  + 説明\*
+ Content Write (`workdocs.content.write`) は、アプリケーションに次の WorkDocs APIsへのアクセスを許可します。
  + 作成\*
  + 更新\*
  + 削除\*
  + ジョブの開始\*
  + 中止\*
  + 追加\*
  + 削除\*

## Authorization
<a name="wd-authorization"></a>

アプリケーション登録が完了すると、アプリケーションは WorkDocs ユーザーに代わって認可をリクエストできます。これを行うには、アプリケーションは 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 エンドポイントの詳細については、[[連邦情報処理規格 (FIPS) 140-2 ]](https://aws.amazon.com/compliance/fips/) をご参照ください。

アクセストークン取得のための 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. アプリケーションユーザーは、WorkDocs サイト名を入力するように求められます。

1. ユーザーは WorkDocs 認証ページにリダイレクトされ、認証情報を入力します。

1. 認証に成功すると、ユーザーに WorkDocs へのアクセス許可をアプリケーションに付与または拒否することを許可する同意画面が表示されます。

1. ユーザーが同意画面で `Accept` を選択すると、ブラウザは、クエリパラメータとしてのアクセストークンとリージョン情報とともに、アプリケーションのコールバック URL にリダイレクトされます。

WorkDocs からの GET リクエストの例：

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

アクセストークンに加えて、WorkDocs OAuth サービスは選択した WorkDocs サイトのクエリパラメータ`region`として も返します。 WorkDocs 外部アプリケーションは、 `region`パラメータを使用して WorkDocs サービスエンドポイントを決定する必要があります。

コマンドラインインターフェイスまたは API を使用して AWS にアクセスするときに FIPS 140-2 検証済みの暗号化モジュールが必要な場合は、FIPS エンドポイントを使用します。利用可能な FIPS エンドポイントの詳細については、[[連邦情報処理規格 (FIPS) 140-2 ]](https://aws.amazon.com/compliance/fips/) をご参照ください。

## WorkDocs APIs呼び出し
<a name="wd-auth-invoke"></a>

アクセストークンを取得した後、アプリケーションは 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());
}
```