カピバラ好きなエンジニアブログ

興味ある技術とか検証した内容を赴くままに書いていきます。カピバラの可愛さこそ至高。

ReadOnlyAccessポリシーだとGlue権限が不足していたので確認してみた

AWSの権限を設定する際、参照権限だけを与えたい場合は管理ポリシーのReadOnlyAccessを使用すると簡単に権限の付与ができます。
しかし、上記の権限を付与してGlueコンソールにアクセスしたところ、 一部表示できない画面があったので確認してみます。

IAMグループとポリシーを作成するのに使用したCloudFormationは以下にアップしています。
github.com

実施作業

準備

ReadOnlyAccessポリシーがアタッチされたIAMグループを作成します。
そのグループにアクセス用のIAMユーザを追加し、別ブラウザからログインします。
f:id:live-your-life-dd18:20210106182936p:plain

アクセス確認

Glueコンソールの項目をベースにエラーが出るもの、出ないものを確認します。

大項目 項目名 エラー有無
データカタログ データベース なし
テーブル なし
接続 あり
クローラ あり
分類子 なし
スキーマレジストリ あり
スキーマ あり
設定 なし
ETL AWS Glue Studio Glueでも異なるサービスのため対象外
ワークフロー なし
ジョブ なし
ML変換 なし
トリガー なし
開発エンドポイント なし
ノートブック なし



接続、クローラ、スキーマレジストリスキーマの4項目でエラーが発生しました。

エラー内容

どのようなエラーが出たか見ていきます。

接続

エラーメッセージを見ると「glue:GetConnections」の権限が足りてないようです。
f:id:live-your-life-dd18:20210106184140p:plain

クローラ

エラーメッセージを見ると「glue:ListCrawlers」と「glue:BatchGetCrawlers」が足りていないようです。
f:id:live-your-life-dd18:20210106184317p:plain

スキーマレジストリ

「glue:ListRegistries」が不足しているようです。
f:id:live-your-life-dd18:20210106184447p:plain

スキーマ

「glue:ListSchemas」の権限が足りないことでエラーが出てました。
f:id:live-your-life-dd18:20210106184543p:plain

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

不足権限の追加・確認

不足している権限を最初に作成したIAMグループに追加します。
f:id:live-your-life-dd18:20210106192117p:plain

権限が追加されているはずなのでエラーが出なくなっているか確認します。

接続

f:id:live-your-life-dd18:20210106192441p:plain

クローラ

f:id:live-your-life-dd18:20210106192459p:plain

感想及び所感

ReadOnlyAccessポリシーで不足しているGlue権限について確認してみました。
不足していた理由はわかりませんが、ReadOnlyAccessポリシーを設定していれば参照権限は必要なものがアタッチされている...というわけではなさそうですので、使用する際は注意が必要です。