Terraform에서 AWS RDS의 DB 사용자 관리

소개



MySQL이나 PostgreSQL의 사용자를 Terraform로 관리할 때의 비망록으로서 이 기사를 남깁니다.

전제 조건



기초는 AWS, DB는 PostgreSQL에서 DB가있는 네트워크는 내부 네트워크에서 인터넷 액세스가 없습니다. Terraform은 로컬 PC(Mac)에서 실행해야 합니다.

실행 방법



Terraform



여기 의 PostgreSQL용 Terraform provider를 사용해 실행합니다.
provider "postgresql" {
  scheme   = "awspostgres" # AWSを使う場合はこれを指定
  host     = var.db_host
  username = "postgres"
  port     = 5432
  password = var.db_password

  superuser = false
}


버전은 다음과 같이 지정합니다.
  required_providers {
    postgresql = {
      source  = "cyrilgdn/postgresql"
      version = "1.11.2"
    }
  }

PostgreSQL 사용자를 추가합니다.
resource "postgresql_role" "my_role" {
  name     = "my_role"
  login    = true
  password = var.my_role_password
}

resource "postgresql_grant" "readonly_my_role" {
  database    = "test_db"
  role        = postgresql_role.my_role.name
  schema      = "public"
  object_type = "table"
  privileges  = ["SELECT"]
}

지역



로컬에서 직접 PostgreSQL을 건드릴 수 없기 때문에, 발판 서버를 경유해 SSH 터널링하는 것으로, 액세스합니다.


ssh 터널링에 대한 명령을 실행합니다.
# ssh -N -L [ローカル側で転送に使用するPort(10000〜60000)]:[DBのHostName]:[DBが解放しているPort] -i [IdentityFile(秘密鍵のパス)] -p [踏み台が解放しているPort] [踏み台のUser]@[踏み台のHostName]

ssh -N -L 5432:test_db.XXX.ap-northeast-1.rds.amazonaws.com:5432 -i ~/.ssh/bastion.pem -p 22 ec2-user@XXX


나중에 설명하는 SSL 인증서 오류로 인해 호스트를 가장합니다.
/etc/hostslocalhost 127.0.0.1 test_db.XXX.ap-northeast-1.rds.amazonaws.com를 추가하십시오.

이제 Terraform을 실행하면 PostgreSQL에 사용자를 추가 할 수 있습니다.

Tips



SSL 인증서 오류



위에서 설명한 ssh 터널링 명령을 실행하고,
ssh -N -L 5432:test_db.XXX.ap-northeast-1.rds.amazonaws.com:5432 -i ~/.ssh/bastion.pem -p 22 ec2-user@XXX

ssh 터널링에서 localhost5432 포트에 액세스하면 PostgreSQL에 액세스할 수 있게 되었으므로 Terraform의 provider 호스트 이름을 locahost로 지정하여 Terraform을 실행시킵니다.
provider "postgresql" {
  scheme   = "awspostgres" # AWSを使う場合はこれを指定
  host     = "localhost"
  username = "postgres"
  port     = 5432
  password = var.db_password

  superuser = false
}

그러면 SSL 인증서 확인에서 호스트 이름이 다르면 오류가 발생합니다.
Error: error detecting capabilities: error PostgreSQL version: x509: certificate is valid for stg-knew-rds.coh5dxpjppgc.ap-northeast-1.rds.amazonaws.com, not localhost

세션 관리자를 사용한 포트 포워드



세션 관리자를 사용하여 포트 포워드를 할 수 없는지 확인했지만,
결국 포트 포워드는 할 수 없었다.

cf. htps : // v.ぁsss d. jp / arc c ぇ s / port fu rwa r ぢ g ushin g- ws-sys m-ma-na-r-se-shin-s-ma r /

좋은 웹페이지 즐겨찾기