メンチカツには醤油でしょ!!

ITエンジニア徒然 (AWS/Java/JavaScript/Google Spreadsheets/Jenkins/Mac/外部コミュニティ・勉強会レポ)

IAMでRDSのインスタンス作成を制御する

IAMでRDSを制御する

たとえば、t2.microのPostgres 9.5インスタンスの作成をユーザーに許可するポリシーJSONは以下の通り。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "RDSList",
            "Effect": "Allow",
            "Action": "rds:Describe*",
            "Resource": "*"
        },
        {
            "Sid": "RDSCreatePostgres",
            "Effect": "Allow",
            "Action": [
                "rds:CreateDBInstance",
                "rds:AddTagsToResource",
                "rds:ListTagsForResource"
            ],
            "Resource": [
                "arn:aws:rds:ap-northeast-1:000000000000:db:mydb-*",
                "arn:aws:rds:ap-northeast-1:000000000000:og:default:postgres-9-5",
                "arn:aws:rds:ap-northeast-1:000000000000:pg:default.postgres9.5",
                "arn:aws:rds:ap-northeast-1:000000000000:subgrp:default"
            ],
            "Condition": {
                "StringEquals": {
                    "rds:DatabaseEngine": "postgres",
                    "rds:DatabaseClass": "db.t2.micro"
                }
            }
        }
    ]
}

対象リージョンを変更したい場合は、ap-northeast-1の部分を変更します。

000000000000の部分はアカウントNoです。

mydb-*の部分はDBインスタンス識別子です。 

rds:CreateDBInstance だけじゃ少し足りないかも

Actionの
    "rds:AddTagsToResource"
    "rds:ListTagsForResource"
はResourceの
    "arn:aws:rds:ap-northeast-1:000000000000:db:mydb-*"
にかかっています。

インスタンス作成時に同時にタグ追加(AddTagsToResource)が行われるため、その権限が必要になります。
(実際の画面では、インスタンス作成にタグ追加エラー表示が出るが、インスタンスは作成されます)

f:id:ryoichi0102:20170524165546p:plain

インスタンス作成後に自由にタグ追加されたくないのであれば設定すべきではないでしょう。上記のJSONから"rds:AddTagsToResource"を取り除きます。Resourceは"rds:CreateDBInstance"にもかかっているので取り除きません。

また、インスタンス作成後にユーザーがインスタンスの詳細を表示した際、タグの一覧表示の部分でエラーになるため、"rds:ListTagsForResource"を設定しています。

f:id:ryoichi0102:20170524170412p:plain

参考

"rds:DatabaseEngine": "postgres"
"rds:DatabaseClass": "db.t2.micro"
のあたりで指定できる値の一覧が載っています。

docs.aws.amazon.com

RDS+IAMの全体的なドキュメントはこちら。

docs.aws.amazon.com

JJUG CCC 2017 Spring スライドまとめ(随時更新) #jjug_ccc

まとめました

JJUG CCC 2017 Springの発表資料(スライド)を纏めました。
現在非公開になっているものは見つけ次第、追記していこうと思います。

また、漏れてたり間違ってたり追加があったり後に非公開になったりした場合は @ryoichi_obara までお知らせ頂ければと思います。
スライドが無くて、Togetterがあるものはそちらにリンク貼っていたりします。

A0 日本Javaユーザーグループ 年次総会

www.slideshare.net

ABCD1 JJUG CCC 20th fireside chat

未公開

E1 ふつうのJavaコーディング

F1 Hipsterで学ぶ!Springによるサーバサイド開発手法

GH1 非機能要件とSpring Boot

ABCD2 Java EE 8 and its latest topics

未公開

E2 Java Clientで入門するApache Kafka

www.slideshare.net

F2 エンプラ開発におけるレガシーアプリケーションの巻き取りとモジュール分割の戦い

www.slideshare.net

GH2 Vue.js + Spring Bootで楽しくフルスタック開発やってみた

Vue.js + Spring Bootで楽しくフルスタック開発やってみた

AB3 Scala機械学習基盤PredictionIOとSparkによるレコメンドシステム

CD3 新しいTERASOLUNA Batch Frameworkとは

未公開

E3 Java libraries you can't afford to miss

www.slideshare.net

F3 SpotBugs(FindBugs)による大規模ERPのコード品質改善

www.slideshare.net

GH3 データ履歴管理のためのテンポラルデータモデルとReladomoの紹介

www.slideshare.net

I1 全部 Java で作っちゃえ!! Vaadin 8 による "オール Java" Web アプリ開発のしくみと実践

全部 Java で作っちゃえ!😁 Vaadin 8 によるオール Java Web アプリ開発の仕組みと実践

L1 How to use MicroProfile and a way to rebirth Japanese enterprise computing

www.slideshare.net

M1 JavaエンジニアのためのPostgreSQLステップアップ

www.slideshare.net

AB4 ヤフーの広告レポートシステムをSpring Cloud Stream化するまで

www.slideshare.net

CD4 Unified JVM Logging: Java 9 から変わる JVM ログ

未公開

E4 What you need to know about HotSpot and Your Code

未公開

F4 ナビタイムも導入!!ボットで始発・終電案内から観光ガイドまで 〜 Java でも日本語自然言語処理をカンタンに利用可能 Microsoft LUIS!!

docs.com

GH4 Javaエンジニアに知って欲しいRDBアンチパターン

I2 Polyglot on the JVM with Graal

www.slideshare.net

L2 JavaエンジニアのためのScala入門

JavaエンジニアのためのScala入門 #jjug_ccc #ccc_l2 · GitHub

L3 新卒2年目が鍛えられたコードレビュー道場の軌跡

M2 文型さえおさえれば英語を読む力は上がる!

M3 Selenideを使ってみた 〜 ブラウザテスト自動化 〜

AB5 Scalaによるサービス開発現場での継続的リファクタリングの実践

未公開

CD5 Javaエンジニアから見たKotlinの魅力

www.slideshare.net

E5 Javaで実装して学ぶOAuth 2.0!

F5 Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めた

www.slideshare.net

GH5 Introduction of Project Jigsaw

www.slideshare.net

I3 Androidアプリ開発からみたRxJavaの使いどころ

L4 SIプロジェクトでよくあるフレームワークのカスタム開発ってまだ必要なの?

未公開

L5 Java8移行は怖くない~エンタープライズ案件でのJava8移行事例について~

www.slideshare.net

M4 今日からDL4J

M5 グラフデータベース入門

www.slideshare.net

AB6 Java8プログラミング ベストプラクティス & きしだが働いてるかどうかIDEのメモリ使用状況から機械学習で判定する

www.slideshare.net

CD6 劇的!データベース・ビフォーアフター 時代はディスクからインメモリーへ――

未公開

E6 Spark + DeepLearning4J の特長と最新動向(仮)

www.slideshare.net

id:Takakiyo 様、お知らせありがとうございます!

F6 U-NEXT学生インターン、過激なJavaの学び方と過激な要求

www.slideshare.net

GH6 Engineers can change the world ~ "世界" で活躍するエンジニアになるために

docs.com

I4 Arachne Unweaved

www.slideshare.net

L6 Javaとアイドルのコラボ!?某アイドルBot開発の裏側

L7 Javaチョットデキルへの道~JavaコアSDKに見る真似したいコード10選~

www.slideshare.net

M6 JavaFXでデスクトップガジェット風プログラムを作る

www.torutk.com

M7 新卒2年目から始めるOSSのススメ 〜明日からできるコミットデビュー〜

www.slideshare.net

AB7 VMの歩む道。Dalvik、ART、そしてJava VM

www.slideshare.net

CD7 マチコ&河村の怒り新党 〜真の最終回〜

未公開

GH7 ハックで生きる:オープンソースで会社を興すには

未公開

I5 Java x Arduinoで始めるIoT / フィジカルコンピューティング

未公開

L8 思ったほど怖くない!Haskell on JVM 超入門

www.slideshare.net

M8 Ordinary Object Pointer について調べてみた

docker-compose.ymlで指定したDockerfile内のADD/COPYが効かない

仕様???

Dockerfileに書いてあるADD/COPYコマンド(及び他のコマンド)がdocker-compose.ymlで指定された場合に作動しないのです。
RUNのみ有効、というのが余計にややこしい。

ファイルをコンテナ内にコピーしたい場合、docker-compose.ymlのvolumesを使わないとできない場合があります。
(volumes使えばできるので判ってれば問題にはならなそうですが)

github.com

(追記) バージョンが違うと挙動が違う

できなかった (Docker for Windows)

> docker -v
Docker version 17.03.1-ce, build c6d412e
> docker-compose -v
docker-compose version 1.11.2, build f963d76f

できなかった (Docker for Mac)

$ docker -v
Docker version 1.12.6, build 78d1802
$ docker-compose -v
docker-compose version 1.9.0, build 2585387

できた (Docker on Ubuntu on Hyper-V)

$ sudo docker -v
Docker version 17.03.1-ce, build c6d412e
$ sudo docker-compose -v
docker-compose version: 1.3.2
CPython version: 2.7.9
OpenSSL version: OpenSSL 1.0.1e 11 Feb 2013

(追記2) 公式ドキュメントでは出来そうな記載が...

You can add your code to the image using COPY or ADD directive in a Dockerfile.

You should use a volume if you want to make changes to your code and see them reflected immediately,

There may be cases where you’ll want to use both. You can have the image include the code using a COPY, and use a volume in your Compose file to include the code from the host during development. The volume overrides the directory contents of the image.

docs.docker.com

しかしThere may be cases where you’ll want to use both.が気になる…

ファイルの構成例 (一部)

/docker-compose.yml
/apache2.4/Dockerfile
/apache2.4/htdocs/index.html
/apache2.4/conf/httpd.conf

というような構成で、
Apacheのhtdocsディレクトリはディレクトリまるごと同期しても構わないのでvolumes指定
・confディレクトリ配下はいくつかファイルがあって上書きしたいのがhttpd.confだけなのでADDかCOPYしたい
みたいな場合に、docker-composeだとADD/COPYができないってことなんです。

docker-compose.yml (一部)

apache:
    build: ./apache2.4/
    volumes:
        - ./apache2.4/htdocs:/usr/local/apache2/htdocs
    links:
        - tomcat:tomcat

Dockerfile

FROM httpd:2.4.25

RUN apt-get update && apt-get install -y \
  nano

ADD ./conf/httpd.conf /usr/local/apache2/conf/httpd.conf

結局どうしたか

コンテナ内のconf配下のファイルを全部docker cpで拾ってきて配置しました。
と、思いきや、volumesにはファイルも指定できるんでしたね。

docker-compose.yml (一部)

apache:
    build: ./apache2.4/
    volumes:
        - ./apache2.4/htdocs:/usr/local/apache2/htdocs
        - ./apache2.4/conf/httpd.conf:/usr/local/apache2/conf/httpd.conf
links:
        - tomcat:tomcat

Dockerfile

FROM httpd:2.4.25

RUN apt-get update && apt-get install -y \
  nano

できた!

github.com