TiDB Cloud DedicatedでAuroraのSnapShotをインポートする際に、Access Deniedと出る

Amazon Aurora

やりたかったこと「AuroraのSnapShotをTiDB Cloudのインポート画面から読み込んでTiDBにデータ作成する」

AuroraMySQLのデータをTiDBに移行するために、まず、以下の記事を参考にDumplingでAuroraのDDLをエクスポートし、それをTiDBにインポートしました。

Aurora MySQLのスナップショットを使用してTiDB Serverlessにデータを移行してみた | DevelopersIO

その後に、TiDB Cloud Dedicatedのダッシュボードのインポート機能でS3に配置したスナップショットからTiDB Cloudにデータを復元しようとしました。

なおTiDB Docの資料でTiDB Cloudにparquet fileをインポートする方法が記載されていたので、それを参考にインポートを実施しました。

Import Apache Parquet Files from Amazon S3 or GCS into TiDB Cloud Dedicated
Apache Parquet ファイルを Amazon S3 または GCS からTiDB Cloud Dedicated にインポートする方法を学びます。

この際に、S3に読み取りアクセス可能なポリシー(AmazonS3ReadOnlyAccess)をもったIAMユーザを同時に作成しており、そのIAMユーザのアクセスIDとシークレットアクセスキーをインポート画面に入力していました。

次のポリシーを持つIAMユーザーを作成します。

これらのポリシーは、ソース データを保存するバケットに対してのみ機能することをお勧めします。

Configure External Storage Access for TiDB Cloud Dedicated
Amazon Simple Storage Service (Amazon S3) アクセスと Google Cloud Storage (GCS) アクセスを構成する方法について説明します。

発生した課題 Access Denied

しかし、インポートを実行するとAccess Deniedが出て失敗しました。

ただTiDB Cloudのエラー画面には具体的なエラー理由が出なかったので、PingCapのサポートの方に問い合わせを行いました。

解決「S3の対象バケットに対するKMSキーを持ったインラインポリシーをIAMユーザにアタッチする」

そこでPingCapのサポートの方から「ログの方にKMSキーでのS3の復号ができない旨のエラーが出ています」ということと「IAMユーザのポリシーに、kms:Decryptを指定してください。Resourceには対応するS3オブジェクトのKMSキーを指定してください」ということを教えてもらいました。

{
        "Sid": "AllowKMSkey",
        "Effect": "Allow",
        "Action": [
            "kms:Decrypt"
        ],
        "Resource": "arn:aws:kms:ap-northeast-1:105880447796:key/c3046e91-fdfc-4f3a-acff-00597dd3801f"
}

そこで先程のIAMユーザのポリシーを編集して、先程のJSONを追加して、Resourceに対象のS3バケットの中にある適当なファイルから対応するKMSキーのarnをコピペしました。

地味に詰まったのですが、バケットのディレクトリを見てもKMSキーは表示されないのでご注意を、、

その後、インポートをリトライしたところ、先程のエラーは出なくなりました。

参考

また、これらのAccess Deniedに関するエラー対応については以下のトラブルシューティングに記載されていとも教えていただきました。

Troubleshoot Access Denied Errors during Data Import from Amazon S3
Amazon S3 からTiDB Cloudにデータをインポートするときにアクセス拒否エラーが発生する場合のトラブルシューティング方法を説明します。

ご参考までに

タイトルとURLをコピーしました