はじめに
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へのアクセスができるようになった!