0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【AWS Glue Job】コンソールからスクリプトを編集できないようにする方法(IAM/S3バケットポリシーでの制限)

Posted at

背景

先日、AWS Glueジョブのスクリプトをコンソール上で誤って編集してしまい、処理が異常終了するというトラブルを経験しました。

スクリプトはGit+CI/CD経由でのみ更新する運用としていましたが、作業者の誤操作により、コンソール上のスクリプトが直接上書きされてしまったことが原因です。

この事故を防ぐために、制限(S3へのPutObject制御)を追加し、マネジメントコンソールからスクリプトを編集できないようにしました。

本記事では、その具体的な方法を紹介します。

結論

Glueジョブのスクリプト編集を防ぐには、以下の2つのアプローチが有効です。

  • IAMポリシー:ユーザー/ロール単位で制御
  • S3バケットポリシー:バケット単位で制御

でS3バケットへのPutObject操作を制限するのが有効です。

Glueジョブのスクリプトはサービス画面上で編集しているように見えますが、実際にはS3上のスクリプトファイルが更新されています。
そのため、S3への書き込みを抑止すれば、コンソールからの直接編集を防止できる仕組みです。

対策

後述のポリシー設定が有効に働くか確認するため、検証用のサンプルGlueジョブを作成します。
Jobs_-_AWS_Glue_Studio.png

スクリプトにコメントを1行追加し、保存すると、問題なく変更が反映されます。
(現時点では制限なしの状態)
Cursor_と_Script_-Editor-_AWS_Glue_Studio.png


対策①:IAMポリシーで制御する

最もシンプルな方法は、マネジメントコンソールでGlueを操作するユーザー(またはそのロール)に付与しているIAMポリシーで、特定S3パスへの s3:PutObject を明示的に拒否する方法です。

以下のポリシーを、Glueジョブを閲覧するIAMユーザーやロールにアタッチします。
対象のバケット名はGlueジョブの「Job details」タブ→「Advanced properties」から確認できます。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "DenyPutObjectToGlueScriptsBucket",
            "Effect": "Deny",
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::aws-glue-assets-123456789012-ap-northeast-1/*"
        }
    ]
}

Job_details_-Editor-_AWS_Glue_Studio.png

このポリシーを適用した状態で、マネジメントコンソールからスクリプトを編集して保存すると、画像のようなエラーが出て変更が拒否されます。
Cursor_と_Tiling_Handle_Window_と_Script_-Editor-_AWS_Glue_Studio.png

対策②:S3バケットポリシーで制御する

IAM系のリソース操作が組織的に管理されている場合、IAMポリシーの作成や適用が制限されることもあります。
そのようなケースでは、S3バケットポリシーでアクセス制御を行うことが可能です。

以下のポリシーを、Glueジョブのスクリプトを格納しているS3バケットに設定します。
対象のバケット名は、Glueジョブの 「Job details」タブ →「Advanced properties」 から確認が可能です。

このポリシーでは、特定の文字列を含むロールに対して s3:PutObject を制限するポリシーとしています。
これにより、ユーザーが使用するロールには制限をかけつつ、CI/CD用のロールには影響を与えないように制御できます。

{
	"Version": "2012-10-17",
	"Statement": [
		{
			"Sid": "DenyPutObjectIfRoleNameMatches",
			"Effect": "Deny",
			"Principal": "*",
			"Action": "s3:PutObject",
			"Resource": "arn:aws:s3:::aws-glue-assets-123456789012-ap-northeast-1/*",
			"Condition": {
				"ArnLike": {
					"aws:PrincipalArn": "arn:aws:iam::123456789012:role/*test-glue-job-user-role*"
				}
			}
		}
	]
}

Job_details_-Editor-_AWS_Glue_Studio.png

このポリシーを適用した状態で、マネジメントコンソールからスクリプトを編集して保存すると、画像のようなエラーが出て変更が拒否されます。
Script_-Editor-_AWS_Glue_Studio.png

補足:CLI経由での更新について

今回の設定により、Glueのマネジメントコンソール上では 「Save」ボタンを押しても更新が実行されなくなります。
スクリプトを含む「Job details」画面の内容を編集しても、S3への書き込みが拒否されるため保存できません。
Tiling_Handle_Window_と_Job_details_-Editor-_AWS_Glue_Studio.png

一方で、CLI経由であればスクリプト以外のプロパティ値(例:DefaultArgumentsWorkerType など)の更新は可能です。
たとえば、次のように update-job コマンドを実行すれば、コンソール画面上にもその変更内容が反映されます。
以下の例では、Job parametersに新しいデフォルト値 --FOO=bar を追加しています。

aws glue update-job \
  --job-name test-glue-job \
  --job-update "$(
    aws glue get-job --job-name test-glue-job \
    | jq -c '{
        Command: .Job.Command,
        Role: .Job.Role,
        DefaultArguments: (.Job.DefaultArguments + {"--FOO":"bar"})
      }'
  )"

更新後にマネジメントコンソールの「Job details → Advanced properties → Job parameters」を確認すると、CLIで設定した内容が反映されていることがわかります。
Job_details_-Editor-_AWS_Glue_Studio.png

もし、プロパティ値の変更も制限したい場合は、IAMポリシーで glue:UpdateJob アクションを拒否する必要があります。

まとめ

Glueジョブのスクリプトは実際にはS3上のファイルを更新しているため、PutObjectを制限することでコンソールからの誤編集を防止できます。
IAMポリシーやバケットポリシーを活用すれば、手動更新を抑止しつつ安全なCI/CD運用を実現可能です。

最後まで読んでいただき、ありがとうございました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?