Hatena::ブログ(Diary)

ablog このページをアンテナに追加 RSSフィード

2018-08-08

クロスアカウントのS3バケット間コピーを行うとコピー実行ユーザーが所有者になる

検証したこと


手順

$ aws s3 cp test.txt s3://az-test-src/                                                                                                                                                                              
upload: ./test.txt to s3://az-test-src/test.txt
$ aws s3 cp s3://az-test-src/test.txt s3://az-test-dst/                                           
copy: s3://az-test-src/test.txt to s3://az-test-dst/test.txt
$ aws s3api get-object-acl --bucket az-test-src --key test.txt
{
    "Owner": {
        "DisplayName": "azekatsu", ★コピー元アカウント
        "ID": "...."
    },
    "Grants": [
        {
            "Grantee": {
                "Type": "CanonicalUser",
                "DisplayName": "azekatsu",
                "ID": "..."
            },
            "Permission": "FULL_CONTROL"
        }
    ]
}

https://docs.aws.amazon.com/ja_jp/cli/latest/reference/s3api/put-object-acl.html を見ても所有者の変更はできなさそう。

$ aws s3api put-object-acl --bucket az-test-dst --key test.txt --acl bucket-owner-full-control
$ aws s3api get-object-acl --bucket az-test-dst --key test.txt
{
    "Owner": {
        "DisplayName": "azekatsu",
        "ID": "..."
    },
    "Grants": [
        {
            "Grantee": {
                "Type": "CanonicalUser",
                "DisplayName": "azekatsu",
                "ID": "..."
            },
            "Permission": "FULL_CONTROL"
        },
        {
            "Grantee": {
                "Type": "CanonicalUser",
                "DisplayName": "yoheia", ★コピー先アカウント(バケット所有者)にフルコントロール権限が付与されている
                "ID": "..."
            },
            "Permission": "FULL_CONTROL"
        }
    ]
}

関連


参考

2018-07-07

コンテナ について

コンテナという言葉の意味

container

con-「共に」tain「つかんで離さない」-er「人、もの」

->何かをとどめようとするもの

-> 【名】入れもの、コンテナ

英単語 container の語源と意味 - Gogengo! - 英単語は語源でたのしく

コンテナ (英: container)とは、内部に物を納めるための容器のことである。コンテナーとも呼ばれる。

コンテナ - Wikipedia

コンピュータにおけるコンテナ

 商用OSの世界でも、SolarisゾーンやHP-UX Containersなどのように、コンピュータ資源を分離する「コンテナ技術」が発展していきました。ここで、コンテナという言葉が出てきます。コンテナとは船や列車などの貨物輸送で使われる容器です。一隻に大量のコンテナを積載して運ぶ貨物輸送船を思い浮かべて下さい。

 なぜ貨物でコンテナが利用されるのでしょう。容器を直方体の箱にすれば船の限られたスペースにすき間なく積み上げて効率よく配置でき、異なる種類のコンテナ同士で内容物が混ざるといったトラブルも避けられます。依頼主にも管理側にもメリットがあるからです。

 この「隙間なく積み上げて配置できること」と「内容物が混ざるトラブルが発生しないこと」という点が非常に重要です。コンピュータにおけるコンテナも同じ考え方です。コンピュータにおいて、一隻のコンテナ船はホストOSです。その上に載る大量のコンテナの群れには、それぞれさまざまなアプリプロセスが稼働しています。隙間なく積まれたコンテナの群れをよく目を凝らしてみてみると、コンテナ同士はぴったりとくっついて配置されていますが、お互いのコンテナは、となりのコンテナの内容物(プロセス)は知り得ません。すなわち、ホストOSであるコンテナ船から見た人は、コンテナという分離された空間がいくつも存在するかのように見えます。これが、分離された空間=コンテナと呼ばれるゆえんです。

 また、船の平らな甲板にコンテナが直接触れて置かれている点も重要です。平らであるということをコンピュータに置き換えると、ホストOSとコンテナが直接触れているということは、ホストOSとコンテナの間にはハイパーバイザーのような介在者がいないことになります。すなわち、コンテナで稼働するアプリプロセスは、ホストOSから直接起動されているのです。

第4回 「Dockerのクジラロゴ」が意味するもの (2/3) - ITmedia エンタープライズ

他の仮想化とコンテナの違い


コンテナの歴史

f:id:yohei-a:20180708124417p:image:w640

chroot が生まれた背景

 一般的にアプリなどの稼働テストにおいて、実際の本番環境のファイルなどを直接作成、変更、削除するのは、非常に危険です。chroot監獄は、このような本番環境で試すと危険をともなう場合と比べ、ソフトウェアの開発やテスト環境を安全に行うことができます。当時は非力な計算機を使って、BSDなどのUNIX向けにさまざまなソフトウェアの開発が研究機関において行われていました。このような「監獄」の考え方が出現したのは、ソフトウェア開発者が1台のマシンで本番環境をシミュレートして、効率的にかつ安定的に開発を行いたいというニーズが背景にあったためです。

f:id:yohei-a:20180708124941j:image

本番機と開発機を2重に持たず、本番機で開発するのは非常に危険。そこで、本番用のファイルシステムの一部を分離(隔離)するという考えが生まれた

第1回 Dockerと「昭和54年」の深〜い関係 - ITmedia エンタープライズ
chroot の応用例

chroot監獄は開発の場面だけでなく、システムファイルの破損や、操作ミスなどで誤ってファイルを削除してしまい、OSが起動不能になった場合に、インストールメディアレスキューモードを使ってOSを復旧させるシーンにおいても使われています。

 具体的には、インストールメディアで対象となるマシンを起動後、破損したOSのルートディレクトリを適当な名前のディレクトリ(/mnt/sysimageなど)にマウントすることに成功すれば、そのディレクトリchrootを実行することで、破損したOSのルートディレクトリに遷移できます。これにより、起動不能だったOSのコマンド群を使えるようになり、復旧作業を行うことができます。

 また、セキュリティの面においても「ハニーポット(蜜の壺/おとりサーバ)」と呼ぶクラッカー対策にchrootが利用されます。現在(2015年)では、chrootを使ったハニーポットに代わる新しいセキュリティ対策の仕組みがいろいろと研究されていますが、基本的にはchrootの考え方を踏襲しており、2015年現在でもフリーOSなどで利用されています。

f:id:yohei-a:20180708125240j:image

chrootの応用例。chrootファイルシステムの分離機能はソフトウェアの開発だけでなく、さまざまな分野で応用されている

第1回 Dockerと「昭和54年」の深〜い関係 - ITmedia エンタープライズ
FreeBSD Jail

2000年、オープンソース界隈であるホットなニュースが飛び交いました。

 chroot監獄を大幅に発展させた機能が、フリーOSで利用可能となったのです。その名も「FreeBSD Jail(フリー・ビーエスディ・ジェイル)」です。「あるディレクトリ配下をルートディレクトリに見せる」というファイルシステムを取り扱う概念に加え、さらにアプリプロセスIDも監獄ごとに分離できるようになりました。

 このFreeBSD Jailは、監獄の中からホストOS側を見ると、ホストOSの各種資源の一部分だけがあたかもすべての資源のように見せることができる画期的なものです。FreeBSD Jailはとても軽く、洗練されたアーキテクチャとして知られており、日本やロシアで根強い人気があるFreeBSDと呼ばれるBSD系のフリーOSにおける強力なOS空間の分離機能として発展し、2015年現在でも広く利用されています。

 その後FreeBSD Jailは、VIMAGEと呼ぶネットワークに関する分離機能も追加されました。

第4回 「Dockerのクジラロゴ」が意味するもの (1/3) - ITmedia エンタープライズ
Dockerが生まれた背景

Googleでのコンテナ

つまり私たちが利用するGoogleのすべてのサービスも、Googleの社内で使われているツールもすべて、すでにGoogleではDockerのようなコンテナ型仮想化技術の上で実行されているということのようです。

「We start over 2billion containers per week.」(私たちは毎週20億個以上のコンテナを起動している)とも書いてあり、Google内部ではすさまじい数のコンテナが実稼働していることになります。

いまDockerを中心にコンテナ型仮想化が話題になっていますが、Googleではすでにコンテナがあたりまえの技術になっている、ということなのでしょう。

no title

Fargate

f:id:yohei-a:20180708132118p:image:w640

f:id:yohei-a:20180708132124p:image:w640

f:id:yohei-a:20180708132112p:image:w640


Kubernetes

Kubernetesとは

Kubernetesオープンソースの「コンテナオーケストレーションツールです。公式サイトのトップページにおいてもそう明示されていますが、「コンテナオーケストレーション」には明確な定義がまだありません。そこで本連載では、コンテナオーケストレーションを「コンテナ型仮想化を本番環境で活用するために必要な機能を提供すること」と定義します。

(中略)

Kubernetesの起源

Kubernetesの起源をたどる際には、Googleエンジニアが執筆したサービス管理に関する有名な論文が参考になります。この論文では、「Googleのサービスは、クラスタマネジャー『Borg』上で動作するコンテナを用いて提供されており、Borgと同様の仕組み(+Borgにおける反省を踏まえた対応策)を備えたオープンソースソフトウェアとしてKubernetesを開発した」旨が記載されています。

Googleのサービスを支えている基盤と同様の仕組みを備えていることから、「KubernetesGoogleで既にその有効性を実証済みである」という意味で大きな注目を浴びたといえるでしょう。

「Kubernetes」とは何か――コンテナ型仮想化の本番利用に向けた課題:先行事例に学ぶKubernetes企業活用の現実(1) - @IT

Kubernetesは要するに、プロセッシングのリソース管理の問題などを解決するためのオーケストレーションソフトウェアです。

プロセッシングだとか、ハイアベイラビリティだとかを。Kubernetesと、あとKubernetesが動作の前提とするEtcdという分散キーバリューストアをペアにして解決していくというものになりますが。

no title

EKS


参考

  • コンテナの性能分析

2011年7月1日

米国の新興クラウドベンダである「DotCloud」が、ベータ期間を終了し、正式サービスを開始しました。

DotCloudの最大の特徴は、PHPPerlRubyJavaPythonNode.jsなど複数の言語と、MySQLPostgreSQL、Cassandra、MongoDBCouchDB、Redisなど複数のデータベースMemcached、RabbitMQ、Hadoopなどのさまざまなソフトウェアを開発者が自由に組み合わせてプラットフォームを構成することができ、それがクラウド上のPaaSとして提供されるという点です。

(中略)

シックスアパート宮川達彦氏が、4月にDotCloudへ転職したことブログで明らかにしていますが、そのエントリで宮川氏はこのように書いています。

I hope to see Perl deployments beat Ruby and Node.js on DotCloud some day :)

クラウド上の言語としてPerlが使えるプラットフォームはこれまでほとんどありませんでした。果たして、新しい世代のPaaSではどのような言語やデータベースが主流となるのでしょうか?

プログラミング言語やデータベースが選べる新世代PaaS「DotCloud」が正式サービス開始

1番のポイントは、PDBがいくつあってもインスタンスは1つだけというところです。PDBごとにメモリやプロセスを割り当てていたのでは、従来型のデータベースを複数作成する場合と同じで無駄なリソースを多く使用してしまいます。インスタンスを各PDBが共同利用することで、リソースを節約しようというのがOracle Multitenantの考え方なのです。こうして集約率を高め、さらにPDBとして独立性を持たせることで、スキーマ名の競合やセキュリティの見直しといった統合にありがちな課題まで、まとめて解決することができます。

徹底解説!Oracle Database 12cのすべて Vol.1 | アシスト

Webコンテナ(ウェブコンテナ、Web container)とは、Java Platform, Enterprise Edition (Java EE) アーキテクチャのWebコンポーネント規約を実装するソフトウェア[1]。Java Servletの実行環境となることからServletコンテナ(サーブレットコンテナ、Servlet container)とも呼ばれる。

この規約では、コンピュータセキュリティ、並列性、ライフサイクル管理、トランザクション処理、デプロイやその他のサービスを含むWebコンポーネントの実行環境を規定している。WebコンテナはJava EEプラットフォームAPIを利用したJSPコンテナとしての機能も提供する。

Webコンテナ - Wikipedia

データプレーン、コントロールプレーン

Docker container networking:overlay networkで出て来る。

Dockerのネットワークを理解するためのネットワーク技術入門 – PAYFORWARD

Docker EE networking features

The following two features are only possible when using Docker EE and managing your Docker services using Universal Control Plane (UCP):

Docker container networking:overlay network

上のスライドの黒塗り箇所が YouTube では見れる

2018-03-31

「Oracleの基本 〜データベース入門から設計/運用の初歩まで」の紹介

株式会社コーソルの 渡部さんOracle ACE)から献本いただいた「Oracleの基本 〜データベース入門から設計/運用の初歩まで」の紹介です。

一言で言うと新卒研修でデータベースの教科書として最適な本だと思います。

渡部さんとは JPOUG などのコミュニティ活動で以前から交流があり、コーソル社の社内勉強会にも何度かお邪魔したこともあります。Oracle 関連のイベントにお手伝いに来られた新卒ホヤホヤの方と挨拶したと思ったら数年後には第一線の現場で一緒に仕事させていただいたりしていましたが、ITの知識がなかった新卒や中途入社の方が数年後には一流のDBエンジニアとして第一線の現場やイベントの発表などで活躍されていて、データベース*1を勉強するには最もよい会社の一つだと思っていました。そのコーソル社のエンジニア育成で培われたノウハウが詰まった一冊だと思います。

敢えてアーキテクチャの説明を必要最低限に抑えて、Oracle Database をインストールして使いながら一通りの機能を使いながらウォークスルーする構成になっていて、コーソル社の育成の現場で培われたノウハウが詰まっていることが感じとれます。

初心者が資格取得から始めると暗記科目のようになってしまい、業務で一通り触れてからとなると1年以上はかかってしまったりしますが、本書は初心者が Oracle Database を最初に学ぶ上での高速道路になると思います。

また、ただの機能説明だけではなく著者陣の経験から得られたハマりポイントやなぜそうするかが散りばめられており、初心者ではなくても気づきがあるのではないかと思います。



オススメの読み方

Oracle Database を使ったことがない初心者の方が手を動かしながら通読するのがオススメです。ORACLE MASTER 取得や DB エンジニアを目指されているか方もまずはこの本を Oracle Database を使いながら通読するのが一番の近道ではないかと思います。


対象読者

  • これまでOracle Databaseを使ったことがないOracle初心者の方
  • Oracle Databaseの基本を学びたい新人SE,新人アプリケーション開発者,新人データベース管理者の方
  • ORACLE MASTERの参考書を探している方

一部引用

  • はじめに(P.3-4)

そこで,本書はOracle独自の用語の使用を最小限にとどめ,次の2点を考えながら執筆しました。

  • 平易な表現を用いてOracleを解説すること
  • データベースOracle,開発,設計,運用の基本について広くさまざまな視点から学べること

これらの解説ノウハウは,弊社コーソルの新人教育で培われたものです。コーソルの新人教育には,約2週間という短い期間で多くの新卒エンジニアORACLE MASTER Bronze DBAに合格させているという実績があります。さらに最近では,IT 未経験の新人エンジニアが,入社から2年半で,ORACLE MASTER Platinum(2日間の実技試験により認定されるORACLE MASTERの最上位資格)を取得するような例も出てきています。本書には,コーソルの新人エンジニアの生の声を反映させ,ノウハウを惜しみなく注ぎ込みました。

Oracleの基本 ?データベース入門から設計/運用の初歩まで:書籍案内|技術評論社
  • おわりに(P.353)

入門書という位置づけから、本書では、機能や使用方法に重点をおいて説明しました。よって、アーキテクチャについての説明を割愛しているところがあります。しかし、ひととおり、 Oracle を使えるようになったら、アーキテクチャにも目を向けてみてください。エンジニアであれば、「ソフトウェアがどうやって動いているか」ということに興味を持つのは自然なことですし、なにより、アーキテクチャを知っているかどうかで、理解度やスキルの伸びに大きな差が出てきます。


目次

はじめに
本書について
第1章 データベースを知る
1.1 なぜデータベースは必要なのか
1.2 リレーショナルデータベースの基礎
本書の構成
第2章 Oracleを使ってみる
2.1 データベースを構築する
2.2 データベースに接続する
2.3 データベースを起動/停止する
2.4 学習用ユーザーを作成する
2.5 テーブルとデータ操作の基本
第3章 より高度なデータ操作を学ぶ
3.1 データを複雑な条件で検索する
3.2 データを加工/集計する
3.3 NULLとIS NULL条件
3.4 SELECT文とSELECT文を組み合わせる
3.5 テーブルを結合する
3.6 データの表示画面にこだわる
3.7 トランザクションでデータを安全に更新する
第4章 データをより高速に/安全に扱うしくみ
4.1 検索処理を高速化するインデックス
4.2 SELECT文をシンプルにまとめるビュー
4.3 不正なデータの混入を防ぐ制約
4.4 連番を振り出すシーケンス
4.5 セキュリティ機構の基礎となるユーザー機能
4.6 ユーザー権限を制御する
第5章 テーブル設計の基本を知る
5.1 テーブル設計とは
5.2 第1ステップ‐概念設計
5.3 第2ステップ‐論理設計
5.4 第3ステップ‐物理設計
第6章 データベース運用/管理のポイントを押さえる
6.1 データベースにおける運用/管理の重要性
6.2 バックアップを取ってデータを守る
6.3 データベースのメンテナンス
6.4 データベースを監視する
6.5 ネットワーク環境/本番環境でOracleに接続する
6.6 トラブルに立ち向かうためには
おわりに
索引
著者略歴
監修者略歴

*1データベースを勉強するなら Oracle Database から入るのがオススメです

2015-06-28

compat-libstdc++ をインストールしようとすると libc.so.6 が必要と怒られる

ちょっと質問されて回答したことをメモ。


事象

# yum install compat-libstdc++-33-3.2.3-69.el6.i686

...

エラー: 依存性の欠如:
        libc.so.6 は compat-libstdc++-33-3.2.3-69.el6.i686 に必要とされています

調査方法

  • yum provides で調べると 64bit の glibc しかインストールされていないことがわかる。
  • インストールしようとしているパッケージは32bit(i686)なので、32bit(i686) の glibc が必要。
$ yum provides */libc.so.6
glibc-2.12-1.47.el6.x86_64 : The GNU libc libraries ★←64bitしかインストールされていない
Repo        : installed
Matched from:
Filename    : /lib64/libc.so.6

原因


対処

# yum install glibc-2.12-1.149.el6_6.5.i686

参考

2014-09-02

SSHで公開鍵認証に失敗する

SSHで公開鍵認証に失敗するので原因を調べたらユーザの HOME ディレクトリのパーミッションが 777 になっていたからだった。~/.ssh ディレクトリや鍵ファイルのパーミッションが原因で失敗したことはあるけど、 これは初めて。


事象

  • SSHで公開鍵認証できるよう設定したがパスワードを求められる。
$ ssh oracle@192.168.0.179                                                                        
oracle@192.168.0.179's password: 
  • ssh で接続時に /var/log/secure に以下のメッセージが出力される。
Sep  2 11:51:32 hostname sshd[6989]: Authentication refused: bad ownership or modes for directory /home/oracle

原因


対処

$ chmod go-w /home/oracle

SSH公開鍵認証設定

以下の設定を行ったが公開鍵認証できなかったので、上記の対処を実施した。

サーバ
  • /etc/ssh/sshd_config の以下の行のコメントアウトを外す(#を削除する)
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile      .ssh/authorized_keys
  • 設定ミスがないか確認する。
    • 何も表示されなければミスはない
# /usr/sbin/sshd -t
  • sshd を再起動する
# service sshd restart
クライアント側
  • SSH鍵を作成する
$ ssh-keygen -t rsa 
Generating public/private rsa key pair.
Enter file in which to save the key (/home/yazekats/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
  • ~/.ssh/id_rsa.pub をサーバに転送する。
  • クライアントの公開鍵をサーバの authorized_keys に追加する。
$ cat id_rsa.pub >> authorized_keys