メインコンテンツまでスキップ

Authenticate to AWS resources

AWSリソースへの認証

StarRocksでは、AWSリソースとの統合に3つの認証方法を使用することができます。それぞれ、インスタンスプロファイルベースの認証、アサムドロールベースの認証、IAMユーザーベースの認証です。このトピックでは、これらの認証方法を使用してAWSの認証情報を設定する方法について説明します。

認証方法

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

インスタンスプロファイルベースの認証方法では、StarRocksクラスタはクラスタが実行されているEC2インスタンスのインスタンスプロファイルで指定された権限を継承します。理論的には、クラスタにログインできるクラスタユーザーは、AWS IAMポリシーで構成した許可アクションを実行することができます。このユースケースでは、クラスタ内の複数のクラスタユーザー間でAWSリソースへのアクセス制御は必要ありません。同じクラスタ内で隔離が必要ないため、この認証方法はクラスタレベルでの安全なアクセス制御ソリューションと見なすことができます。

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

アサムドロールベースの認証

インスタンスプロファイルベースの認証とは異なり、アサムドロールベースの認証方法はAWS IAMロールを仮定して、AWSリソースへのアクセス権を取得することをサポートしています。詳細については、Assuming a roleを参照してください。

IAMユーザーベースの認証

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

準備

まず、StarRocksクラスタが実行されているEC2インスタンスに関連付けられたIAMロール(以下、EC2インスタンスロールと呼びます)を見つけ、そのロールのARNを取得します。インスタンスプロファイルベースの認証およびアサムドロールベースの認証には、EC2インスタンスロールとそのARNの両方が必要です。

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

注意

これらの準備を行うには、AWS IAMコンソールにサインインし、IAMユーザーやロールを編集するための権限が必要です。

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

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

アクセスする必要のあるAWSリソースに対してIAMポリシーをEC2インスタンスロールにアタッチします。

アサムドロールベースの認証の準備

IAMロールの作成およびポリシーのアタッチ

アクセスしたいAWSリソースに応じて、1つ以上のIAMロールを作成します。Creating IAM rolesを参照してください。その後、アクセスしたいAWSリソースに対するIAMポリシーをIAMロールにアタッチします。これにより、IAMロールまたはユーザーは、ポリシーで宣言された権限を使用して指定されたAWSリソースにアクセスするための権限を付与されます。

例えば、StarRocksクラスタがAWS S3とAWS Glueにアクセスできるようにする場合、次のいくつかのIAMロール(例:s3_assumed_role)を作成し、それらのIAMロールにアクセスするためのIAMポリシーをアタッチします。また、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ロールは、StarRocksクラスタのEC2インスタンスロールによってアサムドされ、指定されたAWSリソースにアクセスするために使用されます。

このセクションでは、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ポリシーを貼り付けます。ただし、<cluster_EC2_iam_role_ARN>は、上記で取得したEC2インスタンスロールのARNに置き換える必要があります。その後、Update policyをクリックします。
    {
    "Version": "2012-10-17",
    "Statement": [
    {
    "Effect": "Allow",
    "Principal": {
    "AWS": "<cluster_EC2_iam_role_ARN>"
    },
    "Action": "sts:AssumeRole"
    }
    ]
    }

異なるAWSリソースにアクセスするために異なるアサムドロールを作成した場合は、前述の手順を繰り返して他のアサムドロールを設定する必要があります。例えば、AWS S3とAWS Glueにアクセスするためにs3_assumed_roleglue_assumed_roleの2つのアサムドロールを作成した場合は、前述の手順を繰り返してglue_assumed_roleを設定する必要があります。

EC2インスタンスロールを以下のように設定します:

  1. AWS IAMコンソールにサインインします。
  2. 左側のナビゲーションパネルで、Access management > Rolesを選択します。
  3. EC2インスタンスロールを見つけ、その名前をクリックします。
  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_roleglue_assumed_roleの2つのアサムドロールを作成した場合、以下の形式を使用してResource要素にs3_assumed_roleのARNとglue_assumed_roleのARNを入力する必要があります:"<s3_assumed_role_ARN>","<glue_assumed_role_ARN>"
  6. Review Policyのステップで、ポリシー名を入力し、Create policyをクリックします。

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

IAMユーザーを作成します。Creating an IAM user in your AWS accountを参照してください。

その後、アクセスしたいAWSリソースに対するIAMポリシーを作成したIAMユーザーにアタッチします。

認証方法の比較

以下の図は、StarRocksにおけるインスタンスプロファイルベースの認証、アサムドロールベースの認証、IAMユーザーベースの認証の機構の違いを高レベルで説明しています。

認証方法の比較

AWSリソースとの接続の構築

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

StarRocksがAWS S3と統合する必要があるさまざまなシナリオでは、外部カタログや外部テーブルの作成、データの取り込み、バックアップ、リストアなどの操作を行う際に、AWS S3へのアクセス用の認証パラメータを次のように設定します:

  • インスタンスプロファイルベースの認証の場合、aws.s3.use_instance_profiletrueに設定します。
  • アサムドロールベースの認証の場合、aws.s3.use_instance_profiletrueに設定し、aws.s3.iam_role_arnをAWS S3にアクセスするために使用するアサムドロールのARN(上記で作成したs3_assumed_roleのARNなど)を設定します。
  • IAMユーザーベースの認証の場合、aws.s3.use_instance_profilefalseに設定し、aws.s3.access_keyaws.s3.secret_keyをAWS IAMユーザーのアクセスキーとシークレットキーとして設定します。

以下の表には、各パラメータの説明が記載されています。

パラメータ

必須

説明

aws.s3.use_instance_profile

Yes

インスタンスプロファイルベースの認証方法およびアサムドロールベースの認証方法を有効にするかどうかを指定します。有効な値は「true」と「false」です。デフォルト値は「false」です。

aws.s3.iam_role_arn

No

AWS S3バケットに対する権限を持つIAMロールのARNです。AWS S3へのアクセスにアサムドロールベースの認証方法を使用する場合、このパラメータを指定する必要があります。

aws.s3.access_key

No

AWS IAMユーザーのアクセスキーです。AWS S3へのアクセスにIAMユーザーベースの認証方法を使用する場合、このパラメータを指定する必要があります。

aws.s3.secret_key

No

AWS IAMユーザーのシークレットキーです。AWS S3へのアクセスにIAMユーザーベースの認証方法を使用する場合、このパラメータを指定する必要があります。

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

StarRocksがAWS Glueと統合する必要があるさまざまなシナリオでは、外部カタログの作成時にAWS Glueへのアクセス用の認証パラメータを次のように設定します:

  • インスタンスプロファイルベースの認証の場合、aws.glue.use_instance_profiletrueに設定します。
  • アサムドロールベースの認証の場合、aws.glue.use_instance_profiletrueに設定し、aws.glue.iam_role_arnをAWS Glueにアクセスするために使用するアサムドロールのARN(上記で作成したglue_assumed_roleのARNなど)を設定します。
  • IAMユーザーベースの認証の場合、aws.glue.use_instance_profilefalseに設定し、aws.glue.access_keyaws.glue.secret_keyをAWS IAMユーザーのアクセスキーとシークレットキーとして設定します。

以下の表には、各パラメータの説明が記載されています。

パラメータ

必須

説明

aws.glue.use_instance_profile

Yes

インスタンスプロファイルベースの認証方法およびアサムドロールベースの認証方法を有効にするかどうかを指定します。有効な値は「true」と「false」です。デフォルト値は「false」です。

aws.glue.iam_role_arn

No

AWS Glueデータカタログに対する権限を持つIAMロールのARNです。AWS Glueへのアクセスにアサムドロールベースの認証方法を使用する場合、このパラメータを指定する必要があります。

aws.glue.access_key

No

AWS IAMユーザーのアクセスキーです。AWS GlueへのアクセスにIAMユーザーベースの認証方法を使用する場合、このパラメータを指定する必要があります。

aws.glue.secret_key

No

AWS IAMユーザーのシークレットキーです。AWS GlueへのアクセスにIAMユーザーベースの認証方法を使用する場合、このパラメータを指定する必要があります。

統合の例

外部カタログ

StarRocksクラスタに外部カタログを作成することは、ターゲットのデータレイクシステムとの統合を意味します。これには、以下の2つの主要なコンポーネントが含まれます:

  • テーブルファイルを保存するためのAWS S3のようなファイルストレージ
  • テーブルファイルのメタデータと場所を保存するためのHiveメタストアまたはAWS Glueのようなメタストア

StarRocksでは、次のタイプのカタログをサポートしています:

次の例では、Hiveメタストアを使用する場合はhive_catalog_hmsという名前のHiveカタログ、AWS Glueを使用する場合はhive_catalog_glueという名前のHiveカタログを作成し、Hiveクラスタからデータをクエリする方法を示します。詳細な構文とパラメータについては、Hiveカタログを参照してください。

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

  • HiveクラスタでHiveメタストアを使用する場合、次のコマンドを実行します:

    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: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"
    );

アサムドロールベースの認証

  • HiveクラスタでHiveメタストアを使用する場合、次のコマンドを実行します:

    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: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メタストアを使用する場合、次のコマンドを実行します:

    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: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という名前の内部カタログに作成する必要があります。

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

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

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

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" = "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://starrocks-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"
);

データの取り込み

AWS S3からデータを読み込むには、LOAD LABELを使用することができます。

次の例では、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"
);