このページでは、ユーザーとサービス アカウントが Cloud SQL IAM データベース認証を使用して Cloud SQL データベースにログインする方法について説明します。詳細については、IAM 認証をご覧ください。
始める前に
- IAM データベース認証を使用するようにインスタンスを構成します。詳しくは、IAM データベース認証に新しいインスタンスを構成するをご覧ください。
- IAM ユーザー、サービス アカウント、またはグループをデータベースに追加します。詳細については、IAM ユーザーまたはサービス アカウントをデータベースに追加するとグループをデータベースに追加するをご覧ください。
- IAM ユーザー、サービス アカウント、またはグループに
roles/cloudsql.instanceUser
IAM ロールを追加します。これは必要な Cloud SQL IAM 権限cloudsql.instances.login
を含む事前定義ロールです。IAM データベース認証を使用してデータベース インスタンスにログインするには、この権限が必要です。詳細については、ロールと権限をご覧ください。 IAM ユーザーがデータベースに追加されると、デフォルトでは、新しいデータベース ユーザーにはデータベースに対する権限が付与されません。
GRANT
コマンドを使用して、IAM データベース ユーザーに必要な権限を付与する必要があります。詳細については、IAM ユーザーにデータベース権限を付与するとグループにデータベース権限を付与するをご覧ください。IAM グループ認証を使用している場合、IAM ユーザーまたはサービス アカウントは、Cloud SQL インスタンスにログインするための IAM ロールまたは権限が付与されたグループのメンバーである必要があります。ユーザーまたはサービス アカウントがインスタンスに初めてログインした後に、Cloud SQL によってアカウントが作成されます。
IAM データベースの自動認証を使用してログインする
ユーザーまたはアプリケーションに代わって Cloud SQL インスタンスに対する認証を自動的に処理するように Cloud SQL コネクタを構成できます。コネクタには Cloud SQL Auth Proxy、Go コネクタ、Java コネクタ、Python コネクタがあり、どのコネクタも自動 IAM データベース認証をサポートしています。自動 IAM データベース認証で Cloud SQL コネクタを使用する場合、コネクタの起動に使用する IAM アカウントは、データベース認証と同じアカウントにする必要があります。
IAM データベースの自動認証でログインするには:
Cloud SQL Auth Proxy
Google Cloud に対して認証を行います。
ユーザー
アプリケーションのデフォルト認証情報(ADC)を使用して Google Cloud に対する認証を行います。
gcloud auth application-default login
コマンドを使用します。詳細については、アプリケーションのデフォルト認証情報を設定するをご覧ください。サービス アカウント
サービス アカウントで ADC を使用して Google Cloud に対する認証を行うには、サービス アカウントの権限借用を使用するか、サービス アカウント キーを設定します。サービス アカウントの権限借用を使用して認証する場合は、SERVICE_ACCOUNT_EMAIL_ADDRESS を置き換えて次のコマンドを実行します。
gcloud auth application-default login --impersonate-service-account SERVICE_ACCOUNT_EMAIL_ADDRESS
詳細については、アプリケーションのデフォルト認証情報を設定するをご覧ください。
--auto-iam-authn
フラグを使用して Cloud SQL Auth Proxy を起動します。INSTANCE_CONNECTION_NAME は、Cloud SQL インスタンスの識別に使用される接続文字列に置き換えます。デフォルトの MySQL ポート以外のポートを使用している場合は、ポート番号を指定します。この文字列の見つけ方および作成方法の詳細については、Cloud SQL Auth Proxy の認証オプションをご覧ください。./cloud-sql-proxy --auto-iam-authn INSTANCE_CONNECTION_NAME
プロキシを開始する方法の詳細については、Cloud SQL Auth Proxy を起動するをご覧ください。
Cloud SQL Auth Proxy を使用してインスタンスに接続する準備ができたら、
mysql
クライアントでログインします。次のように置き換えます。- HOSTNAME: Cloud SQL Auth Proxy で使用される IP アドレス。デフォルトでは、Cloud SQL Auth Proxy は localhost アドレス
127.0.0.1
を使用しますが、Cloud SQL Auth Proxy の起動時に別の IP アドレスを割り当てることができます。 - USERNAME: IAM ユーザー アカウントの場合、これはユーザーのメールアドレスから
@
記号とドメイン名を除いたものになります。たとえば、test-user@example.com
の場合は「test-user
」と入力します。サービス アカウントの場合は、@project-id.iam.gserviceaccount.com
サフィックスを除いたサービス アカウントのメールアドレスになります。 - PORT_NUMBER: 省略可。インスタンスの接続文字列に別のポートを指定した場合は、そのポート番号を指定します。
次のコマンドを実行します。
mysql --host=HOSTNAME \ --user=USERNAME \ --port=PORT_NUMBER
Cloud SQL Auth Proxy に接続する方法の詳細については、mysql クライアントと接続するをご覧ください。
- HOSTNAME: Cloud SQL Auth Proxy で使用される IP アドレス。デフォルトでは、Cloud SQL Auth Proxy は localhost アドレス
Go
Java JDBC
Java R2DBC
Python
手動 IAM データベース認証を使用してログインする
ユーザーまたはアプリケーションは、Google Cloud から手動でアクセス トークンをリクエストしてデータベースに提示することで、IAM を使用してデータベースを認証できます。gcloud CLI を使用すると、データベースにログインするための Cloud SQL Admin API スコープで OAuth 2.0 トークンを明示的にリクエストできます。手動 IAM データベース認証でデータベース ユーザーとしてログインする場合は、メールアドレスをユーザー名として使用し、アクセス トークンをパスワードとして使用します。この方法は、データベースへの直接接続または Cloud SQL コネクタで使用できます。
この手順では、Google Cloud に対して認証を行い、アクセス トークンをリクエストします。このトークンを IAM データベース ユーザーのパスワードとして渡してデータベースに接続します。Cloud SQL Auth Proxy を使用せずに接続する手順は次のとおりです。
以下のことを行う必要があります。
- --enable-cleartext-plugin
mysql
オプションを使用する。 - パブリック IP を使用してインスタンスに接続する場合は、インスタンスへの外部アクセスを承認する。詳細については、マシンの IP アドレスをパブリック IP として承認するをご覧ください。
- プライベート IP を使用してインスタンスに接続する場合は、Virtual Private Cloud(VPC)ネットワーク内でコマンドを実行する。
gcloud sql generate-login-token
コマンドを使用して認証トークンを生成する。
手動 IAM データベース認証でログインするには:
gcloud
Google Cloud に対して認証を行います。
ユーザー
IAM 認証に
gcloud auth login
を使用します。詳細については、ユーザー アカウントを使用して承認するをご覧ください。サービス アカウント
IAM 認証に
gcloud auth activate-service-account
を使用します。詳細については、サービス アカウントを使用して承認するをご覧ください。アクセス トークンをリクエストして、クライアントでログインします。
次のように置き換えます。
- HOSTNAME: インスタンスの IP アドレス(パブリック IP アドレスまたはプライベート IP アドレス)。
- USERNAME: IAM ユーザー アカウントの場合、これはユーザーのメールアドレスから
@
記号とドメイン名を除いたものになります。たとえば、test-user@example.com
の場合は「test-user
」と入力します。サービス アカウントの場合は、@project-id.iam.gserviceaccount.com
サフィックスを除いたサービス アカウントのメールアドレスになります。
MYSQL_PWD=`gcloud sql generate-login-token` \ mysql --enable-cleartext-plugin \ --ssl-mode=REQUIRED \ --host=HOSTNAME \ --user=USERNAME
Cloud SQL インスタンスの
ssl_mode
がTRUSTED_CLIENT_CERTIFICATE_REQUIRED
に構成されている場合は、ログイン時にクライアント証明書とクライアント キーを含めます。また、相互認証のためにクライアントがサーバーの ID を確認できるように、サーバー証明書server-ca.pem
を指定します。次に例を示します。MYSQL_PWD=`gcloud sql generate-login-token` \ mysql --enable-cleartext-plugin \ --ssl-mode=VERIFY_CA \ --ssl-ca=server-ca.pem \ --ssl-cert=client-cert.pem \ --ssl-key=client-key.pem \ --host=HOSTNAME \ --user=USERNAME
クライアント証明書と鍵を作成する方法については、クライアント証明書をご覧ください。
次のステップ
- IAM データベース認証について学習する。
- 監査ログを有効にしてログイン情報を確認する方法を学習する。
- Cloud SQL IAM データベース認証を使用するユーザーとサービス アカウントを作成する方法を学習する。
- ユーザーまたはサービス アカウントに IAM バインディングを追加する方法を学習する。
- IAM データベース認証のユーザー アカウントとサービスを管理する方法を学習する。