【AWS】AWS Glue ~ Boto3 / セキュリティ設定編 ~

■ はじめに

https://dk521123.hatenablog.com/entry/2019/10/14/000000
https://dk521123.hatenablog.com/entry/2020/01/29/224525

の続き。

今回は、Glue の セキュリティ設定(security configuration)
について扱う。

目次

【1】セキュリティ設定
 1)S3 暗号化モード
 2)CloudWatch Logs 暗号化モード
 3)ジョブのブックマーク暗号化モード
【2】関連する主なBoto3 API一覧
【3】使用上の注意
 1)KMSについて
【4】サンプル
 事前準備
 例1:セキュリティ設定削除/作成 (delete/create_security_configuration)

【1】セキュリティ設定

Glue の セキュリティ設定については、以下の通り。
 1)S3 暗号化モード
 2)CloudWatch Logs 暗号化モード
 3)ジョブのブックマーク暗号化モード

1)S3 暗号化モード

Amazon S3 データを作成する場合は、
Amazon S3 マネージドキー (SSE-S3) によるサーバー側暗号化または
AWS KMS 管理キー (SSE-KMS) によるサーバー側暗号化のいずれかを使用します

SSE-S3
https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/UsingServerSideEncryption.html
SSE-KMS
https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/UsingKMSEncryption.html

2)CloudWatch Logs 暗号化モード

サーバ側 (SSE-KMS) 暗号化は CloudWatch Logs を暗号化するために使用

3)ジョブのブックマーク暗号化モード

クライアント側 (CSE-KMS) 暗号化は、ジョブのブックマークを暗号化するために使用

公式サイト

https://docs.aws.amazon.com/ja_jp/glue/latest/dg/console-security-configurations.html

【2】関連する主なBoto3 API一覧

以下のAPIを参照しながら、実装していく

https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/glue.html

主なAPI

# API 説明
1 get_security_configuration() セキュリティ設定の取得
2 get_security_configurations() セキュリティ設定の取得
3 create_security_configuration() セキュリティ設定の作成
4 delete_security_configuration() セキュリティ設定の削除

【3】使用上の注意

1)KMSについて

* AWS Glue は、対称カスタマーマスターキー (CMK) のみをサポート
* 以下のような形式で ARN を入力
 + arn:aws:kms:<region>:<account-id>:key/<key-id>
 + arn:aws:kms:<region>:<account-id>:alias/<alias-name>

【4】サンプル

事前準備

* 以下の関連記事などを参考にKMSを作成しておく
 => 「arn:aws:kms:ap-northeast-1:111122223333:alias/ExampleAlias」とする

https://dk521123.hatenablog.com/entry/2020/02/27/232553

例1:セキュリティ設定削除/作成 (delete/create_security_configuration)

delete_security_configuration
https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/glue.html#Glue.Client.delete_security_configuration
create_security_configuration
https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/glue.html#Glue.Client.create_security_configuration

import boto3
try:
    from botocore.exceptions import BotoCoreError, ClientError
except ImportError:
    pass

# ここから実装
aws_region = 'ap-northeast-1'

glue_client = boto3.client('glue', region_name=aws_region)

target_security_configuration = 'target-db-connection'

# 一旦 security configuration の削除を試みる
try:
  delete_response = glue_client.delete_security_configuration(
    ConnectionName=target_security_configuration)
  print(delete_response)
except(BotoCoreError, ClientError) as ex:
  if ex.response['Error']['Code'] == 'EntityNotFoundException':
    print('対象[{}]見当たらず、削除不要'.format(target_security_configuration))
  else:
    raise ex

# security configuration の作成
kms_arn = 'arn:aws:kms:ap-northeast-1:111122223333:alias/ExampleAlias'
try:
  create_response = glue_client.create_security_configuration(
    ConnectionInput={
        "Name": target_security_configuration,
        "EncryptionConfiguration": {
          'S3Encryption': [
            {
              # 'S3EncryptionMode': 'DISABLED'|'SSE-KMS'|'SSE-S3',
              'S3EncryptionMode': 'SSE-KMS',
              'KmsKeyArn': kms_arn
            }
          ],
          'CloudWatchEncryption': {
            # 'CloudWatchEncryptionMode': 'DISABLED'|'SSE-KMS',
            'CloudWatchEncryptionMode': 'SSE-KMS',
            'KmsKeyArn': kms_arn
          },
          'JobBookmarksEncryption': {
            # 'JobBookmarksEncryptionMode': 'DISABLED'|'CSE-KMS',
            'JobBookmarksEncryptionMode': 'CSE-KMS',
            'KmsKeyArn': kms_arn
          }
        }
      })
  print(create_response)
except(BotoCoreError, ClientError) as ex:
  print('Error [{}]'.format(ex))
  raise ex

関連記事

AWS Glue ~ Boto3 / 入門編 ~
https://dk521123.hatenablog.com/entry/2019/10/14/000000
AWS Glue ~ Boto3 / クローラ編 ~
https://dk521123.hatenablog.com/entry/2021/04/16/135558
AWS Glue ~ Boto3 / セキュリティ設定編 ~
https://dk521123.hatenablog.com/entry/2020/04/08/171208
AWS Glue ~ Boto3 / Glue connection編 ~
https://dk521123.hatenablog.com/entry/2020/01/29/224525
AWS Glue ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2019/10/01/221926
AWS Glue ~ ログ ~
https://dk521123.hatenablog.com/entry/2019/10/09/000000
AWS Glue ~ Boto3 / 入門編 ~
https://dk521123.hatenablog.com/entry/2019/10/14/000000
AWS Glue ~ Boto3 / クローラ編 ~
https://dk521123.hatenablog.com/entry/2021/04/16/135558
AWS Glue ~ Boto3 / セキュリティ設定編 ~
https://dk521123.hatenablog.com/entry/2020/04/08/171208
AWS Glue のトラブルシューティング
https://dk521123.hatenablog.com/entry/2019/10/25/232155
AWS Key Management Service (KMS)
https://dk521123.hatenablog.com/entry/2020/02/27/232553