Node.js에서 JavaScript SDK를 사용하여 Azure Data Lake Storage에서 ACL 관리
이 문서에서는 Node.js를 사용하여 디렉터리 및 파일의 액세스 제어 목록을 가져오고, 설정하고, 업데이트하는 방법을 설명합니다.
패키지(노드 패키지 관리자) | 샘플 | 피드백 제공
필수 조건
- Azure 구독 - 체험 구독 만들기.
- HNS(계층 구조 네임스페이스)를 사용하도록 설정된 Azure Storage 계정입니다. 이러한 지침에 따라 라이브러리를 만듭니다.
- Node.js LTS
- Azure CLI 버전
2.6.0
이상. - 다음 보안 권한 중 하나입니다.
- 대상 컨테이너, 스토리지 계정, 부모 리소스 그룹 또는 구독으로 범위가 할당된 Storage Blob 데이터 소유자 역할이 할당된 프로비전된 Microsoft Entra ID 보안 주체입니다.
- ACL 설정을 적용하려는 대상 컨테이너 또는 디렉터리를 소유하는 담당 사용자. ACL을 재귀적으로 설정하기 위해 대상 컨테이너 또는 디렉터리의 모든 자식 항목을 포함합니다.
- 스토리지 계정 키.
프로젝트 설정
이 섹션에서는 JavaScript용 Azure Data Lake Storage 클라이언트 라이브러리를 사용하는 프로젝트를 준비하는 방법을 안내합니다.
패키지 설치
npm install
명령을 사용하여 Azure Data Lake Storage 및 Azure ID 클라이언트 라이브러리용 패키지를 설치합니다. Azure 서비스에 대한 암호 없는 연결에는 @azure/ID 패키지가 필요합니다.
npm install @azure/storage-file-datalake
npm install @azure/identity
모듈 로드
파일 맨 위에 다음 코드를 추가하여 필요한 모듈을 로드합니다.
const {
AzureStorageDataLake,
DataLakeServiceClient,
StorageSharedKeyCredential
} = require("@azure/storage-file-datalake");
const { DefaultAzureCredential } = require('@azure/identity');
계정에 연결
이 문서의 코드 예제를 실행하려면 스토리지 계정을 나타내는 DataLakeServiceClient 인스턴스를 만들어야 합니다. Microsoft Entra ID 자격 증명 또는 계정 키를 사용하여 클라이언트 개체를 인증할 수 있습니다.
JavaScript용 Azure ID 클라이언트 라이브러리를 사용하여 Microsoft Entra ID로 애플리케이션을 인증할 수 있습니다.
참고 항목
Microsoft Entra ID를 사용하여 액세스를 권한 부여하는 경우 보안 주체에 Storage Blob 데이터 소유자 역할이 할당되었는지 확인합니다. ACL 사용 권한을 적용하는 방법과 변경의 영향에 대해 자세히 알아보려면 Azure Data Lake Storage의 액세스 제어 모델을 참조하세요.
먼저 다음 Azure RBAC(Azure 역할 기반 액세스 제어) 역할 중 하나를 보안 주체에 할당해야 합니다.
역할 | ACL 설정 기능 |
---|---|
Storage Blob 데이터 소유자 | 계정에 있는 모든 디렉터리 및 파일입니다. |
Storage Blob 데이터 Contributor | 보안 주체가 소유하는 디렉터리와 파일만 해당. |
다음으로 DataLakeServiceClient 인스턴스를 만들고 DefaultAzureCredential 클래스의 새 인스턴스를 전달합니다.
function GetDataLakeServiceClientAD(accountName) {
const dataLakeServiceClient = new DataLakeServiceClient(
`https://${accountName}.dfs.core.windows.net`,
new DefaultAzureCredential()
);
return dataLakeServiceClient;
}
DefaultAzureCredential
을(를) 사용하여 데이터에 대한 액세스 권한을 부여하는 방법에 대한 자세한 내용은 개요: Azure SDK를 사용하여 Azure에 JavaScript 앱 인증을 참조하세요.
디렉터리 ACL 가져오기 및 설정
이 예제에서는 my-directory
라는 디렉터리의 ACL을 가져온 다음 설정합니다. 이 예제에서는 소유 사용자에게 읽기, 쓰기, 실행 권한을 부여하고 소유 그룹에는 읽기 및 실행 권한만 제공하며, 다른 모든 사용자에게는 읽기 권한을 부여합니다.
참고 항목
애플리케이션이 Microsoft Entra ID를 사용하여 액세스를 권한 부여하는 경우 애플리케이션이 액세스를 권한 부여하는 데 사용하는 보안 주체에 Storage Blob 데이터 소유자 역할이 할당되었는지 확인합니다. ACL 사용 권한을 적용하는 방법과 변경의 영향에 대해 자세히 알아보려면 Azure Data Lake Storage의 액세스 제어를 참조하세요.
async function ManageDirectoryACLs(fileSystemClient) {
const directoryClient = fileSystemClient.getDirectoryClient("my-directory");
const permissions = await directoryClient.getAccessControl();
console.log(permissions.acl);
const acl = [
{
accessControlType: "user",
entityId: "",
defaultScope: false,
permissions: {
read: true,
write: true,
execute: true
}
},
{
accessControlType: "group",
entityId: "",
defaultScope: false,
permissions: {
read: true,
write: false,
execute: true
}
},
{
accessControlType: "other",
entityId: "",
defaultScope: false,
permissions: {
read: true,
write: true,
execute: false
}
}
];
await directoryClient.setAccessControl(acl);
}
컨테이너의 루트 디렉터리에 대한 ACL을 가져오고 설정할 수도 있습니다. 루트 디렉터리를 가져오려면 DataLakeFileSystemClient.getDirectoryClient 메서드에 빈 문자열(/
)을 전달합니다.
파일 ACL 가져오기 및 설정
이 예제에서는 upload-file.txt
라는 파일의 ACL을 가져온 다음 설정합니다. 이 예제에서는 소유 사용자에게 읽기, 쓰기, 실행 권한을 부여하고 소유 그룹에는 읽기 및 실행 권한만 제공하며, 다른 모든 사용자에게는 읽기 권한을 부여합니다.
참고 항목
애플리케이션이 Microsoft Entra ID를 사용하여 액세스를 권한 부여하는 경우 애플리케이션이 액세스를 권한 부여하는 데 사용하는 보안 주체에 Storage Blob 데이터 소유자 역할이 할당되었는지 확인합니다. ACL 사용 권한을 적용하는 방법과 변경의 영향에 대해 자세히 알아보려면 Azure Data Lake Storage의 액세스 제어를 참조하세요.
async function ManageFileACLs(fileSystemClient) {
const fileClient = fileSystemClient.getFileClient("my-directory/uploaded-file.txt");
const permissions = await fileClient.getAccessControl();
console.log(permissions.acl);
const acl = [
{
accessControlType: "user",
entityId: "",
defaultScope: false,
permissions: {
read: true,
write: true,
execute: true
}
},
{
accessControlType: "group",
entityId: "",
defaultScope: false,
permissions: {
read: true,
write: false,
execute: true
}
},
{
accessControlType: "other",
entityId: "",
defaultScope: false,
permissions: {
read: true,
write: true,
execute: false
}
}
];
await fileClient.setAccessControl(acl);
}