概要
症状
以下のような状態に陥った。
- AWS Cloud Map のアクセスが権限エラー (explicit deny in an identity-based policy) になる
- 最初は、ローカル端末 (Mac) から
terraform plan
を打った際に発生 -
servicediscovery:ListNamespaces
でエラーになっている - Webコンソールやcliでアクセスしても同様
- 最初は、ローカル端末 (Mac) から
- 他の機能は特に問題なく使える
- AWS全機能で試したわけではないが、使っている主要どころは特に問題なくアクセス可能
- ex. s3, ec2, ecs, rds, etc...
- 自分のIAMに紐づく権限設定には AWS Cloud Map (
servicediscovery:*
) を指定した制限は入っていない...
原因
- AWS Cloud Map アクセスへの通信でipv6が使われていた
- その結果、以下のアクセス制限に引っかかってエラーになった
- AWSを含めて、社内リソースアクセス時はVPNを使っている
- IAM設定の
aws:SourceIp
で接続元IPを絞っており、VPN経由でなければアクセスできないようになっている - この許可リストにipv6のIPがないので弾かれていた
対策
ローカル端末 (Mac) でipv6を使わないようにしたら解消した。
詳細
前提となる設定や、調査時に行ったことを記載します。
AWS のアクセス制限の設定
以下のような設定が入っています。
外部接続用プロキシサーバやVPNに紐づくIPを使って接続元を絞る、といった運用は、よく実施されているのではないでしょうか。
インターネットアクセス時の接続元IPの確認
最近すごく重たいのですが、httpbin で確認することが多いです。
サーバからアクセスした際にどう見えているかもわかります。
curl https://httpbin.org/ip
他にも色々確認できてすごく便利です。
Macでのipv6の利用のon/off
下記のシステム設定で「IPv6を構成」を「リンクローカルのみ」に設定。
なぜ Cloud Map だけエラーになるのか?
これは結局不明のままです。
AWSのサービスの「ipv6サポート状況」は、以下にまとまっています。
これを見ると、「AWS Cloud Map」と「Amazon EC2」は、(本記事執筆時点では)、サポート状況は全く同じに見えます。
ですが、自分の環境では、上記のMacのipv6設定が「自動」の場合、EC2 は ipv4、Cloud Map は ipv6 が使われていて、何が違いを生み出しているのかはわかりませんでした...。
最後に
リモートワーク等で「社外N/W + VPN + IAMの aws:SourceIp
でアクセス制限」という環境で作業されていて、いつの間にかipv6が使われて同じ目に遭う人がもしかしたらいるのでは、ということで、書き残してみました。
誰かのお役に立てば幸いです。