コンテンツにスキップ

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

Amazonアソシエイトリンク