如何使用 IAM 限制对 Athena 资源的访问?

2 分钟阅读
0

我想使用 AWS Identity and Access Management (IAM) 限制对 Amazon Athena 查询和资源的访问。

简短描述

您可以使用 IAM 策略实体(用户或角色)来限制或允许访问 Athena 资源,例如查询和 AWS 服务。

**注意:**确保遵循 IAM 中的安全最佳实践

解决方法

请遵循以下准则,为您的用例检查或提供 Athena 权限。

访问 Amazon S3 存储桶位置

Athena 查询必须有权访问 Amazon Simple Storage Service (Amazon S3) 源数据存储桶和查询结果存储桶位置。

提供对 S3 存储桶位置访问权限的 IAM 策略示例:

 {
            "Sid": "BaseQueryResultsPermissions",
            "Effect": "Allow",
            "Action": [
               "s3:GetBucketLocation",
               "s3:GetObject",
               "s3:ListBucket",
               "s3:ListBucketMultipartUploads",
               "s3:ListMultipartUploadParts",
               "s3:AbortMultipartUpload",
               "s3:CreateBucket",
               "s3:PutObject",
               "s3:PutBucketPublicAccessBlock"
            ],
            "Resource": [
               "arn:aws:s3:::Query-Result-Bucket-Name",
               "arn:aws:s3:::Query-Result-Bucket-Name/"
            ]
        }

**注意:**将 Query-Result-Bucket-Name 替换为您的存储桶名称。

如果您的查询无权访问 S3 源和查询结果存储桶,则可能会收到 Access Denied(访问被拒绝)错误。有关详细信息,请参阅为什么我在 Amazon Athena 中运行查询时出现“Access Denied”(访问被拒绝)错误?

Amazon S3 存储桶的权限

Athena 查询还必须拥有对 Amazon S3 存储桶的权限。

向 S3 存储桶授予权限的 IAM 策略示例:

{
            "Sid": "BaseAthenaExamplesPermissions",
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::Glue-Database-Warehouse-Location",
                "arn:aws:s3:::Glue-Database-Warehouse-Location/",
                "arn:aws:s3:::Glue-Table-Location",
                "arn:aws:s3:::Glue-Table-Location/"
            ]
        },
        {
            "Sid": "BaseS3BucketPermissions",
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetBucketLocation",
                "s3:ListAllMyBuckets"
            ],
            "Resource": [
                ""
            ]
        }

**注意:**将 Glue-Database-Warehouse-LocationGlue-Table-Location 替换为您的变量。

如果您使用 AWS Key Management Service (AWS KMS) 密钥提供加密,请参阅支持的 Amazon S3 加密选项

访问 Athena 工作组

您可以使用工作组控制查询访问权限和成本。查看 IAM 策略示例,您可以使用这些策略为 Athena 查询提供工作组访问权限。

访问 Glue Data Catalog 数据库和表

您可以对 AWS Glue Data Catalog 中的数据库和表使用精细的访问控制

提供 Data Catalog 表访问权限的策略示例:

{
               "Effect": "Allow",
               "Action": [
                  "glue:GetDatabase",
                  "glue:GetDatabases",
                  "glue:GetTable",
                  "glue:DeleteTable",
                  "glue:GetPartitions",
                  "glue:GetPartition",
                  "glue:DeletePartition",
                  "glue:BatchCreatePartition"
               ],
               "Resource": [
                 "arn:aws:glue:us-east-1:123456789012:catalog",
                 "arn:aws:glue:us-east-1:123456789012:database/example_db",
                 "arn:aws:glue:us-east-1:123456789012:table/example_db/test"
               ]
             },
             {
                "Effect": "Deny",
                "Action": "glue:*",
                "NotResource": [
                  "arn:aws:glue:us-east-1:123456789012:database/example_db",
                  "arn:aws:glue:us-east-1:123456789012:table/example_db/test"
                ]
             }

**注意:**将 example_dbexample_db/test 替换为您的变量。

如果您的 Data Catalog 已加密,则必须添加以下操作:

{
"Version": "2012-10-17",
 "Statement": {
"Effect": "Allow",
     "Action": [
           "kms:GenerateDataKey",
           "kms:Decrypt",  
           "kms:Encrypt"
      ],
     "Resource": "arn of the key used to encrypt the catalog"
   }
}

有关详细信息,请参阅表和数据库的精细权限示例

相关信息

Athena 中的身份和访问管理

在 Athena 中跨账户访问 Amazon S3 存储桶

AWS 官方
AWS 官方已更新 1 年前