Amazon RedshiftとS3はCompute NodeのPublic IPで通信してる

cloudpackエバンジェリストの吉田真吾@yoshidashingo)です。

Redshiftのアクセス制御について触りながら分かったことを記載しておきます。
今後も気づくことがあるかもしれないので今回は(1)とします。

S3 Bucket Policy でIP制限している場合、どのIPアドレスを許可すればよいか

こんな感じのS3 Bucket Policyを設定しているとき、RedshiftからCOPY文で接続するためのIPアドレスとして何を指定すればよいか。

{
  "Version": "2008-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Deny",
      "Principal": {
        "AWS": "*"
      },
      "Action": "s3:*",
      "Resource": "arn:aws:s3:::bucket-name/*",
      "Condition": {
        "IpAddress": {
          "aws:SourceIp": "0.0.0.0/0"
        },
        "NotIpAddress": {
          "aws:SourceIp": [
            "ip-ec2-upload-to-s3/32",
            "ip-redshift-copy-from-s3/32"
          ]
        }
      }
    }
  ]
}

Compute Node の Public IP

Redshift Management Consoleの`Cluster`ページにある`Configuration`タブの右下に、以下のような`Node IP Addresses`の記載があります。
この例は`Publicly Accessible = No`で、dw2.largeが2ノード起動しています。この状態で分かったことは以下です。
f:id:yoshidashingo:20140804165823p:plain

  • Leader Nodeは`Publicly Accessible = No`なので、インターネット経由でLeader Nodeへの接続はできないが、COPY時のS3への接続性においては関係がない。
  • S3のBucket PolicyにはCompute NodeのPublic IPを許可すればOK。

参考文献

ということで以下のドキュメントは参照しましたが詳細は載ってなかったので、ここは動かしながら理解が必要ということみたいですね。