RedshiftServerless.3
検証日: 2026-05-02 / リージョン: ap-northeast-1
コントロールの説明
Redshift Serverless ワークグループの PubliclyAccessible 設定が false になっているかをチェックする。PubliclyAccessible が true の場合に FAILED となる。
Redshift Serverless はプロビジョニング不要のデータウェアハウスであり、ワークグループ(コンピュートリソース)と名前空間(データベース・スキーマ)で構成される。ワークグループは VPC 内に配置され、Redshift Provisioned と同様に PubliclyAccessible フラグでパブリック IP の付与とパブリック DNS 名の解決先を制御する(検証で確認済み)。
対応する Config ルール: REDSHIFT_SERVERLESS_WORKGROUP_NO_PUBLIC_ACCESS(評価頻度: Periodic)
検証環境
--profile 指定がない場合は Workload アカウントで実行する。export AWS_PROFILE=Workload でデフォルトを設定しておくと便利。
結果
- ワークグループが存在しない場合は PASSED
- PubliclyAccessible=true で起動すると FAILED。エンドポイントの DNS 名がパブリック IP アドレスに解決される
- PubliclyAccessible=false に変更すると PASSED に復帰。DNS 名の解決先がプライベート IP アドレスに変わる。エンドポイントの DNS 名自体は変わらない
- デフォルトでは保護されていない(PubliclyAccessible のデフォルトは true)
検証の流れ
flowchart LR
A[1. デフォルト状態の確認<br>PASSED] --> B[2. PubliclyAccessible=true で<br>ワークグループ起動]
B --> C[3. FAILED 確認]
C --> D[4. PubliclyAccessible=false に変更]
D --> E[5. PASSED 復帰確認]
E --> F[6. クリーンアップ]
1. デフォルト状態の確認
Security Hub finding の確認
aws securityhub get-findings \
--filters '{
"ComplianceSecurityControlId": [{"Comparison": "EQUALS", "Value": "RedshiftServerless.3"}],
"AwsAccountId": [{"Comparison": "EQUALS", "Value": "<アカウント ID>"}],
"WorkflowStatus": [{"Comparison": "NOT_EQUALS", "Value": "SUPPRESSED"}],
"RecordState": [{"Comparison": "EQUALS", "Value": "ACTIVE"}]
}' \
--query 'Findings[].{Status:Compliance.Status,ResourceId:Resources[0].Id}' \
--region ap-northeast-1[
{
"Status": "PASSED",
"ResourceId": "AWS::::Account:<アカウント ID>"
},
{
"Status": "PASSED",
"ResourceId": "AWS::::Account:<アカウント ID>"
}
]ワークグループが存在しないため PASSED。2 件返るのは、東京リージョン(ap-northeast-1)と集約リージョン(ap-southeast-1)の 2 リージョンで Security Hub が有効化されているためである。
2. PubliclyAccessible=true でワークグループ起動
名前空間の作成
Redshift Serverless ではワークグループの前に名前空間を作成する必要がある。
aws redshift-serverless create-namespace \
--namespace-name rs3-test-ns \
--admin-username admin \
--admin-user-password '<パスワード>' \
--query 'namespace.{namespaceName:namespaceName,status:status}' \
--region ap-northeast-1{
"namespaceName": "rs3-test-ns",
"status": "AVAILABLE"
}ワークグループの作成
aws redshift-serverless create-workgroup \
--workgroup-name rs3-test-wg \
--namespace-name rs3-test-ns \
--publicly-accessible \
--base-capacity 8 \
--query 'workgroup.{workgroupName:workgroupName,status:status,publiclyAccessible:publiclyAccessible}' \
--region ap-northeast-1{
"workgroupName": "rs3-test-wg",
"status": "CREATING",
"publiclyAccessible": true
}AVAILABLE 確認
ワークグループの起動には数分かかる。
aws redshift-serverless get-workgroup \
--workgroup-name rs3-test-wg \
--query 'workgroup.{workgroupName:workgroupName,status:status,publiclyAccessible:publiclyAccessible,endpoint:endpoint.address}' \
--region ap-northeast-1{
"workgroupName": "rs3-test-wg",
"status": "AVAILABLE",
"publiclyAccessible": true,
"endpoint": "<エンドポイント>"
}パブリック DNS の解決確認
dig +short <エンドポイント><パブリック IP アドレス>3. FAILED 確認
Config ルールの手動トリガー
aws configservice start-config-rules-evaluation \
--config-rule-names securityhub-redshift-serverless-workgroup-no-public-access-<サフィックス> \
--region ap-northeast-1
(出力なし)Config 評価結果の確認
Config リソース ID はワークグループの UUID が使われる。
aws configservice get-compliance-details-by-config-rule \
--config-rule-name securityhub-redshift-serverless-workgroup-no-public-access-<サフィックス> \
--query 'EvaluationResults[].{ResourceId:EvaluationResultIdentifier.EvaluationResultQualifier.ResourceId,ComplianceType:ComplianceType}' \
--region ap-northeast-1[
{
"ResourceId": "<ワークグループ UUID>",
"ComplianceType": "NON_COMPLIANT"
}
]Security Hub finding の FAILED 確認
aws securityhub get-findings \
--filters '{
"ComplianceSecurityControlId": [{"Comparison": "EQUALS", "Value": "RedshiftServerless.3"}],
"AwsAccountId": [{"Comparison": "EQUALS", "Value": "<アカウント ID>"}],
"WorkflowStatus": [{"Comparison": "NOT_EQUALS", "Value": "SUPPRESSED"}],
"RecordState": [{"Comparison": "EQUALS", "Value": "ACTIVE"}]
}' \
--query 'Findings[].{Status:Compliance.Status,ResourceId:Resources[0].Id}' \
--region ap-northeast-1[
{
"Status": "FAILED",
"ResourceId": "arn:aws:redshift-serverless:ap-northeast-1:<アカウント ID>:workgroup/<ワークグループ UUID>"
},
{
"Status": "PASSED",
"ResourceId": "AWS::::Account:<アカウント ID>"
}
]4. PubliclyAccessible=false に変更
aws redshift-serverless update-workgroup \
--workgroup-name rs3-test-wg \
--no-publicly-accessible \
--query 'workgroup.{workgroupName:workgroupName,status:status,publiclyAccessible:publiclyAccessible}' \
--region ap-northeast-1{
"workgroupName": "rs3-test-wg",
"status": "MODIFYING",
"publiclyAccessible": true
}即時レスポンスでは変更前の値が返る。反映には数分かかる。
変更の反映確認
aws redshift-serverless get-workgroup \
--workgroup-name rs3-test-wg \
--query 'workgroup.{workgroupName:workgroupName,status:status,publiclyAccessible:publiclyAccessible,endpoint:endpoint.address}' \
--region ap-northeast-1{
"workgroupName": "rs3-test-wg",
"status": "AVAILABLE",
"publiclyAccessible": false,
"endpoint": "<エンドポイント>"
}パブリック DNS の解決確認
dig +short <エンドポイント><プライベート IP アドレス>5. PASSED 復帰確認
Config ルールの手動トリガー
aws configservice start-config-rules-evaluation \
--config-rule-names securityhub-redshift-serverless-workgroup-no-public-access-<サフィックス> \
--region ap-northeast-1
(出力なし)Security Hub finding の PASSED 確認
aws securityhub get-findings \
--filters '{
"ComplianceSecurityControlId": [{"Comparison": "EQUALS", "Value": "RedshiftServerless.3"}],
"AwsAccountId": [{"Comparison": "EQUALS", "Value": "<アカウント ID>"}],
"WorkflowStatus": [{"Comparison": "NOT_EQUALS", "Value": "SUPPRESSED"}],
"RecordState": [{"Comparison": "EQUALS", "Value": "ACTIVE"}]
}' \
--query 'Findings[].{Status:Compliance.Status,ResourceId:Resources[0].Id}' \
--region ap-northeast-1[
{
"Status": "PASSED",
"ResourceId": "arn:aws:redshift-serverless:ap-northeast-1:<アカウント ID>:workgroup/<ワークグループ UUID>"
},
{
"Status": "PASSED",
"ResourceId": "AWS::::Account:<アカウント ID>"
}
]6. クリーンアップ
ワークグループの削除
aws redshift-serverless delete-workgroup \
--workgroup-name rs3-test-wg \
--region ap-northeast-1
(出力なし)ワークグループの削除完了を待ってから名前空間を削除する。
名前空間の削除
aws redshift-serverless delete-namespace \
--namespace-name rs3-test-ns \
--region ap-northeast-1
(出力なし)補足:Config ルール名の確認方法
aws configservice describe-config-rules \
--query 'ConfigRules[?contains(Source.SourceIdentifier,`REDSHIFT_SERVERLESS_WORKGROUP_NO_PUBLIC_ACCESS`)].ConfigRuleName' \
--region ap-northeast-1