AWS SDK for .NET 및 IAM 인증을 사용하여 DB 인스턴스에 연결

AWS SDK for .NET 및 IAM 인증을 사용하여 DB 인스턴스에 연결 (Connecting to your DB instance using IAM authentication and the AWS SDK for .NET)

AWS SDK for .NET을 사용하여 RDS for MariaDB, MySQL 또는 PostgreSQL DB 인스턴스에 연결할 수 있습니다.

출처: 문서

본문

사전 요구 사항

IAM 인증을 사용하여 DB 인스턴스에 연결하기 위한 사전 요구 사항은 다음과 같습니다.

  • IAM 데이터베이스 인증 활성화 및 비활성화
  • IAM 데이터베이스 액세스용 IAM 정책 생성 및 사용
  • IAM 인증을 사용한 데이터베이스 계정 생성
예시

다음 코드 예시는 인증 토큰을 생성한 다음 이를 사용하여 DB 인스턴스에 연결하는 방법을 보여줍니다.

이 코드 예시를 실행하려면 AWS 사이트에서 찾을 수 있는 AWS SDK for .NET이 필요합니다. AWSSDK.CORE 및 AWSSDK.RDS 패키지가 필요합니다. DB 인스턴스에 연결하려면 DB 엔진용 .NET 데이터베이스 커넥터(MariaDB 또는 MySQL용 MySqlConnector, PostgreSQL용 Npgsql)를 사용합니다.

이 코드는 MariaDB 또는 MySQL DB 인스턴스에 연결합니다. 다음 변수의 값을 필요에 따라 수정합니다.

  • server – 액세스하려는 DB 인스턴스의 엔드포인트
  • user – 액세스하려는 데이터베이스 계정
  • database – 액세스하려는 데이터베이스
  • port – DB 인스턴스에 연결하는 데 사용되는 포트 번호
  • SslMode – 사용할 SSL 모드
    • SslMode=Required를 사용하면 SSL 연결이 SSL 인증서의 엔드포인트에 대해 DB 인스턴스 엔드포인트를 검증합니다.
  • SslCa – Amazon RDS용 SSL 인증서의 전체 경로
    • 인증서를 다운로드하려면 SSL/TLS를 사용하여 DB 인스턴스 또는 클러스터에 대한 연결 암호화를 참조하세요.
참고

인증 토큰을 생성하기 위해 DB 인스턴스 엔드포인트 대신 사용자 지정 Route 53 DNS 레코드를 사용할 수 없습니다.

using System;
using System.Data;
using MySql.Data;
using MySql.Data.MySqlClient;
using Amazon;

namespace ubuntu
{
  class Program
  {
    static void Main(string[] args)
    {
      var pwd = Amazon.RDS.Util.RDSAuthTokenGenerator.GenerateAuthToken(RegionEndpoint.USEast1, "mysqldb.123456789012.us-east-1.rds.amazonaws.com", 3306, "jane_doe");
      // for debug only Console.Write("{0}\n", pwd);  //this verifies the token is generated

      MySqlConnection conn = new MySqlConnection($"server=mysqldb.123456789012.us-east-1.rds.amazonaws.com;user=jane_doe;database=mydB;port=3306;password={pwd};SslMode=Required;SslCa=full_path_to_ssl_certificate");
      conn.Open();

      // Define a query
      MySqlCommand sampleCommand = new MySqlCommand("SHOW DATABASES;", conn);

      // Execute a query
      MySqlDataReader mysqlDataRdr = sampleCommand.ExecuteReader();

      // Read all rows and output the first column in each row
      while (mysqlDataRdr.Read())
        Console.WriteLine(mysqlDataRdr[0]);

      mysqlDataRdr.Close();
      // Close connection
      conn.Close();
    }
  }
}

이 코드는 PostgreSQL DB 인스턴스에 연결합니다. 다음 변수의 값을 필요에 따라 수정합니다.

  • Server – 액세스하려는 DB 인스턴스의 엔드포인트
  • User ID – 액세스하려는 데이터베이스 계정
  • Database – 액세스하려는 데이터베이스
  • Port – DB 인스턴스에 연결하는 데 사용되는 포트 번호
  • SSL Mode – 사용할 SSL 모드
참고

인증 토큰을 생성하기 위해 DB 인스턴스 엔드포인트 대신 사용자 지정 Route 53 DNS 레코드를 사용할 수 없습니다.

using System;
using System.Data;
using Npgsql;
using Amazon;

namespace ubuntu
{
  class Program
  {
    static void Main(string[] args)
    {
      var pwd = Amazon.RDS.Util.RDSAuthTokenGenerator.GenerateAuthToken(RegionEndpoint.USEast1, "rdspostgres.123456789012.us-east-1.rds.amazonaws.com", 5432, "jane_doe");
      // for debug only Console.Write("{0}\n", pwd);  //this verifies the token is generated

      NpgsqlConnection conn = new NpgsqlConnection($"Server=rdspostgres.123456789012.us-east-1.rds.amazonaws.com;User ID=jane_doe;Database=mydb;Port=5432;Password={pwd};SSL Mode=Require;");
      conn.Open();

      // Define a query
      NpgsqlCommand sampleCommand = new NpgsqlCommand("SELECT version();", conn);

      // Execute a query
      NpgsqlDataReader pgDataRdr = sampleCommand.ExecuteReader();

      // Read all rows and output the first column in each row
      while (pgDataRdr.Read())
        Console.WriteLine(pgDataRdr[0]);

      pgDataRdr.Close();
      // Close connection
      conn.Close();
    }
  }
}

더 알아보기 (Learn more)