我如何解决文件网关 CloudWatch 运行状况日志中的 S3AccessDenied 错误?

2 分钟阅读
0

我想在 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.    查看关联桶的桶策略。确认没有明确的拒绝语句("Effect": "Deny"),它会阻止以下权限所需的访问权限:

  • s3:GetBucketLocation
  • s3:ListBucket

3.    如果文件网关所在的 Amazon Virtual Private Cloud(Amazon 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.    查看关联桶的桶策略。确认没有明确的拒绝语句("Effect": "Deny"),它会阻止以下权限所需的访问权限:

  • s3:PutObject
  • s3:PutObjectAcl

3.    如果文件网关所在的 Amazon VPC 使用 Amazon S3 VPC 端点,请查看 VPC 端点策略。确认该策略允许您的文件网关访问 S3 桶和对象。

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

  • kms:Decrypt
  • kms:Encrypt
  • kms:ReEncryptFrom
  • kms:ReEncryptTo
  • 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.    查看关联桶的桶策略。确认没有明确的拒绝语句("Effect": "Deny"),它会阻止以下权限所需的访问权限:

  • s3:GetObject
  • s3:GetObjectAcl

3.    如果文件网关所在的 Amazon VPC 使用 Amazon S3 VPC 端点,请查看 VPC 端点策略。确认该策略允许您的文件网关访问 S3 桶和对象。4.    如果关联的 S3 桶是使用 AWS KMS 加密的,请查看加密密钥的策略。该密钥策略必须向与您的文件共享关联的 IAM 角色授予以下权限:

  • kms:Decrypt
  • kms:Encrypt
  • kms:ReEncryptFrom
  • kms:ReEncryptTo
  • 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"
  }]
}

相关信息

了解 CloudWatch 警报

AWS 官方
AWS 官方已更新 9 个月前