Azure에서 SQL 연결 문자열의 사용자 이름과 암호를 관리하도록 합니다.

9373 단어 azuredotnet
SQL 데이터베이스에 연결하기 위해 일반적으로 사용자 이름과 암호가 있는 연결 문자열을 사용합니다. 연결 문자열이 stored and distributed securely인지 확인합니다.

그러나 여기서 문제는 보호해야 할 민감한 것을 가진 존재 자체입니다.

"ConnectionStrings": {
    "QuotesDatabase": "Server=tcp:quotetest.database.windows.net,1433;Database=quotes;User Id:<UserName>;Password:<YourPasswordHere>"
  }




Azure SQL은 Azure AD 인증을 지원합니다. 즉, Azure AD의 Managed Identity 기능도 지원합니다. 관리 ID를 사용하면 연결하는 데 더 이상 사용자 ID와 암호가 필요하지 않습니다. 자격 증명은 Azure에서 자동으로 관리되며 Azure AD 인증을 지원하는 리소스에 연결할 수 있습니다.

이 게시물에서는 서비스 ID 관리를 사용하여 Azure에서 실행되는 웹 애플리케이션에서 Azure SQL에 연결하는 방법을 살펴보겠습니다. 일단 설정되면 데이터베이스 서버 세부 정보와 데이터베이스에 연결하기 위한 데이터베이스 이름만 있으면 됩니다.

Azure AD 토큰을 사용하여 SQL에 연결



DefaultAzureCredential from Azure Identity SDK we can retrieve the token from Azure AD을 사용합니다. SqlConnection은 인증을 위해 이 토큰을 사용합니다. 다음은 SqlConnection의 AccessToken 속성이 Azure AD 토큰인 샘플 코드입니다.

var connectionString = Configuration.GetConnectionString("QuotesDatabase");
services.AddTransient(a =>
{
    var sqlConnection = new SqlConnection(connectionString);
    var credential = new DefaultAzureCredential();
    var token = credential
        .GetToken(new Azure.Core.TokenRequestContext(
            new[] { "https://database.windows.net/.default" }));
    sqlConnection.AccessToken = token.Token;
    return sqlConnection;
});


Entity Framework를 사용할 때 EF Core will get full support for Azure AD token access까지 약간의 해결 방법을 사용해야 합니다.
설정하는 가장 쉬운 방법은 EF에 대한 기본 SqlConnection에 대한 토큰을 명시적으로 설정하는 것입니다. 또한 check out this gist 다른 솔루션의 경우.

public QuoteContext(DbContextOptions options) : base(options)
{
    var conn = (Microsoft.Data.SqlClient.SqlConnection)Database.GetDbConnection();
    var credential = new DefaultAzureCredential();
    var token = credential
            .GetToken(new Azure.Core.TokenRequestContext(
                new[] { "https://database.windows.net/.default" }));
    conn.AccessToken = token.Token;
}


관리 ID를 위한 SQL Server 설정



AD ID용 Azure SQL을 관리하려면 Azure 사용자 컨텍스트에서 SQL에 연결해야 합니다. 이를 위해 Azure AD 사용자를 SQL 관리자로 설정하겠습니다. 아래와 같이 데이터베이스 서버에 대한 Azure 디렉터리 관리자 옵션 아래의 Azure 포털에서 수행할 수 있습니다.



SQL AD 관리자 자격 증명을 사용하여 SQL Server Management Studio 또는 sqlcmd을 통해 연결하고 다른 AD ID 액세스 권한을 부여할 수 있습니다. 아래 스크립트는 사용자 'db_datareader, db_datawriter 및 db_ddladmin' 액세스 권한을 부여합니다.

CREATE USER [<identity-name>] FROM EXTERNAL PROVIDER;
ALTER ROLE db_datareader ADD MEMBER [<identity-name>];
ALTER ROLE db_datawriter ADD MEMBER [<identity-name>];
ALTER ROLE db_ddladmin ADD MEMBER [<identity-name>];
GO

<identity-name>는 Azure AD의 관리 ID 이름입니다. 시스템 할당 ID의 경우 이름은 App Service 이름과 동일합니다. Azure AD 그룹일 수도 있습니다(이 경우 그룹 이름 사용). 데이터베이스에 대한 액세스를 관리하는 방법에 대한 여러 옵션을 제공합니다. 로컬 개발의 경우create a separate AD application and use the ClientId/Secret for EnvironmentCredential 모든 개발자를 Azure AD 그룹에 추가하고 AD 그룹에 액세스 권한을 부여하거나 명시적으로 각 사용자를 데이터베이스에 추가할 수 있습니다.

Azure에서 실행되는 SQL 데이터베이스에 연결하기 위해 더 이상 자격 증명이 필요하지 않습니다. 이것은 우리의 애플리케이션을 위해 관리하는 것이 하나의 덜 민감한 정보가 되도록 합니다.

"ConnectionStrings": {
    "QuotesDatabase": "Server=tcp:quotetest.database.windows.net,1433;Database=quotes"
  }


이것이 도움이 되길 바랍니다!

좋은 웹페이지 즐겨찾기