現代ITインフラの王道をゆくLinuxパッケージ管理の基本構成


RedHatRPMYUMDebianDEBAPT 




configureRPM















CentOS7RPMsshguard


S3

ApacheNginxS3Web Site Hosting使

S3

Web Site Hosting

S3のアクセス制限

たとえOSSのパッケージだとしても、自作パッケージを野放しに公開しておくのはよくないですから、どちらかの方法でアクセス制限をします。

ソースアドレスで制限
S3のバケットポリシーの編集にて、こんな感じで制限できます。

VPCエンドポイントで制限
外からのアクセスが不要ならば、VPCエンドポイントで制限してしまえます。



Lambda

S3Lambda

IAM

LambdaRole

AmazonEC2FullAccess

AmazonS3FullAccess

IAMPassRole

Lambda

UserDataBashEC2Lambda

YUM



APT



LambdaEvent Sources
YUMAPT re-index Event Sources

YUM : ObjectCreated | centos-packages, re-index

APT : ObjectCreated | debian-packages, re-index

.rpm 

.rpm  .deb re-index  Lambda re-index 





YUMbaseurl

http://example.s3-website-ap-northeast-1.amazonaws.com/centos/$releasever/$basearch/
APT

deb http://example.s3-website-ap-northeast-1.amazonaws.com/debian/jessie jessie main

OK yum clear all  apt-get update 


GitPullRequestCI



wget 

fluentd fluentd

中身を見ると、GPG鍵のインポートと、レポジトリ情報を作成してから、td-agent をインストールしています。これがもし、鍵のサーバーが落ちていたら、レシピがそのままなら自分達ではどうにもできなくなる、ということになります。

そのためレシピでは、鍵とレポジトリ情報を先にファイルとして保存し、外部アクセスは td-agent のインストールから必要とするようにしています。

他にも、zabbix は zabbix-release というパッケージをダウンロードしてインストールすることで、鍵とレポジトリ情報を取得できますが、zabbix-release の .rpm を wget できなければ、やはりエラーになります。そのため、zabbix-release のRPMは、S3の自前レポジトリにコピーしておくという方針にしています。

ポリシーをまとめると、

  • パッケージが無いソフトウェアはパッケージを作成してS3に置く
  • 外部から裸のパッケージを取得する必要がある場合はS3にコピーしておく
  • パッケージ以外の外部ファイルはレシピのファイルとして保存しておく
  • 外部のパッケージ・レポジトリはそのまま利用させてもらう

  • となりますが、4つ目の外部レポジトリの利用は、もし障害が発生したら解決に手間がかかってしまうため、自分達である程度のコントロールができるよう、以下のように対策をとります。

    キャッシュサーバーを経由して耐障害性を向上する

    外部レポジトリを直接見にいくと、障害の問題だけでなく、転送量的にもそれなりに迷惑をかけてしまうことになります。

    これを解決するために、クライアントにはキャッシュサーバーを経由してもらいます。yum.conf に以下のように記述することで、簡単にプロキシ経由にすることができます。






     squid squid 

    Squid


    今回はアクセス制限をDigest認証にします。アカウント情報のテキストを作成します。

    メインの設定を追記編集します。下記設定のバージョンはver3.xです。

  • ver2.6の場合、visible_hostname unknown を追加する必要があります
  • ※2016/3/10追記
    もし、パッケージの最新情報を的確に捉えたいならば、YUMの場合は repomd.xml をキャッシュしないように設定します。

    再起動します。

    クライアントのyum設定を追記編集します。squidのポートは3128です。

  • ※CentOS6だと正しく認証処理をせず、いきなりBasic認証としてアクセスしようとするので、接続できなかったりします


  • Squid

    使使使



    ver3.x /usr/binver2.6 /usr/sbin 

    キャッシュファイルの確認
    1つ1つのキャッシュオブジェクトの詳細を確認できます。
  • LV : 作成時間
  • LU : 最終アクセス時間
  • LM : Last-Modifiedヘッダ時間
  • EX : キャッシュ期間

  • EXの決定条件は色々あるっぽいですが、基本は以下。
  • Expiresヘッダをそのまま守る
  • (現在時刻 – Last-Modified) / 10
  • squid.conf の refresh_pattern で明示的に指定



  • 使EC2Amazon EC2 Auto Recovery

    AutoScalingSquid2


    AWSLinux   

    使

    :-)