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

AWS リソースへの認証

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

認証方法

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

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

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

ロールベースの認証

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

IAM ユーザーベースの認証

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

準備

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

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

注意

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

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

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

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

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

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

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

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

作成した IAM ロールは、指定された AWS リソースにアクセスするために CelerData クラスターのデータ資格情報ロール (例: 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_roleglue_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_roleglue_assumed_role を作成した場合、この状況では、Resource 要素を次の形式で記入する必要があります: "<s3_assumed_role_ARN>","<glue_assumed_role_ARN>"

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

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

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

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

認証方法の比較

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

Comparison between credentials

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

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

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

  • インスタンスプロファイルベースの認証の場合、aws.s3.use_instance_profiletrue に設定します。
  • ロールベースの認証の場合、aws.s3.use_instance_profiletrue に設定し、aws.s3.iam_role_arn を AWS S3 にアクセスできる引き受けロール (たとえば、上記で作成した s3_assumed_role) の ARN として設定します。
  • IAM ユーザーベースの認証の場合、aws.s3.use_instance_profilefalse に設定し、aws.s3.access_keyaws.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 へのアクセスのための認証パラメータ

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

  • インスタンスプロファイルベースの認証の場合、aws.glue.use_instance_profiletrue に設定します。
  • ロールベースの認証の場合、aws.glue.use_instance_profiletrue に設定し、aws.glue.iam_role_arn を AWS Glue にアクセスできる引き受けロール (たとえば、上記で作成した glue_assumed_role) の ARN として設定します。
  • IAM ユーザーベースの認証の場合、aws.glue.use_instance_profilefalse に設定し、aws.glue.access_keyaws.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

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

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

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

    注意

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

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

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

CelerData は次のタイプの 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_dbtest_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"
);