如何使用特定的 VPC 端點或 IP 地址限制對我的 Amazon S3 儲存貯體的存取?

2 分的閱讀內容
0

我想要封鎖任何不是來自特定 Amazon 虛擬私有雲端 (VPC) 端點或特定 IP 地址的流量。或者,我正在使用 Amazon Simple Storage Service (Amazon S3) 儲存貯體來託管靜態網站。網站必須可從特定的 VPC 端點或 IP 地址存取。

解決方法

**警告:**本文中的範例儲存貯體政策明確拒絕存取允許的 VPC 端點或 IP 地址以外的任何請求。在儲存之前,儲存貯體政策之前,請務必仔細檢閱該政策。

使用儲存貯體政策指定哪些 VPC 端點VPC 來源 IP 地址外部 IP 地址可以存取 S3 儲存貯體。

**注意:**VPC 來源 IP 地址是 VPC 內的私有 IP 地址。私有地址無法透過網際網路連線,而且可用於 VPC 中的執行個體之間的通訊。例如,私有 IP 地址可能是 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體的私有 IP 地址。

外部 IP 地址是一種公有 IP 地址,可能來自 VPC 內部或外部。例如,外部 IP 地址可能是 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體的彈性或公有 IP 地址。外部 IP 地址也可能是 VPC 的 NAT 閘道或代理伺服器的 IP 地址。

下列範例儲存貯體政策會封鎖傳送至儲存貯體的流量,除非請求來自指定的 VPC 端點 (aws:sourceVpce):

{
  "Id": "VPCe",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "VPCe",
      "Action": "s3:*",
      "Effect": "Deny",
      "Resource": [
        "arn:aws:s3:::DOC-EXAMPLE-BUCKET",
        "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
      ],
      "Condition": {
        "StringNotEquals": {
          "aws:SourceVpce": [
            "vpce-1111111",
            "vpce-2222222"
          ]
        }
      },
      "Principal": "*"
    }
  ]
}

注意:

下列範例儲存貯體政策會封鎖傳送至儲存貯體的流量,除非請求來自指定的私有 IP 地址 (aws:VpcSourceIp):

{
  "Id": "VpcSourceIp",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "VpcSourceIp",
      "Action": "s3:*",
      "Effect": "Deny",
      "Resource": [
        "arn:aws:s3:::DOC-EXAMPLE-BUCKET",
        "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
      ],
      "Condition": {
        "NotIpAddress": {
          "aws:VpcSourceIp": [
            "10.1.1.1/32",
            "172.1.1.1/32"
          ]
        }
      },
      "Principal": "*"
    }
  ]
}

**注意:**若要在 aws:VpcSourceIP 條件下使用此政策,您必須連接適用於 Amazon S3 的 VPC 端點。VPC 端點必須連接至 EC2 執行個體子網路的路由表,並且與儲存貯體位於相同的 AWS 區域。

下列範例儲存貯體政策會封鎖傳送至儲存貯體的流量,除非請求來自指定的外部 IP 地址 (aws:SourceIp):

{
  "Id": "SourceIP",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "SourceIP",
      "Action": "s3:*",
      "Effect": "Deny",
      "Resource": [
        "arn:aws:s3:::DOC-EXAMPLE-BUCKET",
        "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
      ],
      "Condition": {
        "NotIpAddress": {
          "aws:SourceIp": [
            "11.11.11.11/32",
            "22.22.22.22/32"
          ]
        }
      },
      "Principal": "*"
    }
  ]
}

**警告:**這些範例儲存貯體原則明確拒絕存取允許的 VPC 端點或 IP 地址以外的任何請求。如果使用者不符合條件,即使是輸入儲存貯體政策的使用者要存取儲存貯體,也會遭到拒絕。因此,在儲存前,請務必仔細檢閱儲存貯體政策。如果您不慎遭到鎖定,請參閱我不小心拒絕了所有人存取我的 Amazon S3 儲存貯體。如何重新獲得存取權限?

如果您必須允許特定使用者 (在相同 AWS 帳戶內) 存取儲存貯體,請在條件區塊中加入下列陳述式:

  • AROAEXAMPLEID 是您要允許的 IAM 角色的角色 ID
  • AIDAEXAMPLEID 是您要允許的 IAM 使用者的使用者 ID
  • 111111111111 是儲存貯體的 AWS 帳戶 ID,代表 AWS 帳戶根使用者的憑證

例如:

"Condition": {
            "StringNotLike": {
                "aws:userId": [
                    "AROAEXAMPLEID:*",
                    "AIDAEXAMPLEID",
                    "111111111111"
                ]
            }
        }

如需授予特定 IAM 角色存取權的詳細資訊,請參閱如何將 Amazon S3 儲存貯體存取權限限定在特定 IAM 角色

相關資訊

VPC 端點

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