(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

【AWS】CLIを用いたEC2とS3のルートテーブルの確認の流れ

スポンサーリンク

はじめに

EC2からS3を利用しようとaws s3 lsを打つも、反応がなかった際の調査ログを記載します。尚、EC2はプライベートサブネットに存在し、インターネットへの経路はなくS3のVPCエンドポイントは作成済みとします。

環境情報
  • aws-cli/2.15.5

調査の流れ

同事象が起きた場合、一番怪しいのはS3のVPCエンドポイントがEC2のルートテーブルに紐づいていない状態となっています。

リージョンを指定してS3のエンドポイントを指定して出力すると

$ aws ec2 describe-vpc-endpoints --filters "Name=service-name,Values=com.amazonaws.ap-northeast-1.s3"

RouteTableIdsにて紐づいているルートテーブルの情報が表示されます。

{
    "VpcEndpoints": [
        {
            "VpcEndpointId": "vpce-xx",
            "VpcEndpointType": "Gateway",
            "VpcId": "vpc-xx",
            "ServiceName": "com.amazonaws.ap-northeast-1.s3",
            "State": "available",
...
           "RouteTableIds": [
                "rtb-xx"
            ],

次は該当のEC2のルートテーブルを特定するため、インスタンスIDを指定してまずはサブネット情報を取得。

$ aws ec2 describe-instances --instance-ids i-xx --query 'Reservations[].Instances[].SubnetId' --output text
subnet-xx

そのサブネット情報を用いてルートテーブルを検索することで、EC2が利用しているルートテーブルが表示されました。

$ aws ec2 describe-route-tables --filters "Name=association.subnet-id,Values=subnet-xx" --query 'RouteTables[].RouteTableId' --output text
rtb-xx

ここに上で出力したS3のVPCエンドポイントと比較を行い、表示されていない場合はVPCエンドポイントにルートテーブルを登録。そうすると下記コマンドでEC2が利用しているルートテーブルが表示されます。

$ aws ec2 describe-vpc-endpoints --filters "Name=service-name,Values=com.amazonaws.ap-northeast-1.s3"
{
    "VpcEndpoints": [
        {
            "VpcEndpointId": "vpce-xx",
            "VpcEndpointType": "Gateway",
            "VpcId": "vpc-xx",
            "ServiceName": "com.amazonaws.ap-northeast-1.s3",
            "State": "available",
..
            "RouteTableIds": [
                "rtb-xx",
                "rtb-xx"
            ],
...

終わりに

CUIをベースにしたルートテーブルを確認する流れとなります。実際、ルートテーブルを登録することでEC2からs3コマンドが通るようになりました。

以上、ご参考になれば幸いです。