AWS IAM Role による認証
クラウドネイティブな ID 委任(AWS IAM Role、Azure Managed Identity、Google Service Account federation など)により、TiDB Cloud Lake はアクセスキーを直接扱うことなく、オブジェクトストレージに対する短期間有効な認証情報を取得できます。これにより、データプレーンへのアクセスはクラウドプロバイダーのコントロールプレーン内で管理され、すべての権限の所有権は引き続きお客様が保持できます。
IAM ロールの利点
- 静的キーが不要: 一時的な認証情報により、ローテーションや漏えい対策が必要な長期間有効なシークレットを排除できます。
- 最小権限: きめ細かなポリシーにより、TiDB Cloud Lake がアクセスできるバケットや実行できる操作を、承認したもののみに制限できます。
- 一元的なガバナンス: 既存の IAM ワークフローを通じて、引き続きアクセスの監査や取り消しを行えます。
- 自動ローテーション: クラウドプロバイダーがトークンを更新するため、チーム変更があっても統合は継続して動作します。
仕組み
TiDB Cloud Lake サポートから組織向けの信頼されたプリンシパル情報が共有された後、クラウドアカウント内で IAM ロール/ID を作成し、必要なオブジェクトストレージ操作(たとえば一連のバケットの読み取り)を許可するポリシーをアタッチします。さらに、固有の外部 ID を使用して TiDB Cloud Lake のみがそのロールを引き受けられるように信頼ポリシーを設定します。その後、TiDB Cloud Lake は必要に応じてそのロールを引き受け、一時的な認証情報を使ってストレージにアクセスし、セッションの有効期限が切れると自動的にログアウトします。
IAM ロールを使用する
サポートチケットを起票し、TiDB Cloud Lake 組織用の IAM ロール ARN を取得します。
例:
arn:aws:iam::123456789012:role/xxxxxxx/tnabcdefg/xxxxxxx-tnabcdefgAWS Console に移動します。
https://us-east-2.console.aws.amazon.com/iam/home?region=us-east-2#/policies
Create policyをクリックし、Custom trust policyを選択して、S3 バケットアクセス用のポリシードキュメントを入力します。{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::test-bucket-123" }, { "Effect": "Allow", "Action": "s3:*Object", "Resource": "arn:aws:s3:::test-bucket-123/*" } ] }Nextをクリックし、ポリシー名lake-testを入力して、Create policyをクリックします。AWS Console に移動します。
https://us-east-2.console.aws.amazon.com/iam/home?region=us-east-2#/roles
Create roleをクリックし、Trusted entity typeでCustom trust policyを選択します。信頼ポリシードキュメントを入力します。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:role/xxxxxxx/tnabcdefg/xxxxxxx-tnabcdefg" }, "Condition": { "StringEquals": { "sts:ExternalId": "my-external-id-123" } }, "Action": "sts:AssumeRole" } ] }Nextをクリックし、先ほど作成したポリシーlake-testを選択します。Nextをクリックし、ロール名lake-testを入力します。View Roleをクリックし、ロール ARNarn:aws:iam::987654321987:role/lake-testを記録します。次の SQL 文を TiDB Cloud Lake cloud worksheet または
LakeSQLで実行します。CREATE CONNECTION lake_test STORAGE_TYPE = 's3' ROLE_ARN = 'arn:aws:iam::987654321987:role/lake-test' EXTERNAL_ID = 'my-external-id-123'; CREATE STAGE lake_test URL = 's3://test-bucket-123' CONNECTION = (CONNECTION_NAME = 'lake_test'); SELECT * FROM @lake_test/test.parquet LIMIT 1;
