如何通过Boto3为IAM组授予或撤销AWS Lake Formation权限?
解决AWS Lake Formation通过Boto3/CLI给IAM组授权报错的问题
问题原因
AWS Lake Formation控制台会自动处理IAM组的标识符转换,但直接调用API(Boto3/CLI)时,必须明确指定主体类型为IAM_GROUP,并且使用IAM组的ARN作为主体标识符,而非组名。如果只传组名或主体类型指定错误,就会触发"IAM组不被支持"的错误。
解决方案
1. AWS CLI正确命令示例
授予权限
aws lakeformation grant-permissions \ --principal DataLakePrincipalIdentifier=arn:aws:iam::123456789012:group/your-iam-group-name \ --resource '{ "Table": { "DatabaseName": "your-db", "Name": "your-table" } }' \ --permissions SELECT DESCRIBE
撤销权限
aws lakeformation revoke-permissions \ --principal DataLakePrincipalIdentifier=arn:aws:iam::123456789012:group/your-iam-group-name \ --resource '{ "Table": { "DatabaseName": "your-db", "Name": "your-table" } }' \ --permissions SELECT DESCRIBE
替换说明:
123456789012:你的AWS账户IDyour-iam-group-name:目标IAM组名称your-db/your-table:对应的Lake Formation数据库和表
2. Boto3正确代码示例
import boto3 lf_client = boto3.client('lakeformation') # 授予权限 lf_client.grant_permissions( Principal={ 'DataLakePrincipalIdentifier': 'arn:aws:iam::123456789012:group/your-iam-group-name' }, Resource={ 'Table': { 'DatabaseName': 'your-db', 'Name': 'your-table' } }, Permissions=['SELECT', 'DESCRIBE'] ) # 撤销权限 lf_client.revoke_permissions( Principal={ 'DataLakePrincipalIdentifier': 'arn:aws:iam::123456789012:group/your-iam-group-name' }, Resource={ 'Table': { 'DatabaseName': 'your-db', 'Name': 'your-table' } }, Permissions=['SELECT', 'DESCRIBE'] )
关键注意事项
- 必须使用IAM组的完整ARN,不能仅用组名,否则API无法识别正确主体类型。
- 确认执行CLI/Boto3命令的身份拥有
lakeformation:GrantPermissions/lakeformation:RevokePermissions权限,以及对目标资源的相关操作权限。
内容的提问来源于stack exchange,提问作者Caio Ferreira
相关产品推荐
相关产品推荐

