Lake Formation에서 권한이 제한된 후에도 IAM 사용자가 Data Catalog 리소스에 액세스할 수 있는 이유는 무엇입니까?

최종 업데이트 날짜: 2021년 3월 25일

AWS Lake Formation의 사용자에 대한 테이블 권한을 제한했습니다(예: ExcludedColumnNames을 사용한 SELECT). 그러나 사용자는 여전히 Amazon Athena를 사용하여 테이블을 쿼리할 수 있습니다.

간략한 설명

Lake Formation은 기본적으로 IAMAllowedPrincipals 그룹에 Super 권한을 부여합니다. 이 권한은 기존의 모든 AWS Glue Data Catalog 리소스에 적용됩니다. IAM 액세스 제어만 사용(Use only IAM access control)이 활성화된 경우에는 Lake Formation이 새 리소스에도 Super 권한을 부여합니다. 즉, AWS Identity and Access Management(IAM) 정책은 Data Catalog 리소스 및 Amazon S3(Amazon Simple Storage Service) 위치에 대한 액세스를 제어합니다. 자세한 내용은 Lake Formation 권한 모델로의 업그레이드에 대한 정보를 참조하세요.

액세스를 제한하려면 새 Data Catalog 리소스 및 기존 Data Catalog 리소스에 대해 Lake Formation 권한 모델을 사용하도록 기본 설정을 변경합니다.

해결 방법

데이터 레이크의 모든 새 데이터베이스 및 테이블에 대한 보안 설정을 업데이트하려면 Data Catalog 설정 변경을 참조하세요.

특정 새 리소스에 대해서만 보안 설정을 업데이트하려면 리소스를 생성한 다음 해당 리소스에 대한 사용 권한만 업데이트합니다. 자세한 내용은기존 Data Catalog 리소스 보호를 참조하세요.

기본 보안 설정의 변경 내용은 보안 설정을 업데이트한 후에 생성된 리소스에만 적용됩니다.

기존 데이터베이스에 대한 보안 설정을 변경하려면 다음을 수행하여 각 데이터베이스의 IAMAllowedPrincipals에서 권한을 명시적으로 제거합니다.

  1. AWS Lake Formation 콘솔를 엽니다.
  2. 탐색 창의 데이터 카탈로그(Data catalog)에서 데이터베이스(Databases)를 선택합니다.
  3. 업데이트할 데이터베이스 옆의 원을 선택합니다.
  4. 작업(Actions)을 선택하고 편집(Edit)을 선택합니다.
  5. 새로 생성된 테이블에 대한 기본 권한(Default permissions for newly created tables)에서 이 데이터베이스의 새 테이블에 대해서만 IAM 액세스 제어 사용(Use only IAM access control for new tables in this database)을 지웁니다.
  6. 저장(Save)을 선택합니다.
  7. 데이터베이스(Databases) 페이지에서 데이터베이스가 선택되어 있는지 확인합니다. 작업(Actions)을 선택하고 취소(Revoke)를 선택합니다.
  8. 권한 취소(Revoke permissions) 대화 상자의 IAM 사용자 및 역할(IAM users and roles) 목록에서 그룹(Group) 머리글로 스크롤한 다음 IAMAllowedPrincipals를 선택합니다.
  9. 데이터베이스 권한(Database permissions)에서 Super가 선택되어 있는지 확인한 다음 취소(Revoke)를 선택합니다.

기존 테이블에 대한 보안 설정을 변경하려면 다음을 수행하여 각 테이블의 IAMAllowedPrincipals에서 권한을 제거합니다.

  1. AWS Lake Formation 콘솔를 엽니다.
  2. 탐색 창에서 테이블(Tables)을 선택합니다.
  3. 테이블(Tables) 페이지에서 업데이트할 테이블 옆의 원을 선택합니다.
  4. 작업(Actions)을 선택하고 취소(Revoke)를 선택합니다.
  5. 권한 취소(Revoke permissions) 대화 상자의 IAM 사용자 및 역할(IAM users and roles) 목록에서 그룹(Group) 머리글로 스크롤한 다음 IAMAllowedPrincipals를 선택합니다.
  6. 테이블 권한(Table permissions)에서 Super가 선택되어 있는지 확인한 다음 취소(Revoke)를 선택합니다.

참고: 데이터베이스 또는 테이블에 대한 Amazon S3 경로가 Lake Formation에 등록되어 있는지 확인하세요.

기존 리소스에 대한 보안 설정을 변경한 후 IAM 사용자 또는 역할에 테이블 권한을 부여합니다. 이 작업은 Lake Formation 콘솔 또는 AWS CLI(AWS 명령줄 인터페이스)를 사용하여 수행할 수 있습니다.

참고: AWS CLI 명령을 실행할 때 오류가 발생하는 경우 최신 버전의 AWS CLI를 사용하고 있는지 확인하세요.

다음은 특정 열에 SELECT 권한을 부여하는 CLI 명령의 예입니다.

특정 열에서만 SELECT 허용:

aws lakeformation grant-permissions --principal DataLakePrincipalIdentifier=arn:aws:iam::111122223333:user/datalake_user1 --permissions "SELECT"  --resource '{ "TableWithColumns": {"DatabaseName":"retail", "Name":"inventory", "ColumnNames": ["prodcode","location","period","withdrawals"]}}'

열 제외(ExcludedColumnNames에서 지정된 열을 제외한 모든 열에서 SELECT 허용):

aws lakeformation grant-permissions --principal DataLakePrincipalIdentifier=arn:aws:iam::111122223333:user/datalake_user1 --permissions "SELECT"  --resource '{ "TableWithColumns": {"DatabaseName":"retail", "Name":"inventory", "ColumnWildcard": {"ExcludedColumnNames": ["location"]}}}'

Lake Formation 작업을 수행하려면 보안 주체에게 Lake Formation 및 IAM 권한이 있어야 합니다. 그뿐 아니라, Athena의 테이블을 쿼리하려면 사용자에게 Athena 쿼리를 실행할 수 있는 권한이 있어야 합니다. 예를 들어 Lake Formation이 권한을 관리할 때 Athena에서 테이블을 쿼리하려면 사용자에게 다음 IAM 권한이 있어야 합니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "minimumAWSGlueLakeFormationAthenapermissiontorunselectqueryontable",
            "Effect": "Allow",
            "Action": [
                "lakeformation:GetDataAccess",
                "glue:SearchTables",
                "glue:GetTables",
                "glue:GetPartitions",
                "glue:GetDatabases",
                "glue:GetTable",
                "glue:GetDatabase",
                "athena:GetNamespace",
                "athena:ListWorkGroups",
                "athena:GetCatalogs",
                "athena:GetNamespaces",
                "athena:GetExecutionEngine",
                "athena:GetExecutionEngines",
                "athena:GetTables",
                "athena:GetTable"
            ],
            "Resource": "*"
        },
        {
            "Sid": "AthenaPermissionToRunQueryInAWorkergroup",
            "Effect": "Allow",
            "Action": [
                "athena:StartQueryExecution",
                "athena:GetQueryResults",
                "athena:DeleteNamedQuery",
                "athena:GetNamedQuery",
                "athena:ListQueryExecutions",
                "athena:StopQueryExecution",
                "athena:GetQueryResultsStream",
                "athena:ListNamedQueries",
                "athena:CreateNamedQuery",
                "athena:GetQueryExecution",
                "athena:BatchGetNamedQuery",
                "athena:BatchGetQueryExecution"
            ],
            "Resource": [
                "arn:aws:athena:*:*:workgroup/*"
            ]
        },
        {
            "Sid": "allowS3PermissionToSaveAthenaQueryResults",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:ListBucketMultipartUploads",
                "s3:AbortMultipartUpload",
                "s3:CreateBucket",
                "s3:ListBucket",
                "s3:GetBucketLocation",
                "s3:ListMultipartUploadParts"
            ],
            "Resource": [
                "arn:aws:s3:::aws-athena-query-results-*"
            ]
        }
    ]
}

이 문서가 도움이 되었나요?


결제 또는 기술 지원이 필요하세요?