TSIG error with server: tsig verify failure
TSIG error with server: tsig verify failure
ってなメッセージが /var/log/message にでてくる。
Jun 30 13:38:06 xxxx sssd[2095491]: ; TSIG error with server: tsig verify failure Jun 30 13:38:06 xxxx sssd[2095491]: ; TSIG error with server: tsig verify failure Jun 30 13:38:06 xxxx sssd[2095491]: ; TSIG error with server: tsig verify failure Jun 30 13:38:06 xxxx sssd[2095491]: ; TSIG error with server: tsig verify failure
なんでsystemctl restart sssd.service
sssdって認証情報をキャッシュしてくれるヤツなんですが、デフォルトでadをプロバイダとして利用してる。
で、そいつのDNSレコードをnsupdateで更新しようとして失敗している模様。
対処
/etc/sssd/sssd.confで dyndns_updateを無効にする。
dyndns_update = false
その後sssdを再起動。
# systemctl restart sssd.service
EC2からsshで外にでられない
EC2からsshで外に出られない
ってな現象。
セキュリティグループ
セキュリティグループのアウトバウンドルールは TCP/22 で 0.0.0.0 で許可。でもNG。
Reachability Analyzerをチェック
VPC内でどこか引っかってるかチェック。Internet Gatewayまでは到達していることを確認。
なるほどInternet Gatewayで引っかかってるんやな。
CloudWatchでチェック
CloudWatchのLog Group→VPCから宛先アドレスで検索。
こんなログを発見。
egress 8 REJECT 419084031744 eni-05e47517f4bc99d6d 172.19.96.249 XXX.XXX.XXX.XXXX XXX.XXX.XXX.XXX 22270 22 6 4 208 1656410829 1656410861 OK ingress - ACCEPT 419084031744 eni-05e47517f4bc99d6d 172.19.80.121 172.19.96.249 XXX.XXX.XXX.XX 52856 22 6 4 208 1656410829 1656410861 OK
172.19.80.121はEC2のプライベートアドレス、172.19.96.249はインタネットゲートウェイのVPC側アドレス。
そうか、こいつが所属しているサブネットでブロックされてるんやな。
ってことでこのサブネットのネットワークACLを編集。
とおりました。
RHEL8でyum updateするとなにやら警告が
RHEL8でyum updateするとなにやら警告が
RHEL8でyum updateするとこんな警告がでてきてエラーになる。
# yum check-update Updating Subscription Management repositories. メタデータの期限切れの最終確認: 0:09:19 時間前の 2022年06月21日 13時07分53秒 に実施しました。 Module yaml error: Unexpected key in data: static_context [line 9 col 3] Module yaml error: Unexpected key in data: static_context [line 9 col 3]
このModule云々で検索するとRedHatの以下のページがヒット。
長いけど、libmodulemdをupdateせよと。でもyumでlibmodulemdをupdateしても最新だよっていわれて終了。
しかたなく手動でrpmをインストール。
ここ
Log In | Red Hat IDP
にブツがあるでダウンロードしてインストール。
# yum install /tmp/libmodulemd-2.13.0-1.el8.x86_64.rpm
これで解決。
nginxのproxy_passで名前解決してくれない
nginxのproxy_passで名前解決してくれない
nginxが動作しているホストの /etc/hosts にこんな行を書いて
172.18.1.1 hogehoge.example.com
nginxでこんな感じにかいてみました。
location ~ /hogehoge/ { proxy_pass http://hogehoge.example.com ; }
ところが、これだと502エラーになっちゃう。
errorlogに名前解決できないみたいなエラー。
022/06/13 17:59:00 [error] 28796#0: *21619 no resolver defined to resolve hogehoge.example.com
どうもnginxさんはhostsはみてくれないみたい。
じゃあどうするの
dnsmasqをいれて、localhostで名前させる。その上でresolverを指定する。
dnsmasqをインストール
# yum -y install dnsmasq
dnsmasqを起動
# systemctl start dnsmasq
resolverを記述
location ~ /hogehoge/ { resolver 127.0.0.1 ; proxy_pass http://hogehoge.example.com ; }
めんどくさいな。
iamユーザポリシーをterraformingをつかってterraform管理にする
iamユーザポリシーをterraformingをつかってterraform管理にする
aws上に環境を移したのはいいんでですが、ベンダさんや、保守者をいれると膨大な数のAIMユーザが出来てきます。まぁ膨大といっても200かそこらですけどね。
それぞれのユーザは有効期限がついてたり、ソースアドレスを制限していたりします。特に有効期限は一斉に変更しないといけないのですが、ちまちまとコンソールで変更とかやってられない。そこでterraform管理下へ移します。
terraformingでtfstateファイルを作成する
適当なディレクトリを作成してtfstateファイルを作成。今回はAIMのユーザポリシーを変更するのでaimupを出力。
$ terraforming iamup --tfstate> terraform.tfstate
terraformingでIAMユーザポリシーを作成
ユーザポリシーを吐き出させる。で、initする。当然のようにエラー。
$ terraforming aimup > main.tf $ terraform init (エラーいっぱい) Template interpolation doesn't expect a colon at this location. Did you intend this to be a literal sequence to be processed as part of another language? If so, you can escape it by starting with "$${" instead of just "${".
なんか"${"は使えないみたいなので、"$${"にしろっていってます。ってことでエディタで変換。再度initをかけてみる。
こんどは違うエラー
Error: Invalid legacy provider address │ │ This configuration or its associated state refers to the unqualified provider "aws". │ │ You must complete the Terraform 0.13 upgrade process before upgrading to later versions. ╵
なんじゃ?
プロバイダが違うらしい
バージョンの違いでプロバイダがちがうらしい。以下のコマンドを叩く。
$ terraform state replace-provider registry.terraform.io/-/aws registry.terraform.io/hashicorp/aws
これ実際には空のtfファイルでinit実行したあとにplanででてきたエラーで探しました。
planをかけてみる
$ terraforrm plan
OK!
あとは変更したいところを編集してapplyすればいい。
nginxでリファラによってプロクシ先を変更する
nginxでリファラによってプロクシ先を変更する
nginxで動作しているウェブサーバから複数のバックエンドサーバへリバースプロキシをしています。
ほとんどのバックエンドサーバはお行儀がいいので /hoge 以下がAサーバ、/fuga以下ならBサーバという設定ですみます。
location ~ ^/hoge { proxy_pass http://server-a.example.com ; } location ~ ^/fuga { proxy_pass http://server-b.example.com ; }
ところが中にはHTML中のスクリプトや、イメージで ../scripts とか指定してくる人いて、しかも複数いたりします。
同一URIパスだけど、リファラによってリバースプロキシ先を変更する必要があるのですが、どうしたらいいんだろ。
ifを使う
location中でifを使うといいかな、とこんな風に書いてみたんですが意図した動作をしません。
location ~ ^/scripts { if ( $http_referer ~ /hoge/ ){ proxy_pass http://server-a.example.com ; } if ( $http_referer ~ /fuga/ ){ proxy_pass http://server-b.example.com ; } }
なんでかわかりませんww
location中でifを使うんじゃねえって記事も見つかるのでそういう使い方は禁忌みたい。
mapを使う
ってことで変数を利用します。if分でプロクシ先のURIを変数へいれてもいいんですが、mapを使うとスマート。
map $http_referer $proxyhost { ~/hoge/ "http://sever-a.example.com" ; ~/fuga/ "http://server-b.example.com" ; }
これをserverセグメントの外に書く。
locationで設定した変数を使う。
location ~ ^/scripts/ { proxy_pass $proxyhost ; }