Использование AWS Lake Formation с CloudFormation
Я хочу настроить дополнительный уровень безопасности поверх своего S3 / Glue Data Lake с помощью Lake Formation. Я хочу делать как можно больше с помощью Infrastructure as Code, поэтому, естественно, я изучил документацию CloudFormation реализации Lake Formation, которая в настоящее время, честно говоря, очень бесполезна.
У меня простой пример использования: предоставление прав администратора одному пользователю IAM в одной корзине . Может ли кто-нибудь помочь мне с примером или чем-то подобным?
1 ответ
Вот что я узнал:
В настоящее время возможна установка местоположения озера данных и предоставление разрешений на доступ к вашим базам данных. К сожалению, похоже, что не поддерживает
Data locations
пока что. Вы должны будете предоставить свой
IAM Role
доступ к
S3 Bucket
вручную в консоли AWS под
Lake Formation -> Data locations
. Я обновлю ответ, как только
CloudFormation
поддерживает больше.
Это шаблон, который мы используем на данный момент:
DataBucket:
Type: AWS::S3::Bucket
DeletionPolicy: Retain
UpdateReplacePolicy: Retain
Properties:
AccessControl: Private
BucketEncryption:
ServerSideEncryptionConfiguration:
- ServerSideEncryptionByDefault:
SSEAlgorithm: AES256
VersioningConfiguration:
Status: Enabled
LifecycleConfiguration:
Rules:
- Id: InfrequentAccessRule
Status: Enabled
Transitions:
- TransitionInDays: 30
StorageClass: INTELLIGENT_TIERING
GlueDatabase:
Type: AWS::Glue::Database
Properties:
CatalogId: !Ref AWS::AccountId
DatabaseInput:
Name: !FindInMap [Environment, !Ref Environment, GlueDatabaseName]
Description: !Sub Glue Database ${Environment}
GlueDataAccessRole:
Type: AWS::IAM::Role
Properties:
ManagedPolicyArns:
- arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole
AssumeRolePolicyDocument:
Version: 2012-10-17
Statement:
- Sid: ''
Effect: Allow
Principal:
Service: glue.amazonaws.com
Action: sts:AssumeRole
Policies:
- PolicyName: AccessDataBucketPolicy
PolicyDocument:
Version: 2012-10-17
Statement:
- Effect: Allow
Action:
- glue:*
- lakeformation:*
Resource: '*'
- Effect: Allow
Action:
- s3:GetObject
- s3:PutObject
- s3:ListBucket
- s3:DeleteObject
Resource:
- !Sub ${DataBucket.Arn}
- !Sub ${DataBucket.Arn}/*
DataBucketLakeFormation:
Type: AWS::LakeFormation::Resource
Properties:
ResourceArn: !GetAtt DataBucket.Arn
UseServiceLinkedRole: true
DataLakeFormationPermission:
Type: AWS::LakeFormation::Permissions
Properties:
DataLakePrincipal:
DataLakePrincipalIdentifier: !GetAtt GlueDataAccessRole.Arn
Permissions:
- ALL
Resource:
DatabaseResource:
Name: !Ref GlueDatabase
DataLocationResource:
S3Resource: !Ref DataBucket