説明
Glue Data Catalog のリソースポリシーが広すぎると、不要な主体にデータベース・テーブルのメタデータの参照や変更を許すおそれがあります。このポリシーは、Glue ジョブやクローラー自体の管理権限、保存された元データへのアクセス権限とは区別してください。
想定される影響
- 不要なカタログの参照により、データ構造や保存場所が漏えいする可能性があります。
- テーブルやデータベース定義の変更・削除は、分析やデータ処理を中断させるおそれがあります。
対処方法
- 有効な既存の IAM 主体と、必要なカタログ操作だけを指定してください。
- ポリシーを関連付けたカタログの ARN に範囲を絞り、操作に必要なデータベース・テーブルと上位リソースの権限を含めてください。
- 他の IAM・Lake Formation 権限と既存の利用者を確認し、必要な操作が成功して不要な参照・変更が拒否されることを試験してください。
例
同じリソースポリシーの操作と対象を絞る抜粋です。参照データソースは別途定義し、ロール ARN と example データベース名を実際の値に置き換えてください。Glue は有効な既存の主体を必要とします。
変更前
hcl
data "aws_iam_policy_document" "glue_example_policy" {
statement {
actions = [
"glue:*",
]
resources = ["arn:${data.aws_partition.current.partition}:glue:${data.aws_region.current.name}:${data.aws_caller_identity.current.account_id}:*"]
principals {
identifiers = ["arn:aws:iam::111122223333:role/catalog-writer"]
type = "AWS"
}
}
}
resource "aws_glue_resource_policy" "example" {
policy = data.aws_iam_policy_document.glue_example_policy.json
}
指定ロールにカタログ全体の広い操作を許可します。必要なロールでも、操作と対象は必要な範囲に絞ってください。
変更後
hcl
data "aws_iam_policy_document" "glue_example_policy" {
statement {
actions = [
"glue:CreateTable",
]
resources = [
"arn:${data.aws_partition.current.partition}:glue:${data.aws_region.current.name}:${data.aws_caller_identity.current.account_id}:catalog",
"arn:${data.aws_partition.current.partition}:glue:${data.aws_region.current.name}:${data.aws_caller_identity.current.account_id}:database/example",
"arn:${data.aws_partition.current.partition}:glue:${data.aws_region.current.name}:${data.aws_caller_identity.current.account_id}:table/example/*",
]
principals {
identifiers = ["arn:aws:iam::111122223333:role/catalog-writer"]
type = "AWS"
}
}
}
resource "aws_glue_resource_policy" "example" {
policy = data.aws_iam_policy_document.glue_example_policy.json
}
example データベースでのテーブル作成に許可を絞り、必要な上位カタログ・データベースの ARN も含めます。元データへのアクセスやジョブ実行の権限は別途確認してください。