

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

# Amazon S3 バケット
<a name="S3-buckets"></a>

Research and Engineering Studio (RES) は、Linux Virtual Desktop Infrastructure (VDI) インスタンスへの [Amazon S3 バケット](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)のマウントをサポートしています。RES 管理者は、**環境管理**の S3 バケットタブで、S3 バケットを RES にオンボードしたり、プロジェクトにアタッチしたり、設定を編集したり、バケットを削除したりできます。

S3 バケットダッシュボードには、利用可能なオンボード S3 バケットのリストが表示されます。S3 バケットダッシュボードから、次のことができます。

1. **バケットの追加**を使用して、S3 バケットを RES にオンボードします。

1. S3 バケットを選択し、**アクション**メニューを使用して次の操作を行います。
   + バケットを編集する
   + バケットを削除する

1. 検索フィールドを使用してバケット名で検索し、オンボードされた S3 バケットを検索します。  
![\[S3 バケットリストでは、バケット名で検索し、オンボードされたバケットを検索できます。\]](http://docs.aws.amazon.com/ja_jp/res/latest/ug/images/docs-list-bucket.png)

以下のセクションでは、RES プロジェクトで Amazon S3 バケットを管理する方法について説明します。

**Topics**
+ [分離された VPC デプロイの Amazon S3 バケットの前提条件](S3-buckets-prereqs.md)
+ [Amazon S3 バケットを追加する](S3-buckets-add.md)
+ [Amazon S3 バケットを編集する](S3-buckets-edit.md)
+ [Amazon S3 バケットを削除する](S3-buckets-remove.md)
+ [データ分離](S3-buckets-data-isolation.md)
+ [クロスアカウントバケットアクセス](S3-buckets-cross-account-access.md)
+ [プライベート VPC でのデータ流出の防止](S3-buckets-preventing-exfiltration.md)
+ [トラブルシューティング](S3-buckets-troubleshooting.md)
+ [CloudTrail の有効化](S3-buckets-enabling-cloudtrail.md)

# 分離された VPC デプロイの Amazon S3 バケットの前提条件
<a name="S3-buckets-prereqs"></a>

Research and Engineering Studio を分離された VPC にデプロイする場合は、以下の手順に従って、 AWS アカウントに RES をデプロイした後に Lambda 設定パラメータを更新します。

1. Research and Engineering Studio がデプロイされている AWS アカウントの Lambda コンソールにサインインします。

1. という名前の Lambda 関数を見つけて移動します`<RES-EnvironmentName>-vdc-custom-credential-broker-lambda`。

1. 関数**の設定**タブを選択します。  
![\[分離された VPC 環境変数\]](http://docs.aws.amazon.com/ja_jp/res/latest/ug/images/Isolated-VPC-Env-Variable.png)

1. ナビゲーションペインで、**環境変数**を選択してそのセクションを表示します。

1. **編集**を選択し、次の新しい環境変数を関数に追加します。
   + キー: `AWS_STS_REGIONAL_ENDPOINTS` 
   + 値: `regional` 

1. **[保存]** を選択します。

# Amazon S3 バケットを追加する
<a name="S3-buckets-add"></a>

**RES 環境に S3 バケットを追加するには:**

1. [**Add bucket (バケットの追加)**] を選択します。

1. バケット名、ARN、マウントポイントなどのバケットの詳細を入力します。
**重要**  
指定されたバケット ARN、マウントポイント、モードは、作成後に変更することはできません。
バケット ARN には、オンボードされた S3 バケットをそのプレフィックスに分離するプレフィックスを含めることができます。

1. バケットをオンボードするモードを選択します。
**重要**  
特定のモードによるデータ分離の詳細については、[データ分離](S3-buckets-data-isolation.md)「」を参照してください。

1. **詳細オプション**では、クロスアカウントアクセス用にバケットをマウントするための IAM ロール ARN を指定できます。の手順に従って[クロスアカウントバケットアクセス](S3-buckets-cross-account-access.md)、クロスアカウントアクセスに必要な IAM ロールを作成します。

1. (オプション) バケットをプロジェクトに関連付けます。プロジェクトは後で変更できます。ただし、S3 バケットをプロジェクトの既存の VDI セッションにマウントすることはできません。プロジェクトがバケットに関連付けられた後に起動されたセッションのみがバケットをマウントします。

1. [**Submit**] を選択してください。  
![\[使用可能なバケット設定フィールドと送信ボタンを示すバケットページを追加する\]](http://docs.aws.amazon.com/ja_jp/res/latest/ug/images/docs-add-bucket.png)

# Amazon S3 バケットを編集する
<a name="S3-buckets-edit"></a>

1. S3 バケットリストで S3 バケットを選択します。

1. **アクション**メニューから、**編集** を選択します。

1. 更新を入力します。
**重要**  
プロジェクトを S3 バケットに関連付けると、そのプロジェクトの既存の仮想デスクトップインフラストラクチャ (VDI) インスタンスにバケットがマウント**されません**。バケットは、バケットがそのプロジェクトに関連付けられた後に、プロジェクトで起動された VDI セッションにのみマウントされます。
S3 バケットからプロジェクトの関連付けを解除しても、S3 バケット内のデータには影響しませんが、デスクトップユーザーはそのデータにアクセスできなくなります。

1. **バケット設定の保存** を選択します。  
![\[表示名とプロジェクトの関連付けフィールドが入力され、バケット設定を保存ボタンが強調表示された S3 バケットの編集ページ\]](http://docs.aws.amazon.com/ja_jp/res/latest/ug/images/docs-edit-bucket.png)

# Amazon S3 バケットを削除する
<a name="S3-buckets-remove"></a>

1. S3 バケットリストで S3 バケットを選択します。

1. **アクション**メニューから、**削除**を選択します。
**重要**  
まず、バケットからすべてのプロジェクトの関連付けを削除する必要があります。
削除オペレーションは、S3 バケット内のデータには影響しません。S3 バケットと RES の関連付けのみが削除されます。
バケットを削除すると、そのセッションの認証情報の有効期限 (約 1 時間) に、既存の VDI セッションがそのバケットの内容にアクセスできなくなります。

# データ分離
<a name="S3-buckets-data-isolation"></a>

RES に S3 バケットを追加すると、バケット内のデータを特定のプロジェクトとユーザーに分離するオプションがあります。**バケットの追加**ページで、読み取り専用 (R) または読み取りと書き込み (R/W) のモードを選択できます。

**読み取り専用**

`Read Only (R)` を選択した場合、バケット ARN (Amazon リソースネーム) のプレフィックスに基づいてデータ分離が適用されます。たとえば、管理者が ARN を使用して RES にバケットを追加`arn:aws:s3:::bucket-name/example-data/`し、このバケットをプロジェクト A とプロジェクト B に関連付けると、プロジェクト A とプロジェクト B 内から VDIs を起動するユーザーは、パス の `bucket-name` にあるデータのみを読み取ることができます`/example-data`。そのパス外のデータにはアクセスできません。バケット ARN にプレフィックスが追加されていない場合、バケット全体がそれに関連付けられたプロジェクトで利用可能になります。

**読み取りと書き込み**

`Read and Write (R/W)` を選択した場合でも、上記のように、バケット ARN のプレフィックスに基づいてデータ分離が適用されます。このモードには、管理者が S3 バケットに変数ベースのプレフィックスを提供できるようにする追加オプションがあります。`Read and Write (R/W)` を選択すると、カスタムプレフィックスセクションが利用可能になり、次のオプションを含むドロップダウンメニューが表示されます。
+ カスタムプレフィックスなし
+ /%p
+ /%p/%u

![\[カスタムプレフィックスドロップダウンを表示してバケットページを追加する\]](http://docs.aws.amazon.com/ja_jp/res/latest/ug/images/add-bucket-custom-prefix.png)


**カスタムデータ分離なし **  
**カスタムプレフィックス**に `No custom prefix`を選択すると、バケットはカスタムデータ分離なしで追加されます。これにより、バケットに関連付けられたすべてのプロジェクトに読み取りおよび書き込みアクセスが許可されます。例えば、管理者が`arn:aws:s3:::bucket-name``No custom prefix`選択した ARN を使用して RES にバケットを追加し、このバケットをプロジェクト A とプロジェクト B に関連付けると、プロジェクト A とプロジェクト B 内から VDIs を起動するユーザーは、バケットへの無制限の読み取りおよび書き込みアクセス権を持ちます。

**プロジェクトレベルごとのデータ分離 **  
**カスタムプレフィックス**に `/%p`を選択すると、バケット内のデータはそれに関連付けられた特定のプロジェクトごとに分離されます。`%p` 変数はプロジェクトコードを表します。例えば、管理者が`arn:aws:s3:::bucket-name``/%p`選択した と */bucket* の**マウントポイント**を使用して RES にバケットを追加し、このバケットをプロジェクト A とプロジェクト B に関連付けると、プロジェクト A のユーザー A は */bucket* にファイルを書き込むことができます。プロジェクト A のユーザー B は、ユーザー A が */bucket* で書き込んだファイルを表示することもできます。ただし、ユーザー B がプロジェクト B で VDI を起動し、*/bucket* を検索すると、データがプロジェクトによって分離されるため、ユーザー A が作成したファイルが表示されません。ユーザー A が書き込んだファイルは、プレフィックスの下の S3 バケットにあります`/ProjectA`が、ユーザー B はプロジェクト B から VDIs を使用する`/ProjectB`場合にのみアクセスできます。

**プロジェクトごと、ユーザーごとのデータ分離 **  
**カスタムプレフィックス**に `/%p/%u`を選択すると、バケット内のデータは、そのプロジェクトに関連付けられた特定のプロジェクトとユーザーに分離されます。`%p` 変数はプロジェクトコードを表し、ユーザー名`%u`を表します。たとえば、管理者は`/%p/%u`、選択した と */bucket* のマウントポイント`arn:aws:s3:::bucket-name`の ARN を使用して RES にバケットを追加します。このバケットはプロジェクト A とプロジェクト B に関連付けられています。プロジェクト A のユーザー A は */bucket* にファイルを書き込むことができます。`%p` 分離のみの以前のシナリオとは異なり、この場合のユーザー B には、/*bucket* のプロジェクト A で書き込まれたファイルが表示されません。これは、データがプロジェクトとユーザーの両方によって分離されるためです。ユーザー A が書き込んだファイルは、プレフィックスの S3 バケットにあります`/ProjectA/UserA`が、ユーザー B はプロジェクト A で VDIs を使用する`/ProjectA/UserB`場合にのみ にアクセスできます。

# クロスアカウントバケットアクセス
<a name="S3-buckets-cross-account-access"></a>

RES は、これらのバケットに適切なアクセス許可がある場合、他の AWS アカウントからバケットをマウントできます。次のシナリオでは、アカウント A の RES 環境がアカウント B に S3 バケットをマウントしたいと考えています。

**ステップ 1: RES がデプロイされているアカウントに IAM ロールを作成します *(これはアカウント A と呼ばれます)*。**

1. S3 バケット (アカウント A) へのアクセスを必要とする RES アカウントの AWS マネジメントコンソールにサインインします。

1. IAM コンソールを開きます。

   1. IAM ダッシュボードに移動します。

   1. ナビゲーションペインで、**ポリシー** を選択してください。

1. ポリシーを作成する: 

   1. [**Create policy**] (ポリシーの作成) を選択します。

   1. [**JSON**] タブを選択します。

   1. 次の JSON ポリシーを貼り付けます ( をアカウント B にある S3 バケットの名前`amzn-s3-demo-bucket`に置き換えます）。

------
#### [ JSON ]

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Action": [
                      "s3:GetObject",
                      "s3:PutObject",
                      "s3:ListBucket",
                      "s3:DeleteObject",
                      "s3:AbortMultipartUpload"
                  ],
                  "Resource": [
                      "arn:aws:s3:::amzn-s3-demo-bucket",
                      "arn:aws:s3:::amzn-s3-demo-bucket/*"
                  ]
              }
          ]
      }
      ```

------

   1. [**次へ**] を選択します。

1. ポリシーを確認して作成します。

   1. ポリシーの名前を指定します (例: "S3AccessPolicy")。

   1. ポリシーの目的を説明するオプションの説明を追加します。

   1. ポリシーを確認し、**ポリシーの作成**を選択します。

1. IAM コンソールを開きます。

   1. IAM ダッシュボードに移動します。

   1. ナビゲーションペインで **Roles (ロール) ** を選択してください。

1. ロールを作成する:

   1. [**ロールの作成**] を選択してください。

   1. 信頼されたエンティティのタイプとして**カスタム信頼ポリシー**を選択します。

   1. 次の JSON ポリシーを貼り付けます ( をアカウント A の実際のアカウント ID `111122223333`に置き換え、 を RES デプロイの環境名`{RES_ENVIRONMENT_NAME}`に置き換えます。

------
#### [ JSON ]

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Principal": {
                      "AWS": "arn:aws:iam::111122223333:role/<ENVIRONMENT_NAME>-vdc-custom-credential-broker-lambda-role"
                  },
                  "Action": "sts:AssumeRole"
              }
          ]
      }
      ```

------

   1. [**次へ**] を選択します。

1. アクセス許可ポリシーをアタッチする:

   1. 前に作成したポリシーを検索して選択します。

   1. [**次へ**] を選択します。

1. ロールのタグ付け、確認、作成: 

   1. ロール名 (S3AccessRole」など) を入力します。

   1. ステップ 3 で、**タグの追加**を選択し、次のキーと値を入力します。
      + キー: `res:Resource` 
      + 値: `s3-bucket-iam-role` 

   1. ロールを確認し、**ロールの作成**を選択します。

1. RES で IAM ロールを使用します。

   1. 作成した IAM ロール ARN をコピーします。

   1. RES コンソールにサインインします。

   1. 左側のナビゲーションペインで、**S3 バケット**を選択します。

   1. **バケットの追加**を選択し、フォームにクロスアカウントの S3 バケット ARN を入力します。

   1. **詳細設定 - オプションの**ドロップダウンを選択します。

   1. IAM ロール ARN フィールドにロール ARN を入力します。

   1. **バケットの追加** を選択します。

**ステップ 2: アカウント B でバケットポリシーを変更する**

1. アカウント B の AWS マネジメントコンソールにサインインします。

1. S3 コンソールを開きます。

   1. S3 ダッシュボードに移動します。

   1. アクセスを許可するバケットを選択します。

1. バケットポリシーを編集します。

   1. アクセス**許可**タブを選択し、**バケットポリシー**を選択します。

   1. 次のポリシーを追加して、アカウント A の IAM ロールにバケットへのアクセスを許可します (*111122223333* をアカウント A の実際のアカウント ID に置き換え、*amzn-s3-demo-bucket* を S3 バケットの名前に置き換えます）。

------
#### [ JSON ]

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Principal": {
                      "AWS": "arn:aws:iam::111122223333:role/S3AccessRole"
                  },
                  "Action": [
                      "s3:GetObject",
                      "s3:PutObject",
                      "s3:ListBucket",
                      "s3:DeleteObject",
                      "s3:AbortMultipartUpload"
                  ],
                  "Resource": [
                      "arn:aws:s3:::amzn-s3-demo-bucket",
                      "arn:aws:s3:::amzn-s3-demo-bucket/*"
                  ]
              }
          ]
      }
      ```

------

   1. **[保存]** を選択します。

# プライベート VPC でのデータ流出の防止
<a name="S3-buckets-preventing-exfiltration"></a>

ユーザーが安全な S3 バケットからアカウント内の独自の S3 バケットにデータを流出しないようにするには、VPC エンドポイントをアタッチしてプライベート VPC を保護します。次の手順は、アカウント内の S3 バケットへのアクセスをサポートする S3 サービスの VPC エンドポイントと、クロスアカウントバケットを持つ追加のアカウントを作成する方法を示しています。

1. Amazon VPC コンソールを開きます。

   1.  AWS マネジメントコンソールにサインインします。

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

1. S3 の VPC エンドポイントを作成する:

   1. 左のナビゲーションペインで [**エンドポイント**] を選択してください。

   1. **[Create Endpoint]** (エンドポイントの作成) を選択します。

   1. [**Service category**] (サービスカテゴリ) で、[**AWS services**] (AWS のサービス) が選択されていることを確認します。

   1. **サービス名**フィールドに「」と入力するか `com.amazonaws.<region>.s3` ( AWS リージョン`<region>`に置き換える）、「S3」を検索します。

   1. リストから S3 サービスを選択します。

1. エンドポイント設定の構成: 

   1. **[VPC]** で、エンドポイントを作成する VPC を選択します。

   1. **サブネット**の場合は、デプロイ中に VDI サブネットに使用されるプライベートサブネットの両方を選択します。

   1. **DNS 名を有効にする** で、 オプションがオンになっていることを確認します。これにより、プライベート DNS ホスト名をエンドポイントネットワークインターフェイスに解決できます。

1. アクセスを制限するように ポリシーを設定します。

   1. Policy で****、**Custom** を選択します。

   1. ポリシーエディタで、アカウントまたは特定のアカウント内のリソースへのアクセスを制限するポリシーを入力します。ポリシーの例を次に示します (*amzn-s3-demo-bucket* を S3 バケット名に置き換え、*111122223333* と *444455556666* をアクセスする適切な AWS アカウント IDsに置き換えます）。
**注記**  
このポリシー例では`s3:*`、 を使用し、イベント通知設定、レプリケーション、インベントリなどの S3 コントロールプレーンオペレーションを制限しません。これらのオペレーションにより、オブジェクトメタデータ (バケット名やオブジェクトキーなど) をクロスアカウントの送信先に送信できます。これが懸念される場合は、VPC エンドポイントポリシーの関連する S3 コントロールプレーンアクションに明示的な拒否ステートメントを追加します。

------
#### [ JSON ]

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Principal": "*",
                  "Action": "s3:*",
                  "Resource": [
                      "arn:aws:s3:::amzn-s3-demo-bucket",
                      "arn:aws:s3:::amzn-s3-demo-bucket/*"
                  ],
                  "Condition": {
                      "StringEquals": {
                          "aws:PrincipalAccount": [
                              "111122223333",
                              "444455556666"
                          ]
                      }
                  }
              }
          ]
      }
      ```

------

1. エンドポイントを作成します。

   1. 設定を確認します。

   1. **エンドポイントの作成** を選択します。

1. エンドポイントを検証する:

   1. エンドポイントが作成されたら、**VPC コンソールのエンドポイント**セクションに移動します。

   1. 新しく作成したエンドポイントを選択します。

   1. **状態**が**使用可能**であることを確認します。

これらのステップに従って、アカウントまたは指定されたアカウント ID 内のリソースに制限された S3 アクセスを許可する VPC エンドポイントを作成します。

# トラブルシューティング
<a name="S3-buckets-troubleshooting"></a>

**バケットが VDI へのマウントに失敗したかどうかを確認する方法** 

バケットが VDI へのマウントに失敗した場合、エラーをチェックできる場所がいくつかあります。以下のステップに従います。

1. VDI ログを確認します。

   1.  AWS マネジメントコンソールにサインインします。

   1. EC2 コンソールを開き、**インスタンス**に移動します。

   1. 起動した VDI インスタンスを選択します。

   1. Session Manager を介して VDI に接続します。

   1. 以下の コマンドを実行します。

      ```
      sudo su
      cd ~/bootstrap/logs
      ```

      ここでは、ブートストラップログを確認できます。障害の詳細は `configure.log.{time}` ファイルにあります。

      さらに、ログ`/etc/message`で詳細を確認してください。

1. カスタム認証情報ブローカーの Lambda CloudWatch Logs を確認する:

   1.  AWS マネジメントコンソールにサインインします。

   1. CloudWatch コンソールを開き、**ロググループ**に移動します。

   1. ロググループ を検索します`/aws/lambda/<stack-name>-vdc-custom-credential-broker-lambda`。

   1. 最初に使用可能なロググループを調べ、ログ内のエラーを見つけます。これらのログには、S3 バケットをマウントするための一時的なカスタム認証情報を提供する潜在的な問題に関する詳細が含まれます。

1. カスタム認証情報ブローカー API Gateway CloudWatch Logs を確認します。

   1.  AWS マネジメントコンソールにサインインします。

   1. CloudWatch コンソールを開き、**ロググループ**に移動します。

   1. ロググループ を検索します`<stack-name>-vdc-custom-credential-broker-lambdavdccustomcredentialbrokerapigatewayaccesslogs<nonce>`。

   1. 最初に使用可能なロググループを調べ、ログ内のエラーを見つけます。これらのログには、S3 バケットのマウントに必要なカスタム認証情報の API Gateway へのリクエストとレスポンスに関する詳細が含まれます。

**オンボーディング後にバケットの IAM ロール設定を編集する方法** 

1. [AWS DynamoDB コンソール](https://console.aws.amazon.com/dynamodbv2/home)にサインインします。

1. テーブルを選択します。

   1. 左のナビゲーションペインで、**[テーブル]** を選択します。

   1. を検索して選択します`<stack-name>.cluster-settings`。

1. テーブルをスキャンします。

   1. **[テーブルアイテムの探索]** を選択します。

   1. **スキャン**が選択されていることを確認します。

1. フィルターを追加する:

   1. **フィルター**を選択してフィルターエントリセクションを開きます。

   1. キーと一致するようにフィルターを設定します。
      + **属性**: キーを入力します。
      + **条件**: 「 **で始まる**」を選択します。
      + **値**: `shared-storage.<filesystem_id>.s3_bucket.iam_role_arn` *<filesystem\$1id>* を変更する必要があるファイルシステムの値に置き換えます。

1. スキャンを実行します。

   **Run** を選択して、フィルターを使用してスキャンを実行します。

1. 値を確認します。

   エントリが存在する場合は、適切な IAM ロール ARN で値が正しく設定されていることを確認します。

   エントリが存在しない場合:

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

   1. 項目の詳細を入力します。
      + key 属性には、 と入力します`shared-storage.<filesystem_id>.s3_bucket.iam_role_arn`。
      + 正しい IAM ロール ARN を追加します。

   1. **保存**を選択して項目を追加します。

1. VDI インスタンスを再起動します。

   インスタンスを再起動して、誤った IAM ロール ARN の影響を受ける VDIs が再度マウントされるようにします。

# CloudTrail の有効化
<a name="S3-buckets-enabling-cloudtrail"></a>

CloudTrail コンソールを使用してアカウントで CloudTrail を有効にするには、「CloudTrail ユーザーガイド」の[CloudTrail コンソールを使用した証跡の作成](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-create-a-trail-using-the-console-first-time.html)」に記載されている手順に従ってください。 *AWS CloudTrail * CloudTrail は、S3 バケットにアクセスした IAM ロールを記録することで、S3 バケットへのアクセスを記録します。これは、プロジェクトまたはユーザーにリンクされたインスタンス ID にリンクできます。