Help us understand the problem. What is going on with this article?

proxy経由でs3 endpoint

More than 1 year has passed since last update.

前提

  • EC2インスタンス(A)とEC2インスタンス(B)が存在する
  • それぞれのインスタンスが稼動するサブネットはs3への通信をvpcendpointに流すようルーティング済み
  • s3のバケットポリシーでvpcendpoint以外のアクセスは拒否
  • EC2インスタンス(A)はHTTP,HTTPSプロキシとしてEC2インスタンス(B)の方を向いている

疑問

  • Proxyを有効にした状態でEC2インスタンス(A)からs3にaws cliを利用してputする場合どうなるか。

予測

  • vpcendpointへのルーティングはVPC内の全サブネットで有効
  • なのでインスタンス(A)からインスタンス(B)に入っても結局ルーティング的にはvpcendpointに向かいそう
  • 大丈夫じゃないかな

実証

環境

インスタンス(A):AmazonLinux2
インスタンス(B):AmazonLinux2+Squid

セットアップ

インスタンス(B)

  • squidをセットアップ
yum install squid -y
systemctl enable squid
systemctl start squid
netstat -anp | grep 3128

インスタンス(A)

  • AmazonLinuxを使用している為、aws cliはセットアップ済み
  • 以下のポリシーを持つEC2ロールを付与
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::{BucketName}"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::{BucketName}/*"
            ]
        }
    ]
}

s3 バケットポリシー

  • バケットポリシーは上記VPCで持つS3エンドポイントからのアクセスだけ許可
{
    "Version": "2012-10-17",
    "Id": "test",
    "Statement": [
        {
            "Sid": "test",
            "Effect": "Deny",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::{BucketName}",
                "arn:aws:s3:::{BucketName}/*"
            ],
            "Condition": {
                "StringNotEquals": {
                    "aws:sourceVpce": "{s3vpcendpoint-id}"
                }
            }
        }
    ]
}

実行

  • 実行
  • ショック
[root@ip-10-1-0-197 ~]# aws s3 cp ./test  s3://{BucketName} --region ap-northeast-1 --output json
upload failed: ./test to s3://{BucketName}/test Unable to locate credentials
[root@ip-10-1-0-197 ~]#
  • 試しに以下のポリシーを持つEC2ロールをインスタンス(B)にも付与
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::{BucketName}"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::{BucketName}/*"
            ]
        }
    ]
}

再実行

  • 何で通るねん
[root@ip-10-1-0-197 ~]# aws s3 cp ./test  s3://{BucketName} --region ap-northeast-1 --output json
upload: ./test to s3://{BucketName}/test
[root@ip-10-1-0-197 ~]#

調査

  • どう考えてもおかしい
  • というか、そもそも切り分けのアプローチの仕方もどうかと思う。
  • 事例を調べる

事例

  • ぴったりのを3秒で見つける。
  • ありがたや

https://qiita.com/TK1989/items/3635a619b9a7ae429c64

再試行

  • EC2インスタンス(B)のロールを外す
  • EC2インスタンス(A)でメタデータアクセス用IPについてProxy設定をはずす
export NO_PROXY=169.254.169.254
  • 再実行->OK
[root@ip-10-1-0-197 ~]# aws s3 cp ./test  s3://{BucketName} --region ap-northeast-1 --output json
upload: ./test to s3://{BucketName}/test
[root@ip-10-1-0-197 ~]#

まとめ

  • 前提って大事
  • Endpointの話というかProxy配下でEC2Roleを利用した時の話になってる気がする。
  • EC2インスタンス(B)にインスタンス(A)と同じRoleつけてうまく行ったのは何故なのかは、後で調べようきっときっと。
simpline
AWSを強みとしたインフラエンジニアリング/IaaSコスト削減サービスを提供しているSIer
https://www.simpline.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした