ベストプラクティスにはKMSの無効化についてLambdaを使うとか書かれています。
AWS KMS のセキュリティの自動化
CMK の監視中に、特定のアクションが検出された場合、CMK を無効にするか、ローカルのセキュリティポリシーで指示されているその他のインシデント対応アクションを実行するように AWS Lambda 関数を設定することができます。AWS 内の自動化ツールを活用することにより、人間の介入なしで潜在的な露出を数分で遮断することができます。
KMSを作る
Create Key-> Symmetric
-> Next
-> Alias
-> Next
-> Define key admin permissions
-> Define key usage premissions
KMSのIDを後で使います。
LambdaのRoleにつけるPolicy
DisableKMS: ManagedPolicyから作ります。{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"kms:DisableKey"
],
"Resource": "*"
}
]
}
InlineはLambdaのARNが必要なので、あとでつけました。 Region, AccountIDを変えます。環境変数を取得するためのポリシー(inline policy)
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "lambda:GetFunctionConfiguration",
"Resource": "arn:aws:lambda:Region:AccountID:function:DisableKMS"
}
]
}
CloudWatchにつなぐためのポリシー。Region, AccountIDを変えます。(inline policy)
※Lambdaを作るときにポリシーを作ると、これが同時にできるはず。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "logs:CreateLogGroup",
"Resource": "arn:aws:logs:Resion:AccountID:*"
},
{
"Effect": "Allow",
"Action": [
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": [
"arn:aws:logs:Resion:AccountID:log-group:/aws/lambda/DisableKMS:*"
]
}
]
}
DisableKMSという名前のLambdaを作ります。Lambdaのcodeは以下です。環境変数にKMSID=ターゲットKMSのIDを指定します。
import botocore
import boto3
from botocore.exceptions import ClientError
def lambda_handler(event, context):
client = boto3.client('kms')
lambdaFunc = boto3.client('lambda')
print('Trying to get Environment variable')
try:
funcResponse = lambdaFunc.get_function_configuration(
FunctionName='DisableDMS'
)
KMSID = funcResponse['Environment']['Variables']['KMSID']
print('Disabling KMD id: ' + KMSID)
except ClientError as e:
print(e)
try:
response = client.disable_key(
KeyId=KMSID
)
print('Success :: ')
return response
except ClientError as e:
print(e)
return
{
'message': "Script execution completed. See Cloudwatch logs for complete output"
}
とりあえずは動作するのですが、ベストかというと謎ですが・・・。おまけ
LambdaからCloudWatchへのアクセスのポリシーがないとき、CloudWatchコンソールを開くとこんなエラーが出ていました。
0 件のコメント:
コメントを投稿