Redshift Serverless は監査ログ取得をオンにすることで、CloudWatch Logs に監査ログを出力することが可能です。
監査ログの種類
監査ログとして取得可能なのは、以下の 3 種類です。
監査ログの種類 | 説明 |
---|---|
接続ログ | 認証試行、接続、切断をログに記録します。 |
ユーザーログ | データベースのユーザー定義の変更に関する情報をログに記録します。 |
ユーザーアクティビティログ | 各クエリをデータベースで実行される前にログに記録します。ユーザーアクティビティログについては、監査ログ設定の他、データベースパラメータ enable_user_activity_logging も有効にする必要がありますが、Redshift Serverless 名前空間作成時、もしくは既存の名前空間の変更でユーザーアクティビティログ有効化時に自動で有効化されます。 |
各種ログの詳細は以下ドキュメントを参照ください。
監査ログは CloudWatch Logs に出力されますが、Redshift Serverless に付与する IAM ロールには CloudWatch Logs へのアクセス権限を明示的に付与しなくても、監査ログは CloudWatch Logs に作成されます。
生成されたログデータを Amazon CloudWatch Logs にエクスポートするには、コンソールの Amazon Redshift Serverless 設定で、エクスポート対象のログを選択する必要があります。
検証1 拡張された VPC のルーティングが【オフ】の場合
Redshift Serverless ワークグループで拡張された VPC のルーティングがオフの状態で監査ログを有効化してみます。
拡張された VPC のルーティングについては以下のブログをご参照ください。
VPC 、サブネット、ルートテーブル、セキュリティグループ、IAM ロールは事前に作成しておきます。
今回、監査ログ記録を試すだけなので IAM ロールに許可ポリシー(ID ベースのポリシー)は設定していません。
Redshift Serverless は AWS CLI で作成します。
名前空間の作成
create-namespace — AWS CLI 2.8.4 Command Reference
aws redshift-serverless create-namespace \
--admin-user-password xxxxxxxxxxxx \
--admin-username rsadmin \
--db-name dev1 \
--iam-roles "arn:aws:iam::123456789012:role/redshift-serverless-role" \
--log-exports "useractivitylog" "userlog" "connectionlog" \
--namespace-name redshift-demo-ns1 \
--tags key=Name,value=redshift-demo-ns1
--log-exports
オプションで、出力する監査ログを指定しています。
実行結果
[cloudshell-user@ip-10-0-182-253 ~]$ aws redshift-serverless create-namespace \
> --admin-user-password Serverw0rk$ \
> --admin-username rsadmin \
> --db-name dev1 \
> --iam-roles "arn:aws:iam::123456789012:role/redshift-serverless-role" \
> --log-exports "useractivitylog" "userlog" "connectionlog" \
> --namespace-name redshift-demo-ns1 \
> --tags key=Name,value=redshift-demo-ns1
{
"namespace": {
"adminUsername": "rsadmin",
"creationDate": "2022-11-20T10:02:40.580000+00:00",
"dbName": "dev1",
"iamRoles": [
"arn:aws:iam::123456789012:role/redshift-serverless-role"
],
"kmsKeyId": "AWS_OWNED_KMS_KEY",
"logExports": [
"connectionlog",
"useractivitylog",
"userlog"
],
"namespaceArn": "arn:aws:redshift-serverless:ap-northeast-1:123456789012:namespace/a1a1c693-8a07-4d51-9967-d123d617757d",
"namespaceId": "a1a1c693-8a07-4d51-9967-d123d617757d",
"namespaceName": "redshift-demo-ns1",
"status": "AVAILABLE"
}
}
[cloudshell-user@ip-10-0-182-253 ~]$
ワークグループの作成
create-workgroup — AWS CLI 2.8.4 Command Reference
aws redshift-serverless create-workgroup \
--base-capacity 32 \
--namespace-name redshift-demo-ns1 \
--security-group-ids "sg-03a96ec6d1036cda2" \
--subnet-ids "subnet-021ec730242bbc555" "subnet-0429e9a0cc658de6e" " subnet-00ace4894f695d5e6" \
--tags key=Name,value=redshift-demo-workgp1 \
--workgroup-name redshift-demo-workgp1
実行結果
[cloudshell-user@ip-10-0-182-253 ~]$ aws redshift-serverless create-workgroup \
> --base-capacity 32 \
> --namespace-name redshift-demo-ns1 \
> --security-group-ids "sg-03a96ec6d1036cda2" \
> --subnet-ids "subnet-021ec730242bbc555" "subnet-0429e9a0cc658de6e" "subnet-00ace4894f695d5e6" \
> --tags key=Name,value=redshift-demo-workgp1 \
> --workgroup-name redshift-demo-workgp1
{
"workgroup": {
"baseCapacity": 32,
"configParameters": [
{
"parameterKey": "auto_mv",
"parameterValue": "true"
},
{
"parameterKey": "datestyle",
"parameterValue": "ISO, MDY"
},
{
"parameterKey": "enable_case_sensitive_identifier",
"parameterValue": "false"
},
{
"parameterKey": "enable_user_activity_logging",
"parameterValue": "true"
},
{
"parameterKey": "query_group",
"parameterValue": "default"
},
{
"parameterKey": "search_path",
"parameterValue": "$user, public"
},
{
"parameterKey": "max_query_execution_time",
"parameterValue": "14400"
}
],
"creationDate": "2022-11-20T10:02:54.144000+00:00",
"endpoint": {
"address": "redshift-demo-workgp1.123456789012.ap-northeast-1.redshift-serverless.amazonaws.com",
"port": 5439
},
"enhancedVpcRouting": false,
"namespaceName": "redshift-demo-ns1",
"publiclyAccessible": false,
"securityGroupIds": [
"sg-03a96ec6d1036cda2"
],
"status": "CREATING",
"subnetIds": [
"subnet-021ec730242bbc555",
"subnet-0429e9a0cc658de6e",
"subnet-00ace4894f695d5e6"
],
"workgroupArn": "arn:aws:redshift-serverless:ap-northeast-1:123456789012:workgroup/18338ffb-f280-46cf-a43f-006db60fb86d",
"workgroupId": "18338ffb-f280-46cf-a43f-006db60fb86d",
"workgroupName": "redshift-demo-workgp1"
}
}
[cloudshell-user@ip-10-0-182-253 ~]$
作成された名前空間の [セキュリティと暗号化] タブを見ると、監査ログ記録がオンになっており、エクスポートされたログに 3 種類のログが表示されています。
CloudWatch Logs を見ると、該当の名前空間に対応する CloudWatch Logs が表示されていることが分かります。
デフォルトではロググループの保持期間が「失効しない」になっています。要件にあわせて保持期間を変更するようにしてください。
今回は保持期間を以下の AWS CLI コマンドで 7 日間に変更します。
put-retention-policy — AWS CLI 2.8.4 Command Reference
aws logs put-retention-policy \
--log-group-name "/aws/redshift/redshift-demo-ns1/connectionlog" \
--retention-in-days 7
aws logs put-retention-policy \
--log-group-name "/aws/redshift/redshift-demo-ns1/useractivitylog" \
--retention-in-days 7
aws logs put-retention-policy \
--log-group-name "/aws/redshift/redshift-demo-ns1/userlog" \
--retention-in-days 7
検証2 拡張された VPC のルーティングが【オン】の場合
Redshift Serverless ワークグループで拡張された VPC のルーティングをオンにして監査ログを有効化してみます。なぜ検証しようと思ったかというと、CloudWatch Logs にログを出力するのに VPC エンドポイントが必要なのかどうか気になったからです。
Redshift Serverless は AWS CLI で作成します。
名前空間の作成
aws redshift-serverless create-namespace \
--admin-user-password xxxxxxxxxxxx \
--admin-username rsadmin \
--db-name dev2 \
--iam-roles "arn:aws:iam::123456789012:role/redshift-serverless-role" \
--log-exports "useractivitylog" "userlog" "connectionlog" \
--namespace-name redshift-demo-ns2 \
--tags key=Name,value=redshift-demo-ns2
--log-exports
オプションで、出力する監査ログを指定しています。
実行結果
[cloudshell-user@ip-10-0-182-253 ~]$ aws redshift-serverless create-namespace \
> --admin-user-password Serverw0rk$ \
> --admin-username rsadmin \
> --db-name dev2 \
> --iam-roles "arn:aws:iam::123456789012:role/redshift-serverless-role" \
> --log-exports "useractivitylog" "userlog" "connectionlog" \
> --namespace-name redshift-demo-ns2 \
> --tags key=Name,value=redshift-demo-ns2
{
"namespace": {
"adminUsername": "rsadmin",
"creationDate": "2022-11-20T10:57:31.907000+00:00",
"dbName": "dev2",
"iamRoles": [
"arn:aws:iam::123456789012:role/redshift-serverless-role"
],
"kmsKeyId": "AWS_OWNED_KMS_KEY",
"logExports": [
"connectionlog",
"useractivitylog",
"userlog"
],
"namespaceArn": "arn:aws:redshift-serverless:ap-northeast-1:123456789012:namespace/ea37a72a-c83e-4d5e-8d9c-2f4b084a2353",
"namespaceId": "ea37a72a-c83e-4d5e-8d9c-2f4b084a2353",
"namespaceName": "redshift-demo-ns2",
"status": "AVAILABLE"
}
}
[cloudshell-user@ip-10-0-182-253 ~]$
ワークグループの作成
aws redshift-serverless create-workgroup \
--base-capacity 32 \
--namespace-name redshift-demo-ns2 \
--security-group-ids "sg-03a96ec6d1036cda2" \
--subnet-ids "subnet-021ec730242bbc555" "subnet-0429e9a0cc658de6e" " subnet-00ace4894f695d5e6" \
--tags key=Name,value=redshift-demo-workgp2 \
--workgroup-name redshift-demo-workgp2
実行結果
[cloudshell-user@ip-10-0-182-253 ~]$ aws redshift-serverless create-workgroup \
> --base-capacity 32 \
> --enhanced-vpc-routing \
> --namespace-name redshift-demo-ns2 \
> --security-group-ids "sg-03a96ec6d1036cda2" \
> --subnet-ids "subnet-021ec730242bbc555" "subnet-0429e9a0cc658de6e" "subnet-00ace4894f695d5e6" \
> --tags key=Name,value=redshift-demo-workgp2 \
> --workgroup-name redshift-demo-workgp2
{
"workgroup": {
"baseCapacity": 32,
"configParameters": [
{
"parameterKey": "auto_mv",
"parameterValue": "true"
},
{
"parameterKey": "datestyle",
"parameterValue": "ISO, MDY"
},
{
"parameterKey": "enable_case_sensitive_identifier",
"parameterValue": "false"
},
{
"parameterKey": "enable_user_activity_logging",
"parameterValue": "true"
},
{
"parameterKey": "query_group",
"parameterValue": "default"
},
{
"parameterKey": "search_path",
"parameterValue": "$user, public"
},
{
"parameterKey": "max_query_execution_time",
"parameterValue": "14400"
}
],
"creationDate": "2022-11-20T10:57:41.155000+00:00",
"endpoint": {
"address": "redshift-demo-workgp2.123456789012.ap-northeast-1.redshift-serverless.amazonaws.com",
"port": 5439
},
"enhancedVpcRouting": true,
"namespaceName": "redshift-demo-ns2",
"publiclyAccessible": false,
"securityGroupIds": [
"sg-03a96ec6d1036cda2"
],
"status": "CREATING",
"subnetIds": [
"subnet-021ec730242bbc555",
"subnet-0429e9a0cc658de6e",
"subnet-00ace4894f695d5e6"
],
"workgroupArn": "arn:aws:redshift-serverless:ap-northeast-1:123456789012:workgroup/e6992912-a138-48c5-9937-bcd8e7029135",
"workgroupId": "e6992912-a138-48c5-9937-bcd8e7029135",
"workgroupName": "redshift-demo-workgp2"
}
}
[cloudshell-user@ip-10-0-182-253 ~]$
作成された名前空間の [セキュリティと暗号化] タブを見ると、監査ログ記録がオンになっており、エクスポートされたログに 3 種類のログが表示されています。
CloudWatch Logs を見ると、該当の名前空間に対応する CloudWatch Logs が表示されていることが分かります。
ログイベントを見ると、ログが出力されています。
拡張された VPC のルーティングがオンの状態で CloudWatch Logs 用の VPC エンドポイントが無くても、監査ログが CloudWatch Logs に記録されることが分かりました。
参考