> ## Documentation Index
> Fetch the complete documentation index at: https://docs.ones1ght.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Amazon S3 接続

> 大容量ファイルをS3から直接読み込めるように接続しましょう

## S3接続とは？

ブラウザでのアップロードが難しい大容量ファイルをAmazon S3バケットに置くと、OneSightが参照時にそのファイルを直接読み込みます。ファイルはコピーして保管されないため、元のファイルを差し替えると次回の参照から即座に反映されます。

<Note>
  データソースの登録は\*\*管理者（Admin）\*\*権限を持つユーザーのみ行えます。AWS側の作業（ステップ1）は、該当バケットを管理する担当者が行う必要があります。
</Note>

## 準備するもの

* 接続する**バケット名**と**リージョン**（例: `ap-northeast-2`）
* 以下2つの認証方式のいずれかを設定できるAWS権限

## 2つの認証方式

| 方式            | 説明                                                              |
| ------------- | --------------------------------------------------------------- |
| **ロール委任**（推奨） | 自社のAWSアカウントに読み取り専用ロールを作成し、OneSightに使用を委任します。**長期アクセスキーを渡しません。** |
| **アクセスキー**    | 読み取り専用のアクセスキーとシークレットキーを発行して入力します。設定がよりシンプルです。                   |

<Note>
  S3互換ストレージ（MinIO・Cloudflare R2など）はロール委任に対応していません。この場合は**アクセスキー**方式を使用してください。
</Note>

## ステップ1: 読み取り専用権限の準備（AWS）

OneSightが必要とする権限は、以下の2つだけです。ファイルのアップロードや削除の権限は使用しないため、付与しないでください。

| 権限              | 用途                 |
| --------------- | ------------------ |
| `s3:ListBucket` | フォルダとファイルの一覧を表示します |
| `s3:GetObject`  | 選択したファイルの内容を読み込みます |

<Steps>
  <Step title="ポリシーを作成">
    AWSコンソールで**IAM → ポリシー → ポリシーの作成**に移動し、**JSON**タブを選択して以下の内容を貼り付けます。
    `my-bucket`の2箇所を実際のバケット名に置き換えてください。

    ```json theme={null}
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "OneSightListBucket",
          "Effect": "Allow",
          "Action": ["s3:ListBucket"],
          "Resource": "arn:aws:s3:::my-bucket"
        },
        {
          "Sid": "OneSightReadObjects",
          "Effect": "Allow",
          "Action": ["s3:GetObject"],
          "Resource": "arn:aws:s3:::my-bucket/*"
        }
      ]
    }
    ```

    2つの項目の形が異なるのは意図的なものです。一覧取得は**バケット自体**に、ファイル読み込みは**バケット内のオブジェクト**（`/*`）に適用されます。

    ポリシー名はわかりやすく`onesight-readonly`などにしてください。
  </Step>
</Steps>

このポリシーを**誰にアタッチするか**は認証方式によって異なります。以下では選択した方式のみ進めてください。

### ロール委任方式（推奨）

<Steps>
  <Step title="OneSight画面で2つの値を確認">
    コンソールで**データソース → 追加 → ストレージ → Amazon S3**を開き、認証方式を**ロール委任**に切り替えると、**Principal ARN**と**External ID**が表示されます。両方の値をコピーしておきます。

    <Warning>
      Principal ARNは**必ず画面に表示された値**を使用してください。環境によって異なるため、本ドキュメントの例をそのまま転記すると、意図しない主体を信頼することになります。
    </Warning>
  </Step>

  <Step title="ロールを作成し信頼ポリシーを指定">
    **IAM → ロール → ロールを作成**で**カスタム信頼ポリシー**を選択し、以下を貼り付けます。山括弧の2箇所を前のステップでコピーした値に置き換えてください。

    ```json theme={null}
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": { "AWS": "<画面に表示されたPrincipal ARN>" },
          "Action": "sts:AssumeRole",
          "Condition": {
            "StringEquals": { "sts:ExternalId": "<画面に表示されたExternal ID>" }
          }
        }
      ]
    }
    ```

    `sts:ExternalId`条件は**必ず**含める必要があります。この条件がないと、ロールARNを知った第三者がOneSightを経由してそのロールを使用できてしまいます。
  </Step>

  <Step title="権限をアタッチしロールARNをコピー">
    権限のステップで先ほど作成した`onesight-readonly`ポリシーをアタッチし、ロールを作成します。作成されたロールの**ARN**をコピーしておきます。
  </Step>
</Steps>

<Note>
  External IDは**組織ごとに1つに固定**された値です。データソースを複数登録したり再登録したりしても変わらないため、信頼ポリシーは一度設定すれば有効であり続けます。
</Note>

### アクセスキー方式

<Steps>
  <Step title="ユーザーを作成しポリシーをアタッチ">
    **IAM → ユーザー → ユーザーを作成**でOneSight専用のユーザーを作成し、権限設定のステップで**ポリシーを直接アタッチ**を選択して、先ほど作成したポリシーをアタッチします。

    人がログインするアカウントではないため、コンソールへのログイン権限は付与しなくても構いません。
  </Step>

  <Step title="アクセスキーを発行">
    作成したユーザーの**セキュリティ認証情報**タブで**アクセスキーを作成**を選択し、使用事例として**AWSの外部で実行されるアプリケーション**（サードパーティサービス）を選びます。

    発行された**アクセスキー**と**シークレットキー**を安全な場所にコピーして保管してください。
  </Step>
</Steps>

<Warning>
  シークレットキーは発行時に**一度だけ**表示されます。その後は再確認できないため、必ず安全な場所に保管してください。紛失した場合は、新しいキーを発行する必要があります。
</Warning>

## ステップ2: OneSightに接続

<Steps>
  <Step title="ストレージを選択">
    **データソース → 追加 → ストレージ → Amazon S3**を選択します。
  </Step>

  <Step title="接続情報を入力して接続">
    ステップ1で選択した**認証方式**を選び、以下の項目を入力したうえで接続を確認します。

    | 項目                | 説明                                |
    | ----------------- | --------------------------------- |
    | ロールARN            | *ロール委任方式* — ステップ1で作成したロールのARN     |
    | アクセスキー / シークレットキー | *アクセスキー方式* — ステップ1で発行したキー         |
    | リージョン             | バケットがあるリージョン（例: `ap-northeast-2`） |
    | バケット              | 接続するバケット名                         |
    | エンドポイント           | S3互換ストレージを使う場合のみ入力します（下記参照）       |
    | パス                | 特定のフォルダのみ探索する場合に入力します（任意）         |

    アクセスキー方式で入力したシークレットキーは登録時に**AES-256-GCM方式で暗号化されて保存**され、画面に再表示されることはありません。ロール委任方式では保存される長期シークレットはありません。
  </Step>

  <Step title="ファイルを選択">
    フォルダをクリックして移動し、使用するファイルを選択します。SQLite（`.db`）ファイルの場合は、続けて参照する**テーブル**を選びます。
  </Step>

  <Step title="確認して登録">
    プレビューでデータを確認し、自動で提案されたマッピングを確認したうえで、名前を指定して登録します。
  </Step>
</Steps>

## S3互換ストレージ

MinIO、Cloudflare R2、Wasabi、NAVER・NHN・KTクラウドなどのS3互換ストレージも同じ方法で接続できます。**エンドポイント**にそのストレージのアドレスを入力し、必要に応じて**path-style**オプションを有効にしてください。NASにMinIOを構築して使用している場合もこれに該当します。

ロール委任はAWS固有の機能のため、S3互換ストレージでは利用できません。**アクセスキー**方式で接続してください。

<Warning>
  エンドポイントは**外部から接続できるアドレス**である必要があります。社内ネットワークやVPN内でのみ開かれているアドレスは、セキュリティポリシーによりブロックされます。
</Warning>

## 対応ファイル形式とサイズ制限

| 形式                    | サイズ制限                     |
| --------------------- | ------------------------- |
| CSV                   | 制限なし — ファイルの先頭4MBまで読み込みます |
| Excel（`.xlsx`、`.xls`） | 32MB                      |
| JSON                  | 32MB                      |
| SQLite（`.db`）         | 256MB                     |

Excel・JSON・SQLiteは形式の特性上、ファイル全体を取得しないと開けないためサイズ制限があります。制限を超えると、登録ステップで案内メッセージが表示されます。

## 次のステップ

<CardGroup cols={2}>
  <Card title="SFTP 接続" icon="terminal" href="/ja/data-sources/sftp">
    SFTPサーバーのファイルを接続します
  </Card>

  <Card title="お問い合わせ" icon="message" href="/ja/support/tickets">
    接続できない場合はお問い合わせください
  </Card>
</CardGroup>
