관리 ID를 사용하여 Azure SQL에 연결

7736 단어 databaseazure
관리 ID를 사용하여 Azure App Service 앱을 Azure SQL 데이터베이스에 연결하면 연결 문자열의 자격 증명과 같은 앱의 비밀이 제거되므로 앱이 더 안전해집니다. 이 게시물은 이를 설정하는 방법을 설명합니다. 대부분 official docs에서 가져왔지만 프로세스를 이해하는 데 유용하다고 생각한 몇 가지 추가 정보와 주의 사항이 있으면 다른 사람들도 마찬가지일 것입니다.

1. Azure SQL 데이터베이스에서 AAD 인증 활성화



관리 ID 인증을 사용하려면 AAD 사용자(또는 그룹)를 서버 관리자로 할당해야 합니다. Azure 구독에 등록하는 데 사용한 Microsoft 계정일 수 없습니다. AAD에서 만든 사용자여야 합니다. 로컬로 테스트하려면 AAD에서 새 사용자를 만들 수 있지만 만료된 암호 오류를 방지하려면 해당 사용자로 로그인하고 기본 암호를 변경해야 합니다.

Azure Portal을 통해 AAD 인증을 설정하려면 SQL Server 리소스 > Azure Active Directory(설정 아래) > 관리자 설정(AAD 사용자 또는 그룹 선택) > 저장으로 이동합니다.

2. 토큰을 요청하는 코드 수정



데이터베이스 연결에 추가하는 AAD에서 SQL 데이터베이스 액세스에 대한 토큰을 요청하도록 코드를 수정해야 합니다. 여기에서 Azure.Identity.DefaultAzureCredential 클래스를 사용하세요. 개발 및 프로덕션에서 로컬로 작업할 수 있을 만큼 유연하기 때문입니다. App Service에서 실행할 때 앱의 시스템 할당 관리 ID를 사용합니다. 로컬에서 실행할 때 Visual Studio, VS Code, Azure CLI 또는 Azure PS의 로그인 ID를 사용하여 토큰을 얻을 수 있습니다.

Be careful during local development using DefaultAzureCredential as the user you are signed in as in Visual Studio or VS Code might not have access to the database, as it is likely you won't be signed in as the AAD server admin you set up in step 1. In this case you can simply repeat step 4 below for the identity you are signed in as.

When running locally using DefaultAzureCredential I also saw some errors to do with expired refresh tokens. Re-signing in inside Visual Studio or Azure CLI (az login) should fix this.



토큰을 요청하는 코드는 Entity Framework를 사용하는 경우 일반적으로 DbContext 개체에 들어갑니다. 아래 코드 예제는 Entity Framework를 사용하는 ASP.NET Framework 앱용입니다.

public MyDatabaseContext() : base("name=MyDbConnection")
{
    var conn = (System.Data.SqlClient.SqlConnection)Database.Connection;
    var credential = new Azure.Identity.DefaultAzureCredential();
    var token = credential.GetToken(new Azure.Core.TokenRequestContext(new[] { "https://database.windows.net/.default" }));
    conn.AccessToken = token.Token;
}


참고https://database.windows.net/.default는 Azure SQL 데이터베이스의 토큰 엔드포인트입니다. 이 문자열은 Azure Database for MySQL( https://ossrdbms-aad.database.windows.net ) 또는 Azure Database for PostgreSQL( https://ossrdbms-aad.database.windows.net )을 사용하는 경우 다릅니다.

3. 연결 문자열 업데이트



사용자 이름/암호 대신 AAD 관리 ID 인증을 사용하도록 연결 문자열을 업데이트합니다. 이것이 관리 ID 메커니즘을 사용하는 요점입니다!

설정에 따라 web.config , App Service 앱 설정 또는 둘 다에서 연결 문자열을 다음으로 바꿉니다.

server=tcp:<server-name>.database.windows.net;database=<db name>;

serverdatabase 부품만 필요한 방법에 유의하십시오. 인증 방법은 AAD 관리 ID로 유추됩니다. 또한 시스템 할당 관리 ID를 사용하는 경우 사용자 ID( User ID 또는 UID )를 지정할 필요가 없습니다(사용자 할당 관리 ID를 사용하는 경우 사용자 ID를 지정해야 함). 이는 Azure SQL에 대한 AAD 인증이 포함된 사용자를 사용하기 때문입니다. 이는 서버 관리자 로그인과 데이터베이스 사용자가 모두 있는 기존 SQL Server 접근 방식과 다릅니다. 이에 대한 자세한 내용은 여기에서 확인할 수 있습니다. https://docs.microsoft.com/en-us/sql/relational-databases/security/contained-database-users-making-your-database-portable?view=sql-server-ver16

4. 관리 ID를 사용하여 SQL Database에 연결하도록 App Service 앱 구성



마지막 단계는 App Service의 관리 ID에 SQL Database에 액세스할 수 있는 권한을 부여하는 것입니다. 데이터베이스에서 관리 ID를 사용자로 추가하여 이 작업을 수행합니다.

Note: Your App Service app must have a managed identity by this point. Create one if it doesn't already exist. E.g. az webapp identity assign --resource-group ... --name <app-name>



다음 SQL 명령을 실행하여 앱에 필요한 최소 권한을 부여하세요. (대괄호가 필요합니다):

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


여기서 identity-name은 AAD의 관리 ID 이름입니다. 시스템 할당 ID인 경우 이름은 항상 App Service 앱의 이름과 동일합니다. AAD 그룹의 경우 그룹의 표시 이름을 사용합니다.

사용 가능한 역할의 자세한 목록은 다음을 참조하십시오. https://docs.microsoft.com/en-us/sql/relational-databases/security/authentication-access/database-level-roles?view=sql-server-ver16#fixed-database-roles

To run the SQL commands above you can sign in to the SQL Database via the Azure Cloud Shell using your AAD server admin's credentials created in step 1. E.g:
sqlcmd -S <server-name>.database.windows.net -d <db-name> -U <aad-user-name> -P "<aad-password>" -G -l 30



마지막으로 2단계에서 변경한 코드를 사용하여 앱을 Azure에 게시하면 이제 비밀이 보이지 않는 관리 ID를 통해 데이터베이스에 성공적으로 연결할 수 있습니다. 나는 그것에 마실 것이다 ☕.

좋은 웹페이지 즐겨찾기