LoginSignup
0
1

More than 1 year has passed since last update.

TerraformでAmazon Auroraクラスタを自動構築する(クライアント接続用ユーザ作成編)

Posted at

はじめに

Amazon Aurora記事第3弾。

今回は作成したAuroraクラスタにIAMポリシーを作成し、ポリシーベースで認証を行う。
MySQL/PostgreSQLのユーザID/パスワードを使わない、よりセキュアなアクセス方法だ。

今回の記事も第2弾同様、前回記事で作ったTerraformのHCLに付け加える前提であるため、実際に触ってみる場合はまずは前回・前々回記事から読んでいただきたい。

なお、今回参考にしたのは公式のユーザガイドなので、先に目を通しておくと良い。

MySQLユーザの作成

AuroraのIAM認証では、IAMポリシーとDBMSのユーザを紐づける。
まずはMySQLのユーザを作成しておこう。
今回はリーダインスタンスに接続する前提のユーザであるため、GRANTにはSELECTのみ指定しているが、必要に応じて変更しよう。

CREATE USER app_user IDENTIFIED WITH AWSAuthenticationPlugin AS 'RDS'; 
GRANT SELECT ON COMPANY.* TO app_user;

Terraformでまとめてユーザを作りたい場合は、第1回の記事のaurora_create_db.sqlに追記をする。

IAMポリシー

上記で作ったユーザについて、以下のIAMポリシーを作成する。
これを、ローカル接続する場合は接続するIAMユーザー、ECS等のAWSリソースに設定する場合は、各サービスの信頼関係ポリシーを持ったロールにアタッチすれば良い。

resource "aws_iam_policy" "aurora_authentication" {
  name   = local.iam_aurora_authentication_policy_name
  policy = data.aws_iam_policy_document.aurora_authentication.json
}

data "aws_iam_policy_document" "aurora_authentication" {
  statement {
    effect = "Allow"

    actions = [
      "rds-db:connect",
    ]

    resources = [
      "arn:aws:rds-db:${data.aws_region.current.name}:${data.aws_caller_identity.self.account_id}:dbuser:${aws_rds_cluster.example.cluster_resource_id}/app_user",
    ]
  }
}

その他注意すること

アプリケーションから各種SDKのBuildAuthTokenのAPIを使って接続する場合、公式のユーザーガイドに記載された証明書をインポートしておく必要がある。

例えば、DockerでGolangのSDKで接続をする場合、以下のようにDockerfileでビルド時に証明書をダウンロードする。

RUN mkdir /usr/local/share/ca-certificates
RUN wget https://truststore.pki.rds.amazonaws.com/ap-northeast-1/ap-northeast-1-bundle.pem -P /usr/local/share/ca-certificates
RUN apk add --no-cache ca-certificates && \ 
    update-ca-certificates

これで、セキュアなで冪等性の高い認証方法でAuroraへのアクセスができるようになった!

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1