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

# Amazon Redshift をセットアップする

> AWS で IAM ユーザー、ロール、権限を構成し、Amazon Redshift クラスタを Kameleoon に接続してデータウェアハウス統合を行います。

このガイドでは、Kameleoon と Amazon Redshift の統合をセットアップするために必要な手順を説明します。Kameleoon UI と AWS アカウントの両方でセットアップが必要です。これらのアクションの一部は、特定の AWS 環境に合わせて調整する必要がある場合があります。いずれの場合も、これらの手順は AWS アカウント管理者が実行する必要があります。

## ステップ 1: AWS IAM ユーザーとロールを作成する

Kameleoon が Redshift クラスタへのアクセスに使用する IAM ユーザーとロールを作成する必要があります。これらは AWS マネジメントコンソールまたは AWS CLI で作成できます。ここでは AWS CLI のコマンド例を示します。

### 1. IAM ユーザーを作成する

以下のコマンドを使用して、Kameleoon 専用の IAM ユーザーを作成します:

`aws iam create-user --user-name kameleoon_user`

次に、kameleoon\_user のアクセスキーを生成します:

`aws iam create-access-key --user-name kameleoon_user`

このコマンドが返す JSON 内の `AccessKeyId` および `SecretAccessKey` フィールドは必ず控えておいてください。Kameleoon UI でセットアップを行う際に、これらを Kameleoon に提供するよう求められます。

### 2. IAM ロールを作成する

Kameleoon が引き受けることができるロールを作成し、Redshift クラスタとの対話を許可します。インライン JSON 信頼ポリシーでロールを作成するには、以下のコマンドを使用します:

```shell theme={null}
aws iam create-role --role-name kameleoon_role --assume-role-policy-document '{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::{account_id}:user/kameleoon_user",
                "Service": [
    				"s3.amazonaws.com",
    				"redshift.amazonaws.com",
   				"iam.amazonaws.com",
    				"redshift-serverless.amazonaws.com"
]
            },
            "Action": "sts:AssumeRole"
        }
    ]
}'

```

`{account_id}` を AWS アカウント ID に置き換えてください。

Redshift をソースとして使用する場合、`s3.amazonaws.com` は省略できます。Provisioned を使用する場合、`redshift-serverless.amazonaws.com` は省略できます。

#### Amazon Redshift をデスティネーションとして使用する場合 — IAM ロールに S3 Redshift アクセス権を付与する

S3 ロールを作成して接続し、Kameleoon が選択した S3 バケットと対話し、S3 から Redshift にデータをコピーできるようにします。

```shell theme={null}
aws iam attach-role-policy \
  --role-name kameleoon_role \
  --policy-document '{
  	  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:GetObject",
        "s3:ListBucket",
        "s3:DeleteObject"
      ],
      "Resource": "arn:aws:s3:::{s3_bucket_name}/*"
    },
    {
"Effect": "Allow",
"Action": [
  "redshift:GetClusterCredentialsWithIAM",
  "redshift:GetClusterCredentials",
  "redshift:DescribeClusters"
],
"Resource": "arn:aws:redshift:{aws_region}:{account_id}:dbuser:kameleoon_user"
    }
  ]
}'
```

`{s3_bucket_name}`、`{aws_region}`、`{account_id}` をご自身のデータに置き換えてください。

または、既存の [AmazonS3FullAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonS3FullAccess.html) および [AmazonRedshiftFullAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonRedshiftFullAccess.html) ポリシーを使用してください。

## ステップ 2: Kameleoon ロールに権限を付与する

Kameleoon に関連付けられた IAM ロールに必要な権限を付与し、Redshift データベースとの対話を可能にします。権限は SQL ユーザーレベルで SQL コマンドを介して付与する必要があります。IAM ロール用に作成されたデフォルトの SQL ユーザーは `IAMR:{role_name}` と呼ばれるため、使用するロールが `kameleoon_role` と呼ばれる場合、SQL ユーザー `IAMR:kameleoon_role` に対してこれらのコマンドを実行することになります。

### Amazon Redshift をソースとして使用する場合

#### 1. 既存のスキーマへのアクセスを付与する

Kameleoon IAM ロールに、Redshift データベース内の関連するスキーマとテーブルへのアクセスを提供します。たとえば、Kameleoon に `schema_containing_data` スキーマの「users」テーブルからデータを取り込ませたい場合、以下の SQL コマンドを実行します:

```sql theme={null}
GRANT USAGE ON SCHEMA "schema_containing_data" TO "IAMR:kameleoon_role";
GRANT SELECT ON TABLE "schema_containing_data"."users" TO "IAMR:kameleoon_role";
```

#### 2. Kameleoon 設定スキーマを作成する

Kameleoon 設定用の新しいスキーマを作成し、必要な権限を付与します:

```sql theme={null}
CREATE SCHEMA "kameleoon_configuration";

GRANT USAGE ON SCHEMA "kameleoon_configuration" TO "IAMR:kameleoon_role";
GRANT CREATE ON SCHEMA "kameleoon_configuration" TO "IAMR:kameleoon_role"
```

#### 3. Kameleoon 設定スキーマで DML 権限を付与する

`kameleoon_configuration` スキーマでデータを挿入、更新、削除する権限を Kameleoon ロールに付与します:

```sql theme={null}
GRANT INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA "kameleoon_configuration" TO "IAMR:kameleoon_role";
```

#### 4. 将来のテーブルに対するデフォルト権限を設定する

`kameleoon_configuration` スキーマに作成される将来のテーブルが、自動的に Kameleoon ロールに必要な権限を付与するようにします:

```sql theme={null}
ALTER DEFAULT PRIVILEGES IN SCHEMA "kameleoon_configuration" 
GRANT INSERT, UPDATE, DELETE ON TABLES TO "IAMR:kameleoon_role";
```

### Amazon Redshift をデスティネーションとして使用する場合

#### 1. Kameleoon イベントスキーマを作成する

Kameleoon イベント用の新しいスキーマを作成し、必要な権限を付与します:

```sql theme={null}
CREATE SCHEMA "kameleoon_events";

GRANT USAGE ON SCHEMA "kameleoon_events" TO "IAMR:kameleoon_role";
GRANT CREATE ON SCHEMA "kameleoon_events" TO "IAMR:kameleoon_role";
```

#### 2. Kameleoon イベントスキーマで DML 権限を付与する

`kameleoon_events` スキーマでデータを挿入、更新、削除する権限を Kameleoon ロールに付与します:

```sql theme={null}
GRANT INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA "kameleoon_events" TO "IAMR:kameleoon_role";
```

#### 3. 将来のテーブルに対するデフォルト権限を設定する

`kameleoon_events` スキーマに作成される将来のテーブルが、自動的に Kameleoon ロールに必要な権限を付与するようにします:

```sql theme={null}
ALTER DEFAULT PRIVILEGES IN SCHEMA "kameleoon_events" 
GRANT INSERT, UPDATE, DELETE ON TABLES TO "IAMR:kameleoon_role";
```

## ステップ 3: Kameleoon UI で統合を有効化および構成する

Kameleoon アカウントの **Integrations** ページに移動し、リストで Amazon Redshift を見つけます。

<Frame>
  ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/integrations/data-warehouses/amazon-redshift/setting-up-amazon-redshift/0.png)
</Frame>

**Install the tool** をクリックし、左側に表示されるリストからこのアクセスを構成したいプロジェクトを最初に選択した後、以下のフィールドに入力して、Kameleoon に Redshift クラスタへのアクセス認証情報を提供します。

<Frame>
  ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/integrations/data-warehouses/amazon-redshift/setting-up-amazon-redshift/1.png)
</Frame>

必須フィールドは以下のとおりです:

* **AWS Account ID:** Amazon Web Services アカウントの一意の数値識別子
* **AWS Role name:** 前のセクションの手順に従って Kameleoon 用に作成した AWS IAM ロールの名前
* **AWS Access key ID および Secret access key ID:** これら 2 つのフィールドは、AWS ロールの認証情報を作成する際に提供されます。この記事の[ステップ 1](#ステップ-1-aws-iam-ユーザーとロールを作成する) で説明されているように、AWS コマンドラインインターフェイスを使用してこのキーを作成した場合、これら 2 つの値はそのコマンドへの JSON レスポンスで提供されています。

**Confirm** をクリックします。プロジェクトに認証情報がアップロードされました。その下に、Kameleoon がウェアハウスへの接続に使用する IP アドレスを含む **ADVANCED SETUP** サムネイルがあります。多くの組織では、ウェアハウスへの接続が許可される IP アドレスをフィルタリングします。その場合は、以下の手順で AWS アカウントからこれらの IP を承認できます。

## ステップ 4: Redshift のセキュリティグループを構成する

Kameleoon が Redshift クラスタに接続できるようにするには、セキュリティグループで Kameleoon の IP アドレスからのクエリを承認します。これは AWS コンソールで行えます:

1. **セキュリティグループを特定する:** Redshift クラスタに関連付けられたセキュリティグループは Redshift ダッシュボードで確認でき、そこからこのセキュリティグループの構成ページにアクセスできます。Redshift Serverless を使用している場合は、ワークグループのセキュリティグループを探します。
2. **インバウンドルールを追加する**
   * **Inbound Rules** タブに移動します。
   * **Edit inbound rules** > **Add rule** をクリックします。
   * 以下のパラメータを設定します:
     * **Type:** Custom TCP rule
     * **Port range:** 5439 (デフォルトの Redshift ポート)
     * **Source:** Custom (Kameleoon UI の Redshift 統合セクションに表示される Kameleoon の IP アドレスを追加します)

## ステップ 5: ワークグループ VPC を外部接続に開放する

Redshift クラスタに関連付けられた VPC が外部接続を許可するように構成されていることを確認してください。簡単のために、VPC をパブリックにアクセス可能にして、セキュリティグループ設定にのみ依存することもできます。より安全なアプローチは、VPC サブネットのネットワークアクセス制御リストを細かく調整することです。これを行うには、AWS コンソールで以下のように VPC 設定を変更します:

1. **VPC 設定にアクセスする:** AWS マネジメントコンソールの VPC ダッシュボードに移動します。
2. **ネットワーク ACL を変更する:**
   * **Network ACLs** セクションに移動します。
   * VPC に関連付けられている ACL を特定します。
   * インバウンドおよびアウトバウンドルールを変更して、ポート 5439 で Kameleoon の IP アドレスからのトラフィックを許可します。
3. **ルートテーブルを更新する:** VPC に関連付けられたルートテーブルが、Redshift クラスタへのトラフィックを正しくルーティングするように構成されていることを確認します。
