AWSの権限を設定する際、参照権限だけを与えたい場合は管理ポリシーのReadOnlyAccessを使用すると簡単に権限の付与ができます。
しかし、上記の権限を付与してGlueコンソールにアクセスしたところ、 一部表示できない画面があったので確認してみます。
IAMグループとポリシーを作成するのに使用したCloudFormationは以下にアップしています。
github.com
実施作業
準備
ReadOnlyAccessポリシーがアタッチされたIAMグループを作成します。
そのグループにアクセス用のIAMユーザを追加し、別ブラウザからログインします。
アクセス確認
Glueコンソールの項目をベースにエラーが出るもの、出ないものを確認します。
大項目 | 項目名 | エラー有無 |
データカタログ | データベース | なし |
テーブル | なし | |
接続 | あり | |
---|---|---|
クローラ | あり | |
分類子 | なし | |
スキーマレジストリ | あり | |
スキーマ | あり | |
設定 | なし | |
ETL | AWS Glue Studio | Glueでも異なるサービスのため対象外 |
ワークフロー | なし | |
ジョブ | なし | |
ML変換 | なし | |
トリガー | なし | |
開発エンドポイント | なし | |
ノートブック | なし |
エラー内容
どのようなエラーが出たか見ていきます。
接続
エラーメッセージを見ると「glue:GetConnections」の権限が足りてないようです。
クローラ
エラーメッセージを見ると「glue:ListCrawlers」と「glue:BatchGetCrawlers」が足りていないようです。
スキーマ
「glue:ListSchemas」の権限が足りないことでエラーが出てました。
ReadOnlyAccessポリシーの権限確認
次にReadOnlyAccessポリシーのGlue関連権限を確認していきます。
付与されている権限は以下の通りです。
アクション | 説明 |
glue:BatchGetDevEndpoints | 1 つ以上の開発エンドポイントを取得するアクセス許可を付与します。 |
glue:BatchGetJobs | 1 つ以上のジョブを取得するアクセス許可を付与します。 |
glue:BatchGetPartition | 1 つ以上のパーティションを取得するアクセス許可を付与します。 |
glue:BatchGetTriggers | 1 つ以上のトリガーを取得するアクセス許可を付与します。 |
glue:BatchGetWorkflows | 1 つ以上のワークフローを取得するアクセス許可を付与します。 |
glue:GetCatalogImportStatus | カタログのインポートステータスを取得するアクセス許可を付与します。 |
glue:GetClassifier | 分類子を取得するアクセス許可を付与します。 |
glue:GetClassifiers | すべての分類子を一覧表示するアクセス許可を付与します。 |
glue:GetCrawler | クローラを取得するアクセス許可を付与します。 |
glue:GetCrawlers | すべてのクローラを取得するアクセス許可を付与します。 |
glue:GetCrawlerMetrics | クローラに関するメトリクスを取得するアクセス許可を付与します。 |
glue:GetDatabase | データベースを取得するアクセス許可を付与します。 |
glue:GetDatabases | すべてのデータベースを取得するアクセス許可を付与します。 |
glue:GetDataCatalogEncryptionSettings | カタログ暗号化設定を取得するアクセス許可を付与します。 |
glue:GetDataflowGraph | スクリプトを Directed Acyclic Graph (DAG) に変換するアクセス許可を付与します。 |
glue:GetDevEndpoint | 開発エンドポイントを取得するアクセス許可を付与します。 |
glue:GetDevEndpoints | すべての開発エンドポイントを取得するアクセス許可を付与します。 |
glue:GetJob | ジョブを取得するアクセス許可を付与します。 |
glue:GetJobBookmark | ジョブのブックマークを取得するアクセス許可を付与します。 |
glue:GetJobs | 現在のすべてのジョブを取得するアクセス許可を付与します。 |
glue:GetJobRun | ジョブ実行を取得するアクセス許可を付与します。 |
glue:GetJobRuns | すべてのジョブ実行を取得するアクセス許可を付与します。 |
glue:GetMapping | マッピングを作成するアクセス許可を付与します。 |
glue:GetMLTaskRun | ML タスクの実行を取得するアクセス許可を付与します。 |
glue:GetMLTaskRuns | すべての ML タスクの実行を取得するアクセス許可を付与します。 |
glue:GetMLTransform | ML 変換を取得するアクセス許可を付与します。 |
glue:GetMLTransforms | すべての ML 変換を取得するアクセス許可を付与します。 |
glue:GetPartition | パーティションを取得するアクセス許可を付与します。 |
glue:GetPartitions | テーブルのパーティションを取得するアクセス許可を付与します。 |
glue:GetPlan | スクリプトのマッピングを取得するアクセス許可を付与します。 |
glue:GetResourcePolicy | リソースポリシーを取得するアクセス許可を付与します。 |
glue:GetSecurityConfiguration | セキュリティ設定を取得するアクセス許可を付与します。 |
glue:GetSecurityConfigurations | 1 つ以上のセキュリティ設定を取得するアクセス許可を付与します。 |
glue:GetTable | テーブルを取得するアクセス許可を付与します。 |
glue:GetTables | データベース内のテーブルを取得するアクセス許可を付与します。 |
glue:GetTableVersion | テーブルのバージョンを取得するアクセス許可を付与します。 |
glue:GetTableVersions | テーブルのバージョンのリストを取得するアクセス許可を付与します。 |
glue:GetTags | リソースに関連付けられているすべてのタグを取得するアクセス許可を付与します。 |
glue:GetTrigger | トリガーを取得するアクセス許可を付与します。 |
glue:GetTriggers | ジョブに関連付けられているトリガーを取得するアクセス許可を付与します。 |
glue:GetUserDefinedFunction | 関数定義を取得するアクセス許可を付与します。 |
glue:GetUserDefinedFunctions | 複数の関数定義を取得するアクセス許可を付与します。 |
glue:GetWorkflow | ワークフローを取得するアクセス許可を付与します。 |
glue:GetWorkflowRun | ワークフロー実行を取得するアクセス許可を付与します。 |
glue:GetWorkflowRunProperties | ワークフロー実行プロパティを取得するアクセス許可を付与します。 |
glue:GetWorkflowRuns | すべてのワークフロー実行を取得するアクセス許可を付与します。 |
glue:ListCrawlers | すべてのクローラを取得するアクセス許可を付与します。 |
glue:ListDevEndpoints | すべての開発エンドポイントを取得するアクセス許可を付与します。 |
glue:ListJobs | 現在のすべてのジョブを取得するアクセス許可を付与します。 |
glue:ListMLTransforms | すべての ML 変換を取得するアクセス許可を付与します。 |
glue:ListTriggers | すべてのトリガーを取得するアクセス許可を付与します。 |
glue:ListWorkflows | すべてのワークフローを取得するアクセス許可を付与します。 |
見る限りだと、「glue:Batch*」「glue:Get*」「glue:List*」の権限が付与されているようです。
追加が必要な権限
エラーメッセージに表示された権限の中でReadOnlyAccessポリシーに設定されていない権限を確認します。
- glue:GetConnections →未設定
- glue:ListCrawlers →設定済み
- glue:BatchGetCrawlers →未設定
- glue:ListRegistries →未設定
- glue:ListSchemas →未設定
以下の公式ドキュメントで確認していましたが、「glue:ListRegistries」と「glue:ListSchemas」が記載されていなかったのが謎でした。
docs.aws.amazon.com
感想及び所感
ReadOnlyAccessポリシーで不足しているGlue権限について確認してみました。
不足していた理由はわかりませんが、ReadOnlyAccessポリシーを設定していれば参照権限は必要なものがアタッチされている...というわけではなさそうですので、使用する際は注意が必要です。