メインコンテンツまでスキップ
バージョン: 3.5 Stable

AWS リソースへの認証

PhoenixAI は、AWS リソースと統合するために、インスタンスプロファイルベースの認証、ロールベースの認証、IAM ユーザーベースの認証の 3 つの認証方法をサポートしています。このトピックでは、これらの認証方法を使用して AWS 資格情報を設定する方法について説明します。

認証方法​

インスタンスプロファイルベースの認証​

インスタンスプロファイルベースの認証方法では、AWS リソースに対して直接 PhoenixAI クラスターに権限を付与できます。理論的には、クラスターにログインできるクラスター ユーザーは、設定したアクセス ポリシーに従って AWS リソース上で許可されたアクションを実行できます。このユースケースの典型的なシナリオは、クラスター内の複数のクラスター ユーザー間で AWS リソース アクセス制御が不要な場合です。この認証方法は、同じクラスター内での分離が不要であることを意味します。

ただし、この認証方法は、クラスターにログインできる人がクラスター管理者によって制御されているため、クラスター レベルの安全なアクセス制御ソリューションと見なすことができます。

ロールベースの認証​

インスタンスプロファイルベースの認証とは異なり、ロールベースの認証方法では、AWS IAM ロールを引き受けて AWS リソースにアクセスすることをサポートしています。詳細については、ロールの引き受けを参照してください。

IAM ユーザーベースの認証​

IAM ユーザーベースの認証方法では、IAM ユーザー資格情報を使用して AWS リソースにアクセスすることをサポートしています。詳細については、IAM ユーザーを参照してください。

準備​

まず、PhoenixAI クラスターを正常に起動したことを確認してください。この手順を完了していない場合は、PhoenixAI クラスターの作成を参照してください。

次のステップでは、以下に示すように Data credential に移動して、クラスターのデータ資格情報で参照される IAM ロールの Instance profile ARN を取得し、取得したインスタンスプロファイル ARN に基づいてデータ資格情報ロールの名前を推測します。以下の例では、インスタンスプロファイル ARN は arn:aws:iam::081976408565:instance-profile/byoc_common であり、データ資格情報ロールの名前が byoc_common であることを推測できます。

Data credential - Instance profile ARN

次に、データ資格情報ロールの ARN を取得します。この例では、次の手順を実行します。

  1. IAM コンソール にログインします。

  2. Roles ページに移動し、検索ボックスに byoc_common と入力してデータ資格情報ロールを検索します。次に、見つけたデータ資格情報ロールをクリックします。

  3. ロールの詳細ページで、データ資格情報ロールの ARN (例: arn:aws:iam::081976408565:role/byoc-common) をコピーし、後でアクセスできる場所に保存します。

インスタンスプロファイルベースの認証にはデータ資格情報ロールが必要であり、ロールベースの認証にはデータ資格情報ロールとその ARN が必要です。

3 番目のステップでは、アクセスしたい AWS リソースの種類と PhoenixAI 内の特定の操作シナリオに基づいて IAM ポリシーを作成します。AWS IAM のポリシーは、特定の AWS リソースに対する一連の権限を宣言します。ポリシーを作成した後、IAM ロールまたはユーザーにアタッチする必要があります。このようにして、IAM ロールまたはユーザーは、ポリシーで宣言された権限を割り当てられ、指定された AWS リソースにアクセスできます。

注意

2 番目と 3 番目のステップでこれらの準備を行うには、AWS IAM コンソール にサインインして IAM ユーザーとロールを編集する権限が必要です。

特定の AWS リソースにアクセスするために必要な IAM ポリシーについては、次のセクションを参照してください。

インスタンスプロファイルベースの認証の準備​

必要な AWS リソースにアクセスするための IAM ポリシー を PhoenixAI クラスターのデータ資格情報ロール (例: byoc-common) にアタッチします。

ロールベースの認証の準備​

IAM ロールの作成とポリシーのアタッチ​

アクセスしたい AWS リソースに応じて、1 つ以上の IAM ロールを作成します。詳細は IAM ロールの作成 を参照してください。次に、必要な AWS リソースにアクセスするための IAM ポリシー を作成した IAM ロールにアタッチします。

例えば、PhoenixAI クラスターが AWS S3 と AWS Glue にアクセスすることを望む場合、この状況では、1 つの IAM ロール (例: s3_assumed_role) を作成し、AWS S3 にアクセスするためのポリシーと AWS Glue にアクセスするためのポリシーの両方をそのロールにアタッチすることができます。あるいは、2 つの異なる IAM ロール (例: s3_assumed_role と glue_assumed_role) を作成し、これらのポリシーをそれぞれのロールにアタッチすることもできます (つまり、AWS S3 にアクセスするためのポリシーを s3_assumed_role にアタッチし、AWS Glue にアクセスするためのポリシーを glue_assumed_role にアタッチします)。

作成した IAM ロールは、指定された AWS リソースにアクセスするために PhoenixAI クラスターのデータ資格情報ロール (例: byoc-common) によって引き受けられます。

このセクションでは、1 つの引き受けロール s3_assumed_role を作成し、AWS S3 にアクセスするためのポリシーと AWS Glue にアクセスするためのポリシーの両方をそのロールに追加したと仮定しています。

信頼関係の設定​

引き受けロールを次のように設定します。

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

  2. 左側のナビゲーションペインで、Access management > Roles を選択します。

  3. 引き受けロール (s3_assumed_role) を見つけて、その名前をクリックします。

  4. ロールの詳細ページで、Trust relationships タブをクリックし、Trust relationships タブで Edit trust policy をクリックします。

  5. Edit trust policy ページで、既存の JSON ポリシー ドキュメントを削除し、次の IAM ポリシーを貼り付けます。このとき、上記で取得したデータ資格情報ロールの ARN (例: arn:aws:iam::081976408565:role/byoc-common) に <data_credential_role_ARN> を置き換える必要があります。次に、Update policy をクリックします。

    {
    "Version": "2012-10-17",
    "Statement": [
    {
    "Effect": "Allow",
    "Principal": {
    "AWS": "<data_credential_role_ARN>"
    },
    "Action": "sts:AssumeRole"
    }
    ]
    }

    異なる AWS リソースにアクセスするために異なる引き受けロールを作成した場合は、他の引き受けロールを設定するために前述の手順を繰り返す必要があります。例えば、AWS S3 と AWS Glue にアクセスするために s3_assumed_role と glue_assumed_role を作成した場合、この状況では、glue_assumed_role を設定するために前述の手順を繰り返す必要があります。

データ資格情報ロールを次のように設定します。

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

  2. 左側のナビゲーションペインで、Access management > Roles を選択します。

  3. データ資格情報ロール (byoc-common) を見つけて、その名前をクリックします。

  4. 表示されるページの Permissions policies セクションで、Add permissions をクリックし、Create inline policy を選択します。

  5. Specify permissions ステップで、JSON タブをクリックし、既存の JSON ポリシー ドキュメントを削除し、次の IAM ポリシーを貼り付けます。このとき、引き受けロール s3_assumed_role の ARN に <s3_assumed_role_ARN> を置き換える必要があります。次に、Review policy をクリックします。

    {
    "Version": "2012-10-17",
    "Statement": [
    {
    "Effect": "Allow",
    "Action": ["sts:AssumeRole"],
    "Resource": ["<s3_assumed_role_ARN>"]
    }
    ]
    }

    異なる AWS リソースにアクセスするために異なる引き受けロールを作成した場合は、前述の IAM ポリシーの Resource 要素にこれらの引き受けロールの ARN をすべて記入し、カンマ (,) で区切る必要があります。例えば、AWS S3 と AWS Glue にアクセスするために s3_assumed_role と glue_assumed_role を作成した場合、この状況では、Resource 要素を次の形式で記入する必要があります: "<s3_assumed_role_ARN>","<glue_assumed_role_ARN>"。

  6. Review Policy ステップで、ポリシー名を入力し、Create policy をクリックします。

IAM ユーザーベースの認証の準備​

IAM ユーザーを作成します。詳細は AWS アカウントでの IAM ユーザーの作成 を参照してください。

次に、必要な AWS リソースにアクセスするための IAM ポリシー を作成した IAM ユーザーにアタッチします。

認証方法の比較​

次の図は、PhoenixAI におけるインスタンスプロファイルベースの認証とロールベースの認証のメカニズムの違いを高レベルで説明しています。

Comparison between credentials

SQL コマンドでの AWS 資格情報の設定​

AWS S3 へのアクセスのための認証パラメータ​

PhoenixAI が AWS S3 と統合する必要があるさまざまなシナリオ、たとえば、external catalog や file external table を作成する場合、または AWS S3 からデータを取り込む、バックアップする、またはリストアする場合に、AWS S3 へのアクセスのための認証パラメータを次のように設定します。

  • インスタンスプロファイルベースの認証の場合、aws.s3.use_instance_profile を true に設定します。
  • ロールベースの認証の場合、aws.s3.use_instance_profile を true に設定し、aws.s3.iam_role_arn を AWS S3 にアクセスできる引き受けロール (たとえば、上記で作成した s3_assumed_role) の ARN として設定します。
  • IAM ユーザーベースの認証の場合、aws.s3.use_instance_profile を false に設定し、aws.s3.access_key と aws.s3.secret_key を AWS IAM ユーザーのアクセスキーとシークレットキーとして設定します。

次の表は、パラメータを説明しています。

パラメータ必須説明
aws.s3.use_instance_profileはいインスタンスプロファイルベースの認証方法とロールベースの認証方法を有効にするかどうかを指定します。有効な値: true および false。デフォルト値: false。
aws.s3.iam_role_arnいいえAWS S3 バケットに対する権限を持つ IAM ロールの ARN。ロールベースの認証方法を使用して AWS S3 にアクセスする場合、このパラメータを指定する必要があります。
aws.s3.access_keyいいえIAM ユーザーのアクセスキー。IAM ユーザーベースの認証方法を使用して AWS S3 にアクセスする場合、このパラメータを指定する必要があります。
aws.s3.secret_keyいいえIAM ユーザーのシークレットキー。IAM ユーザーベースの認証方法を使用して AWS S3 にアクセスする場合、このパラメータを指定する必要があります。

AWS Glue へのアクセスのための認証パラメータ​

PhoenixAI が AWS Glue と統合する必要があるさまざまなシナリオ、たとえば、external catalog を作成する場合に、AWS Glue へのアクセスのための認証パラメータを次のように設定します。

  • インスタンスプロファイルベースの認証の場合、aws.glue.use_instance_profile を true に設定します。
  • ロールベースの認証の場合、aws.glue.use_instance_profile を true に設定し、aws.glue.iam_role_arn を AWS Glue にアクセスできる引き受けロール (たとえば、上記で作成した glue_assumed_role) の ARN として設定します。
  • IAM ユーザーベースの認証の場合、aws.glue.use_instance_profile を false に設定し、aws.glue.access_key と aws.glue.secret_key を AWS IAM ユーザーのアクセスキーとシークレットキーとして設定します。

次の表は、パラメータを説明しています。

パラメータ必須説明
aws.glue.use_instance_profileはいインスタンスプロファイルベースの認証方法とロールベースの認証を有効にするかどうかを指定します。有効な値: true および false。デフォルト値: false。
aws.glue.iam_role_arnいいえAWS Glue Data Catalog に対する権限を持つ IAM ロールの ARN。ロールベースの認証方法を使用して AWS Glue にアクセスする場合、このパラメータを指定する必要があります。
aws.glue.access_keyいいえAWS IAM ユーザーのアクセスキー。IAM ユーザーベースの認証方法を使用して AWS Glue にアクセスする場合、このパラメータを指定する必要があります。
aws.glue.secret_keyいいえAWS IAM ユーザーのシークレットキー。IAM ユーザーベースの認証方法を使用して AWS Glue にアクセスする場合、このパラメータを指定する必要があります。

統合例​

external catalog​

PhoenixAI クラスターで external catalog を作成することは、ターゲットデータレイクシステムとの統合を構築することを意味し、これは次の 2 つの主要コンポーネントで構成されます。

  • ファイルストレージ 例: AWS S3 はテーブルファイルを保存します

  • メタストア 例: Hive metastore または AWS Glue はテーブルファイルのメタデータと場所を保存します

    注意

    Hive metastore を選択する場合、external catalog を作成する前に PhoenixAI クラスターが Hive metastore のホストにアクセスできることを確認してください。通常のケースでは、次のいずれかのアクションを実行して、PhoenixAI クラスターと Hive metastore の統合を有効にできます。

    • PhoenixAI クラスターと Hive metastore を同じ VPC にデプロイします。
    • PhoenixAI クラスターの VPC と Hive metastore の VPC の間に VPC ピアリング接続を設定します。

    次に、Hive metastore のセキュリティグループの設定を確認して、そのインバウンドルールが PhoenixAI クラスターのセキュリティグループからのインバウンドトラフィックを許可し、そのポート範囲がデフォルトポート 9083 をカバーしていることを確認します。

PhoenixAI は次のタイプの catalog をサポートしています。

次の例では、使用するメタストアのタイプに応じて、hive_catalog_hms または hive_catalog_glue という名前の Hive catalog を作成し、Hive クラスターからデータをクエリします。詳細な構文とパラメータについては、Hive catalog を参照してください。

インスタンスプロファイルベースの認証​

  • Amazon EMR Hive クラスターで Hive metastore を使用する場合、次のようなコマンドを実行します。

    CREATE EXTERNAL CATALOG hive_catalog_hms
    PROPERTIES
    (
    "type" = "hive",
    "aws.s3.use_instance_profile" = "true",
    "aws.s3.region" = "us-west-2",
    "hive.metastore.uris" = "thrift://xx.xx.xx.xx:9083"
    );
  • Amazon EMR Hive クラスターで AWS Glue を使用する場合、次のようなコマンドを実行します。

    CREATE EXTERNAL CATALOG hive_catalog_glue
    PROPERTIES
    (
    "type" = "hive",
    "aws.s3.use_instance_profile" = "true",
    "aws.s3.region" = "us-west-2",
    "hive.metastore.type" = "glue",
    "aws.glue.use_instance_profile" = "true",
    "aws.glue.region" = "us-west-2"
    );

ロールベースの認証​

  • Amazon EMR Hive クラスターで Hive metastore を使用する場合、次のようなコマンドを実行します。

    CREATE EXTERNAL CATALOG hive_catalog_hms
    PROPERTIES
    (
    "type" = "hive",
    "aws.s3.use_instance_profile" = "true",
    "aws.s3.iam_role_arn" = "arn:aws:iam::081976408565:role/s3_assumed_role",
    "aws.s3.region" = "us-west-2",
    "hive.metastore.uris" = "thrift://xx.xx.xx.xx:9083"
    );
  • Amazon EMR Hive クラスターで AWS Glue を使用する場合、次のようなコマンドを実行します。

    CREATE EXTERNAL CATALOG hive_catalog_glue
    PROPERTIES
    (
    "type" = "hive",
    "aws.s3.use_instance_profile" = "true",
    "aws.s3.iam_role_arn" = "arn:aws:iam::081976408565:role/s3_assumed_role",
    "aws.s3.region" = "us-west-2",
    "hive.metastore.type" = "glue",
    "aws.glue.use_instance_profile" = "true",
    "aws.glue.iam_role_arn" = "arn:aws:iam::081976408565:role/glue_assumed_role",
    "aws.glue.region" = "us-west-2"
    );

IAM ユーザーベースの認証​

  • Hive クラスターで Hive metastore を使用する場合、次のようなコマンドを実行します。

    CREATE EXTERNAL CATALOG hive_catalog_hms
    PROPERTIES
    (
    "type" = "hive",
    "aws.s3.use_instance_profile" = "false",
    "aws.s3.access_key" = "<iam_user_access_key>",
    "aws.s3.secret_key" = "<iam_user_access_key>",
    "aws.s3.region" = "us-west-2",
    "hive.metastore.uris" = "thrift://xx.xx.xx.xx:9083"
    );
  • Amazon EMR Hive クラスターで AWS Glue を使用する場合、次のようなコマンドを実行します。

    CREATE EXTERNAL CATALOG hive_catalog_glue
    PROPERTIES
    (
    "type" = "hive",
    "aws.s3.use_instance_profile" = "false",
    "aws.s3.access_key" = "<iam_user_access_key>",
    "aws.s3.secret_key" = "<iam_user_secret_key>",
    "aws.s3.region" = "us-west-2",
    "hive.metastore.type" = "glue",
    "aws.glue.use_instance_profile" = "false",
    "aws.glue.access_key" = "<iam_user_access_key>",
    "aws.glue.secret_key" = "<iam_user_secret_key>",
    "aws.glue.region" = "us-west-2"
    );

ファイル外部テーブル​

ファイル外部テーブルは、default_catalog という名前の internal catalog に作成する必要があります。

次の例では、test_s3_db という既存のデータベースに file_table という名前のファイル外部テーブルを作成します。詳細な構文とパラメータについては、File external table を参照してください。

インスタンスプロファイルベースの認証​

次のようなコマンドを実行します。

CREATE EXTERNAL TABLE test_s3_db.file_table
(
id varchar(65500),
attributes map<varchar(100), varchar(2000)>
)
ENGINE=FILE
PROPERTIES
(
"path" = "s3://celerdata-test/",
"format" = "ORC",
"aws.s3.use_instance_profile" = "true",
"aws.s3.region" = "us-west-2"
);

ロールベースの認証​

次のようなコマンドを実行します。

CREATE EXTERNAL TABLE test_s3_db.file_table
(
id varchar(65500),
attributes map<varchar(100), varchar(2000)>
)
ENGINE=FILE
PROPERTIES
(
"path" = "s3://celerdata-test/",
"format" = "ORC",
"aws.s3.use_instance_profile" = "true",
"aws.s3.iam_role_arn" = "arn:aws:iam::081976408565:role/s3_assumed_role",
"aws.s3.region" = "us-west-2"
);

IAM ユーザーベースの認証​

次のようなコマンドを実行します。

CREATE EXTERNAL TABLE test_s3_db.file_table
(
id varchar(65500),
attributes map<varchar(100), varchar(2000)>
)
ENGINE=FILE
PROPERTIES
(
"path" = "s3://starrocks-test/",
"format" = "ORC",
"aws.s3.use_instance_profile" = "false",
"aws.s3.access_key" = "<iam_user_access_key>",
"aws.s3.secret_key" = "<iam_user_secret_key>",
"aws.s3.region" = "us-west-2"
);

データの取り込み​

LOAD LABEL を使用して AWS S3 からデータをロードできます。

次の例では、s3a://test-bucket/test_brokerload_ingestion パスに保存されているすべての Parquet データファイルから、既存のデータベース test_s3_db の test_ingestion_2 テーブルにデータをロードします。詳細な構文とパラメータについては、BROKER LOAD を参照してください。

インスタンスプロファイルベースの認証​

次のようなコマンドを実行します。

LOAD LABEL test_s3_db.test_credential_instanceprofile_7
(
DATA INFILE("s3a://test-bucket/test_brokerload_ingestion/*")
INTO TABLE test_ingestion_2
FORMAT AS "parquet"
)
WITH BROKER
(
"aws.s3.use_instance_profile" = "true",
"aws.s3.region" = "us-west-1"
)
PROPERTIES
(
"timeout" = "1200"
);

ロールベースの認証​

次のようなコマンドを実行します。

LOAD LABEL test_s3_db.test_credential_instanceprofile_7
(
DATA INFILE("s3a://test-bucket/test_brokerload_ingestion/*")
INTO TABLE test_ingestion_2
FORMAT AS "parquet"
)
WITH BROKER
(
"aws.s3.use_instance_profile" = "true",
"aws.s3.iam_role_arn" = "arn:aws:iam::081976408565:role/s3_assumed_role",
"aws.s3.region" = "us-west-1"
)
PROPERTIES
(
"timeout"="1200"
);

IAM ユーザーベースの認証​

次のようなコマンドを実行します。

LOAD LABEL test_s3_db.test_credential_instanceprofile_7
(
DATA INFILE("s3a://test-bucket/test_brokerload_ingestion/*")
INTO TABLE test_ingestion_2
FORMAT AS "parquet"
)
WITH BROKER
(
"aws.s3.use_instance_profile" = "false",
"aws.s3.access_key" = "<iam_user_access_key>",
"aws.s3.secret_key" = "<iam_user_secret_key>",
"aws.s3.region" = "us-west-1"
)
PROPERTIES
(
"timeout" = "1200"
);