説明
SQL Serverの包含データベース認証を使うと、インスタンスのログインだけに依存せず、データベースでユーザーを認証できます。認証が不要になるわけではありませんが、ALTER ANY USERなどの権限を持つデータベースユーザーは、ほかのユーザーにアクセスを許可できます。このような権限の委譲も管理対象に含める必要があります。
機能が不要なCloud SQLインスタンスでは、contained database authenticationを無効にしてください。利用する場合は、インスタンスのログインと包含データベースユーザーの両方を管理してください。
想定される影響
- ユーザー管理権限が過剰に付与されていると、本来許可すべきでないアカウントにアクセスが許可されるおそれがあります。
- インスタンスのログインだけを確認すると、包含データベースユーザーのアクセス権を見落とす可能性があります。
対処方法
- 既存のユーザーとアプリケーションの認証方法を確認し、機能が不要なら
contained database authenticationを文字列offに設定してください。利用を続ける場合は、ALTER ANY USERなどの権限を必要なユーザーに限定してください。 - 既存インスタンスの変更には、Cloud SQLコンソールや対応する管理ツール/APIを使用してください。
google.cloud1.14.0のSQLインスタンスモジュールは既存オブジェクトを更新できないため、プレイブックの編集だけでは変更を適用できません。フラグ一覧を置き換える際は、必要なほかのフラグも維持してください。 - 変更後も必要なアプリケーション接続が動作し、許可していないユーザーのアクセスが拒否されることを確認してください。
例
以下は過去の設定例です。SQLSERVER_13_1は、現在のCloud SQLで文書化されているバージョン識別子ではありません。デプロイには対応するバージョンと環境に合った設定を使い、フラグ値は"on"や"off"のように文字列で指定してください。
最初の設定
yaml
- name: sql_instance
google.cloud.gcp_sql_instance:
auth_kind: serviceaccount
database_version: SQLSERVER_13_1
name: "{{ resource_name }}-2"
project: test_project
region: us-central1
service_account_file: /tmp/auth.pem
settings:
database_flags:
- name: contained database authentication
value: on
tier: db-n1-standard-1
state: present
包含データベース認証を有効にする設定です。データベースユーザーと、そのユーザーを管理する権限を適切に管理する必要があります。
比較用の設定
yaml
- name: sql_instance
google.cloud.gcp_sql_instance:
auth_kind: serviceaccount
database_version: SQLSERVER_13_1
name: '{{ resource_name }}-2'
project: test_project
region: us-central1
service_account_file: /tmp/auth.pem
settings:
database_flags:
- name: contained database authentication
value: off
tier: db-n1-standard-1
state: present
機能が不要な場合はフラグを無効にしてください。適用前に、既存の接続が包含データベース認証に依存していないことを確認してください。