如何排查您的文件网关的 CloudWatch 运行状况日志中的 S3AccessDenied 错误?

上次更新时间:2020 年 9 月 25 日

我尝试访问 AWS Storage Gateway 上的网络文件系统 (NFS) 或服务器消息块 (SMB) 文件共享。但我的文件网关的 Amazon CloudWatch 运行状况日志显示一个 S3AccessDenied 错误。我应该如何排查此问题?

解决方法

要解决 S3AccessDenied 错误,您必须查看与您的文件共享关联的权限策略。然后,您必须添加缺少的任何所需权限。根据您收到“访问被拒绝”错误的时间确定必须审查的权限:

  • 创建文件共享,文件共享卡在“正在创建”或“不可用”状态
  • 将文件写入文件共享
  • 从文件共享读取文件

创建文件共享,文件共享卡在“正在创建”或“不可用”状态

如果您在创建文件共享时收到“拒绝被访问”错误,并且文件共享卡在“正在创建”或“不可用”状态,则 CloudWatch 日志类似于以下内容:

{
"severity": "ERROR",
"bucket": "AWSDOC-EXAMPLE-BUCKET",
"prefix": "",
"roleArn": "arn:aws:iam::123456789:role/service-role/StorageGatewayBucketAccessRolec6914add-b232-40dc-abef-4a9eeaaed8",
"source": "share-ABCD1234",
"type": "S3AccessDenied",
"operation": "s3:ListObjects",
"gateway": "sgw-ABCD1234",
"timestamp": "1597486809991"
}

查看以下权限设置:

1.    检查与您的文件共享关联的 AWS Identity and Access Management (IAM) 角色,以确认该角色对关联的 Amazon Simple Storage Service (Amazon S3) 存储桶具有以下权限:

  • s3:GetBucketLocation
  • s3:ListBucket

2.    查看关联存储桶的存储桶策略,以确认没有显式 deny 语句 ("Effect": "Deny") 阻止以下权限所需的访问权:

  • s3:GetBucketLocation
  • s3:ListBucket

3.    如果文件网关所处的 Amazon Virtual Private Cloud (Amazon VPC) 将 VPC 终端节点用于 Amazon S3,则查看 VPC 终端节点策略。确认策略允许您的文件网关访问 S3 存储桶和对象。

将文件写入文件共享

如果您在将文件写入文件共享时收到“访问被拒绝”错误,则 CloudWatch 日志类似于以下内容:

{
"severity": "ERROR",
"bucket": "AWSDOC-EXAMPLE-BUCKET",
"prefix": "/test1",
"roleArn": "arn:aws:iam::123456789:role/service-role/StorageGatewayBucketAccessRole0617b6ee-4809-48bc-b646-8dda9e9c32",
"source": "share-ABCD1234",
"type": "S3AccessDenied",
"operation": "S3Upload",
"gateway": "sgw-ABCD1234",
"timestamp": "1597493322178"
}

查看以下权限设置:

1.    检查与您的文件共享关联的 IAM 角色,以确认该角色对关联的 Amazon S3 存储桶具有以下权限:

  • s3:PutObject
  • s3:PutObjectAcl

2.    查看关联存储桶的存储桶策略,以确认没有显式 deny 语句 ("Effect": "Deny") 阻止您的以下权限所需的访问权:

  • s3:PutObject
  • s3:PutObjectAcl

3.    如果文件网关所处的 Amazon VPC 将 VPC 终端节点用于 Amazon S3,则查看 VPC 终端节点策略。确认策略允许您的文件网关访问 S3 存储桶和对象。

4.    如果关联的 S3 存储桶已使用 AWS Key Management Service (AWS KMS) 加密,请查看加密密钥的策略。密钥策略必须向与您的文件共享关联的 IAM 角色授予以下权限:

  • kms:Decrypt
  • kms:Encrypt
  • kms:ReEncrypt
  • kms:GenerateDataKey
  • kms:DescribeKey*

如果您的文件共享的 IAM 角色和 AWS KMS 密钥属于不同的 AWS 账户,则必须同时在密钥策略和 IAM 角色的策略中设置这些权限。

从文件共享读取文件

如果从文件共享读取文件时收到“访问被拒绝”错误,则 CloudWatch 日志类似于以下内容:

{
"severity": "ERROR",
"bucket": "AWSDOC-EXAMPLE-BUCKET",
"prefix": "/test1",
"roleArn": "arn:aws:iam::123456789:role/service-role/StorageGatewayBucketAccessRole0617b6ee-4809-48bc-b646-8dda9e9c32",
"source": "share-ABCD1234",
"type": "S3AccessDenied",
"operation": "s3:HeadObject",
"gateway": "sgw-ABCD12347",
"timestamp": "1597488260202"
}

查看以下权限设置:

1.    检查与您的文件共享关联的 IAM 角色,以确认该角色对关联的 Amazon S3 存储桶具有以下权限:

  • s3:GetObject
  • s3:GetObjectAcl

2.    查看关联存储桶的存储桶策略,以确认没有显式 deny 语句 ("Effect": "Deny") 阻止您的以下权限所需的访问权:

  • s3:GetObject
  • s3:GetObjectAcl

3.    如果文件网关所处的 Amazon VPC 将 VPC 终端节点用于 Amazon S3,则查看 VPC 终端节点策略。确认策略允许您的文件网关访问 S3 存储桶和对象。

4.    如果关联的 S3 存储桶已使用 AWS KMS 加密,请查看加密密钥的策略。密钥策略必须向与您的文件共享关联的 IAM 角色授予以下权限:

  • kms:Decrypt
  • kms:Encrypt
  • kms:ReEncrypt
  • kms:GenerateDataKey
  • kms:DescribeKey*

如果您的文件共享的 IAM 角色和 AWS KMS 密钥属于不同的 AWS 账户,则必须同时在密钥策略和 IAM 角色的策略中设置这些权限。

注意:以下示例 IAM 策略向您的文件共享授予列出存储桶以及从存储桶上传、下载和删除对象所需的权限 (AWSDOC-EXAMPLE-BUCKET):

{
"Version": "2012-10-17",
"Statement": [{
"Action": [
"s3:GetAccelerateConfiguration",
"s3:GetBucketLocation",
"s3:GetBucketVersioning",
"s3:ListBucket",
"s3:ListBucketVersions",
"s3:ListBucketMultipartUploads"
],
"Resource": "arn:aws:s3:::AWSDOC-EXAMPLE-BUCKET",
"Effect": "Allow"
},
{
"Action": [
"s3:AbortMultipartUpload",
"s3:DeleteObject",
"s3:DeleteObjectVersion",
"s3:GetObject",
"s3:GetObjectAcl",
"s3:GetObjectVersion",
"s3:ListMultipartUploadParts",
"s3:PutObject",
"s3:PutObjectAcl"
],
"Resource": "arn:aws:s3:::AWSDOC-EXAMPLE-BUCKET/*",
"Effect": "Allow"
}
]
}

这篇文章对您有帮助吗?


您是否需要账单或技术支持?