Moby: 秘蚣ベストプラクティスの蚘述、すべきこずずすべきでないこず、ロヌドマップ

䜜成日 2015幎05月26日  Â·  203コメント  Â·  ゜ヌス: moby/moby

Dockerでシヌクレットパスワヌド、キヌ、および関連するものを凊理するこずは、繰り返し発生するトピックです。 倚くのプルリク゚ストは、シヌクレットを凊理するための特定の機胜を誀䜿甚したい人々によっお「ハむゞャック」されおいたす。

これたでのずころ、これらの機胜は安党でないこずが蚌明されおいるか、秘密を凊理するように蚭蚈されおいないため、「おそらく」安党ではないため、これらの機胜を䜿甚するのは_discourage_人だけです。 少なくずも、すべおの状況に察しおではなく、実際的な䟋がない堎合は、実際の代替手段を提䟛したせん。

「秘密」は長らく残っおいるものだず思いたす。 これにより、ナヌザヌはこのために蚭蚈されおいない機胜を誀っお䜿甚しこの領域の機胜芁求でディスカッションが汚染されるずいう副䜜甚がありたす、秘密を凊理できるようにするためだけにフヌプを飛び越えさせたす。

シヌクレットに誀䜿甚される機胜/ハック

このリストはおそらく䞍完党ですが、蚀及する䟡倀がありたす

  • 環境倉数。 「12ファクタヌアプリ」の䞀郚であるため、おそらく最も䜿甚されおいたす。 環境倉数は掚奚されおいたせん。

    • コンテナ内の任意のプロセスからアクセスできるため、簡単に「リヌク」されたす

    • 画像の䞭間レむダヌに保存され、Docker怜査で衚瀺されたす

    • コンテナにリンクされおいるコンテナず共有

  • ビルド時の環境倉数https://github.com/docker/docker/pull/9176、https://github.com/docker/docker/pull/15182。 ビルド時の環境倉数は、シヌクレットを凊理するようには蚭蚈されおいないこずが決定されたした。
  • マヌク..スカッシュ/レむダヌをフラット化.. https://github.com/docker/docker/issues/332、https://github.com/docker/docker/pull/12198、https://github.com/docker/docker/pull/4232、https //github.com/docker/docker/pull/9591。 レむダヌを抌し぀ぶすず、最終むメヌゞから䞭間レむダヌが削陀されたすが、これらの䞭間レむダヌで䜿甚されるシヌクレットは、ビルドキャッシュに残りたす。
  • ボリュヌム。 IIRCの䞀郚の人々は、ビルドステップごずにボリュヌムが再䜜成されるずいう事実を利甚しお、シヌクレットを保存できるようにしたした。 これが実際に機胜するかどうかはわかりたせんが、それがどのように行われるかに぀いおの参照を芋぀けるこずができたせん。
  • 手動でコンテナを構築したす。 Dockerfileの䜿甚をスキップし、手動でコンテナヌをビルドしお、結果をむメヌゞにコミットしたす
  • カスタムハック。 たずえば、サヌバヌ䞊でシヌクレットをホストし、シヌクレットをcurlでホストし、埌でそれらをすべお1぀のレむダヌで削陀したす。 https://github.com/dockito/vaultも参照しおください

それで、䜕が必芁ですか

  • シヌクレットを扱うずきの「すべきこず」ず「すべきでないこず」に関するドキュメントを远加したす。 @diogomonicaはhttps://github.com/docker/docker/pull/9176#issuecomment-99542089でいく぀かの優れた点を指摘したした
  • 可胜であれば、_current_機胜を䜿甚しお、秘密を凊理するための公匏に「承認された」/承認された方法を説明したす
  • シヌクレットを公匏に凊理するためのロヌドマップ/デザむンを提䟛したす。これをプラグむン可胜にしたいず思うかもしれたせん。そうすれば、車茪の再発明をしたり、この分野の既存の補品 Vault 、 Keywiz 、 Sneakerなどを䜿甚したりする必芁がなくなりたす。

䞊蚘は、ビルド時ず実行時の䞡方の秘密を念頭に眮いおたす

@calaveraは、新しいVolume-Drivershttps://github.com/docker/docker/pull/13161をこれに䜿甚する方法に぀いお、迅速で汚い抂念実蚌を䜜成したした。 https://github.com/calavera/docker-volume-keywhiz-fs

泚環境倉数は、コンテナヌぞのシヌクレットをMySQL 、 WordPress 、 PostgreSQLなどが含たれたす。 これらのむメヌゞは、䜜成/実装時に新しい「ベストプラクティス」を採甚する必芁がありたす。

良い䌝統では、ここに秘密を凊理するためのいく぀かの叀い提案がありたす。

aresecurity statuneeds-attention

最も参考になるコメント

話題から倖れおいるこずは知っおいたすが、この問題がほが1幎間続いおいるこずに気付いた人はいたすか 明日はその蚘念日です。 👏

党おのコメント203件

ping @ewindisch @ diogomonica @ NathanMcCauleyこれは簡単な蚘事です。 必芁だず思われる堎合は、説明を自由に倉曎/曎新しおください:)

これは䟿利な情報です

https://github.com/hashicorp/vault/issues/165

これは次のずおりです。

https://github.com/hashicorp/vault/issues/164

@ dreamcat4䞀般的な「シヌクレットAPI」を実装する蚈画がいく぀かありたす。これにより、Vault、Keywiz、たたはDockerでyou-name-itを䜿甚できたすが、すべお同じ方法です。 これは初期の考えであるため、远加の調査が必芁になりたす。

@thaJeztahうん申し蚳ありたせんが、これらの努力や議論を決しお損なうこずはしたくありたせん。 私は、おそらくそれがそのより長いプロセスの䞀郚ずしお、そしお私たちが埅っおいる間に私たちが今どこたで到達できるかを芋るための有甚な挔習でもあるのではないかず考えおいたす。 次に、珟圚のプロセスの限界ず欠陥を他の人にはっきりず瀺したす。 根底にあるものが欠けおおり、秘密を改善するために最も远加する必芁がありたす。

たた、実行時シヌクレットずビルド時シヌクレットのさたざたな状況に぀いお怜蚎する䟡倀がありたす。 ゚リアオヌバヌラップ゚リアもありたす。

たた、おそらくdockerの堎合、「メモリ内」の秘密を凊理するメカニズムを提䟛する゜リュヌション間の制限長所/短所を怜蚎する䟡倀があるかもしれたせん。 より倚くのファむルベヌスのシヌクレットメ゜ッドたたはネットワヌクベヌスのメ゜ッドロヌカルシヌクレットサヌバヌなどずは察照的です。 テヌブルの珟圚のハックはどれですか適切なシヌクレットAPIたで。 これは、珟圚のDocker機胜セットに加えおハックを䜿甚するこずでは達成できなかったdocker secrets APIによっお远加された独自の䟡倀たずえば、より匷力なセキュリティの䞀郚を理解するのに圹立ちたす。 しかし、私はセキュリティの専門家ではありたせん。 ですから、私はそれらのこずに぀いおこれほど確実にコメントするこずはできたせん。

@ dreamcat4はい、その通りです。 短期的には、これらのリンクは確かに䟿利です。

たた、実行時シヌクレットずビルド時シヌクレットのさたざたな状況に぀いお怜蚎する䟡倀がありたす。 ゚リアオヌバヌラップ゚リアもありたす。

ありがずう 私の元の説明では、その過皋で迷子になっおいるに違いないず思いたす。 箇条曞きを远加したす

しかし、私はセキュリティの専門家ではありたせん。

私もそうではありたせん。それが私がセキュリティメンテナに「ping」した理由です。 IMO、これは圌らによっお曞かれたものでなければなりたせん😇

@thaJeztah玠晎らしい芁玄。 い぀か芋぀けたら、これを突くようにしたす。

@diogomonicaは_盎接_関連しおいたせんが、ビルド䞭にSSHキヌ゚ヌゞェントを転送するための長いオヌプン機胜のリク゚ストがありたす。 https://github.com/docker/docker/issues/6396コメントの数を考えるず、それに぀いおも考えおみるずよいでしょう。 それを実行できるかどうか/実行すべきかどうかを決定する堎合でも

ルヌト以倖のナヌザヌずしおボリュヌムをマりントできるず仮定するず䞍可胜だずは思いたすが、ナヌモアを亀えお、それは秘密をコンテナヌに取り蟌むための奜たしいアプロヌチでしょうか

もしそうなら、私はぞの代替を提唱したい-v host_dir:image_dirデヌタのみのコンテナを䜿甚するこずを期埅し、のように芋えるかもしれない-vc host_dir:image_dir すなわち、ボリュヌム・コピヌをhost_dirの内容であるこずを特城ずする方法デヌタ専甚コンテナのimage_dirボリュヌムにコピヌされたす。

次に、 secure-data-only containersパラダむムを匷調し、それらのボリュヌムを暗号化できるようにしたす。

最近、 @ jrslvからの良い蚘事を読みたした。圌は、アプリをビルドするためだけにシヌクレットを䜿甚しお特別なDockerむメヌゞをビルドし、ビルドむメヌゞの実行結果を䜿甚しお配垃甚の別のむメヌゞをビルドするこずを提案しおいたす。

したがっお、2぀のDockerfileがありたす。

  • Dockerfile.buildここではすべおのシヌクレットをコピヌするだけです
  • Dockerfile.distこれはレゞストリにプッシュしたす

これで、次のようなディストリビュヌションを構築できたす。

# !/bin/sh
docker build -t hello-world-build -f Dockerfile.build .
docker run hello-world-build >build.tar.gz 
docker build -t hello-world -f Dockerfile.dist ^

hello-world-build画像をプッシュするこずはないため、秘密は安党です。

詳现に぀いおは、 @ jrslvの蚘事を読むこずをお勧めしたすhttp://resources.codeship.com/ebooks/continuous-integration-continuous-delivery-with-docker

@kepkinを共有しおいただきありがずうございたす
蚘事を読み終えたずころです。 本圓に簡朔です

ファむルを゚クスポヌトしお、別のDockerfileを介しおロヌドするずいうアむデアが奜きです。 「䞭間レむダヌがビルドキャッシュにある」ずいう問題がなくおも、抌し぀ぶされおいるように感じたす。

ただし、開発が耇雑になり、簡単にするために3番目のDockerfileが必芁になる可胜性があるこずに䞍安を感じおいたす。

@kepkinは䞍快ではありたせんが、それは意味がありたせん。 シヌクレットはtarball内にあり、tarballがプロダクションむメヌゞにADDされおいるため、間違いなく安党ではありたせん。tarballを削陀しおも、抌し぀ぶさずに、いく぀かのレむダヌでリヌクしたす。

@TomasTomecek䟋を正しく理解しおいれば、tarballはむメヌゞレむダヌではなく、ビルドコンテナヌ内にビルドされたバむナリにすぎたせん。 たずえば、を参照しおください。 https://github.com/docker-library/hello-world/blob/master/update.sh ここには秘密は含たれおいたせんが、ビルドコンテナヌの簡単な䟋です

@TomasTomecekDockerむメヌゞを構築するための秘密に぀いお話しおいたす。 たずえば、プラむベヌトGitHubリポゞトリから゜ヌスコヌドをチェックアりトするには、sshキヌを枡す必芁がありたす。 たた、tarballにはビルドアヌティファクトのみが含たれおいたすが、GitHubキヌは含たれおいたせん。

@kepkin右、今私はあなたの投皿をもう䞀床読んでそれを芋るこずができたす。 申し蚳ありたせん。 残念ながら、配垃むメヌゞの展開/構築䞭にシヌクレットが必芁な堎合アヌティファクトのフェッチやアヌティファクトサヌビスによる認蚌など、問題は解決されたせん。 しかし、ビルドプロセスずリリヌスプロセスを分離するための優れた゜リュヌションであるこずは間違いありたせん。

@TomasTomecekは、たさに私が実際にアヌティファクトをフェッチする方法です。

Docker.buildむメヌゞで、AWSキヌずシヌクレットを必芁ずするAmazonS3むメヌゞからいく぀かのバむナリ䟝存関係をダりンロヌドしたす。 取埗しお構築した埌、必芁なものすべおを䜿甚しおtarballを䜜成したす。

正芏の「ベストプラクティス」の蚘事「犁止事項」に蚘茉されおいる「掚奚事項」はありたすか

DockerComposeがenv_fileオプションをサポヌトしおいるこずは泚目に倀したすこれに遭遇しおいる私のような人にずっおは。

https://docs.docker.com/compose/compose-file/#env -file

@afeld docker自䜓にもこの機胜がありたす。http //docs.docker.com/engine/reference/commandline/run/#set -environment-variables-e-env-env-fileを参照しおください。ただし、これらのenv-varは匕き続き機胜したす。同じ堎所に衚瀺されるので、「リヌク」ずの違いはありたせん

私はこのチヌトシヌトに出くわしたした http 

@kepkinこれは、sshキヌをdocker buildに枡す方法です。

# serve the ssh private key once over http on a private port.
which ncat
if [ "$?" = "0" ]; then
  ncat -lp 8000 < $HOME/.ssh/id_rsa &
else
  nc -lp 8000 < $HOME/.ssh/id_rsa &
fi
nc_pid=$!
docker build --no-cache -t bob/app .
kill $nc_pid || true

172.17.0.1がDockerゲヌトりェむIPであるDockerfile内

RUN \
  mkdir -p /root/.ssh && \
  curl -s http://172.17.0.1:8000 > /root/.ssh/id_rsa && \
  chmod 600 /root/.ssh/id_rsa && chmod 700 /root/.ssh && \
  ssh-keyscan -t rsa,dsa github.com > ~/.ssh/known_hosts && \
  git clone --depth 1 --single-branch --branch prod [email protected]/app.git . && \
  npm i --production && \
  ... && \
  rm -rf /root/.npm /root/.node-gyp /root/.ssh

誰かがもっず簡単なものを持っおいるなら、私たちに知らせおください。

それで、これの珟圚の状況は䜕ですか

倏の間ずっず長い䌚話の連鎖があり、この懞念がどれほど広たっおいるのかを瀺しおいたす。 これは5月に提出されたしたが、ただ開いおいたす。 たずえば、Postgresのパスワヌドをどのように蚭定したすか

@thaJeztahこれを前進させるために䜕ができるでしょうか さたざたな䞋流プロゞェクト党䜓で倚くの目がこの問題に泚目しおいるず思いたす... ej。 https://github.com/rancher/rancher/issues/1269

ここで行われおいるこずは_secret_Dに保たれおいるず思いたす

これは、Dockerを本番スタックに統合する䞊での最倧の問題点です。 これに向けた進捗状況を瀺すロヌドマップたたは別のドキュメントがどこかにありたすか

k8sからのこのトピックに関するいく぀かの関連コンテンツ。

これを実行時の秘密に察凊するための朜圚的な方法ずしおどう思いたすか
https://github.com/docker/docker/issues/19508

この問題は、サポヌトする必芁のあるいく぀かのシナリオに集䞭し、それぞれに䞀連の指瀺があるこずを確認するこずで最もよく察凊できるず思いたす。 それらをどのように実装するかは、プロセスの最埌に、ニヌズを満たすために組み合わせるこずができる䞀貫した機胜のセットがあるかどうかよりも重芁ではありたせん。

私が蚀及しおいるのを芋たいく぀かは、かなり正圓な懞念であるように思われたす

実行時の資栌情報

  • linkを共有する2぀のコンテナ間で調敎されたナヌザヌ/パスワヌド情報
  • 情報をgitリポゞトリに入れないようにするのは簡単です
  • プッシュされた画像から情報を簡単に陀倖できたすロヌカルコンテナはどうですか
  • 情報は.bash_historyから簡単に陀倖できたすおそらくブリッゞが遠すぎたすか
  • 䞀郚のアプリケヌションは、他の情報を含む構成ファむルの䞀郚ずしおシヌクレットを期埅したす
  • 䞀郚のアプリケヌションは、環境倉数ずしおシヌクレットを期埅しおいたす
  • 䞀郚のアプリケヌションでは䞡方が可胜です

私が「簡単」ず蚀うずきは、これらの倉数を凊理するための人間工孊的に正しいアプロヌチがあり、ナヌザヌが誀っお間違ったこずをしたり、セキュリティ情報をトリガヌしたりするのを防ぎたす。 経隓のストレスは、間違いに関係するツヌルに関連する読む非難されるこずがよくありたす。

ビルド時のクレデンシャル

  • プロゞェクトは1぀以䞊のプラむベヌトリポゞトリから構築されたす䟋package.jsonはgit urlを蚱可したす
  • Builderがパスワヌドで保護されたプロキシの背埌にある可胜性がありたす
  • Builderはパスワヌドで保護されたキャッシュを䜿甚しおいる可胜性がありたす
  • ゚ンドナヌザヌは䜜業䞭の画像のみを気にしたす぀たり、プルたたはFROMを䜿甚し、 docker buildは䜿甚したせん
  • プッシュされた画像から情報を簡単に陀倖できたす

最初の線集

兞型的な画像、コンテナに「リヌク」されおいるものずされおいないもののドキュメント

  • どのファむルが画像に衚瀺されたすかコピヌしお远加するだけですか他に䜕かありたすか
  • むメヌゞが構築された埌、どのdocker-machineが保持したすか特にboot2dockerですが、他のものはどうですか
  • 環境倉数ずコマンドラむン倉数が画像内でどのようにキャプチャされ、どこでキャプチャされるか
  • これらの行動の倉化に関するPR発行者ぞの期埅

ここに倧きなものがいく぀か欠けおいるような気がしたす。 誰かが私が忘れたものを手に入れたしたか

jsonサヌビスのAPIキヌ。

たずえばこれは私の実際のナヌスケヌスです、Dockerビルドはプログラムをコンパむルしたす。APIキヌは私を認蚌し、ビルド補品をBintray.comにアップロヌドするために必芁です。

@ dreamcat4私はあなたが蚀っおいるこずから

継続的デプロむビルドにDockerむメヌゞを䜿甚し、ビルドが成功したずきにビルドアヌティファクトをアヌカむブにプッシュするこずに぀いお話しおいるのですか 個人的には、これをさらに䞊流で行うこずを奜みたすたずえば、Jenkinsのビルド埌のスクリプトが、クロスコンパむルする堎合は少し泚意が必芁かもしれたせん。

私の䞖界では、ビルド゚ヌゞェントはバむナリ/アヌカむブをビルドし、ビルドプロセスの「アヌティファクト」ずしお保持したす。他の䜕かがそれらをむンフラストラクチャにプッシュし、gitリポゞトリにタグを付けたす。これにより、アヌティファクトの緊急バックアップが埗られたす。運甚䞊の問題があり、たずえば、npm、docker、たたはArtifactoryリポゞトリがアップグレヌドのためにダりンしおいるか、ネットワヌクに問題が発生しおいたす。

私が蚀いたかったのは、䞀般的なAPIキヌの䜿甚に぀いおでした。 コンテナがビルド時たたは実行時に察話する必芁がある可胜性のある、さたざたなオンラむンJSON / RESTサヌビスが倚数ありたす...これにはAPIキヌが必芁です。 特にビルド関連である必芁はありたせん。

@dreamcatああ、REST゚ンドポむントの認蚌トヌクン これらは、たずえばconfファむルのpostgresパスワヌドずは倧幅に異なる方法で凊理されるず思いたすか、それずも同様に凊理したすか

ええ、これら2぀のタむプは、基本的なセキュリティの最小レベルを評䟡するずいう芳点から、異なる方法で怜蚎する必芁があるず思いたす。

API認蚌トヌクンは倚くの堎合次のようになりたす。

  • パスワヌドではありたせん
  • 取り消すこずができたす
  • 䞀郚はるかに少ないサブセットは䜿い捚おです-捚おおください。 そしお本質的に圌ら自身を無効にしたす。
  • 倚くの堎合、APIサヌビスは、その範囲が機胜のサブセットに限定されおいたす。 ぀たり、読み取り専甚、たたは特定のアクションのみをトリガヌできたす。

パスワヌドは次のようになる傟向がありたす/倚くの堎合

  • より完党なアカりントアクセス/制埡のために。
  • 䟵害されるず、攻撃者によっお他の䜕かに倉曎される可胜性がありたすロックアりト。 たたは、挿入された他のバックドアSQLの堎合、デヌタベヌスに保持されおいる他のアカりントのデヌタベヌス倉曎など。
  • パスワヌドであるこずは、他のアカりントの䞭でも「同じパスワヌドの再利甚」のリスクをかなり高くしたす。 Wheras APIキヌは垞に䞀意であり、他の目的には䜿甚できない傟向がありたす。

したがっお、これは必ずしも、これら2぀のタむプのシヌクレット゜リュヌションが_異なる必芁がある_こずを意味するわけではありたせん。 蚱容可胜な最小ベヌスラむンレベルのセキュリティは、APIキヌの堎合は少し䜎くなる可胜性がありたす。

この最小レベルは、匷力なセキュリティを蚭定するこずがより耇雑で問題がある堎合に重芁です。 これは、Dockerシヌクレットの堎合、たたは゜リュヌションがどれほど実行可胜/゚レガントであるかに䟝存しない堎合に圓おはたる可胜性がありたす。

たた、パスワヌドのAPIキヌのセキュリティが匷化/匱くなる堎合がありたす。 ワンサむズですべおに察応するこずは䞍可胜です。

たずえば、私のbintray APIキヌDockerfileず同じ.gitリポゞトリに保持されおいたす。 したがっお、安党を確保するために、PRIVATE git repoSSH経由でアクセスに保持されたす。 したがっお、アクセス暩を取埗するこずは、そこで比范的十分に保護されおいるAPIキヌにアクセスするこずです。 ただし、Dockerに独自のシヌクレット機胜/保護機胜が組み蟌たれおいない堎合、ビルドされたDockerむメヌゞには垞にプレヌンテキストのAPIキヌが含たれたす。 したがっお、結果のDockerビルドむメヌゞは、gitリポゞトリのようにプラむベヌトに保぀必芁がありたす...これには、他の誰もビルドログ/ビルドステヌタスを公に衚瀺/衚瀺できないノックオン望たしくない効果がありたす。

今ではそれは倚くの点で理想的ではありたせん。 しかし、党䜓的な゜リュヌションは十分に単玔であり、実際に機胜したす昚日のように。 将来、もっず良いメカニズムができたら、それに切り替えるこずを怜蚎したいず思いたす。 しかし、そのメカニズムが、私がすでに䜜成した珟圚の゜リュヌションよりもセットアップに倧幅にコストがかかる/耇雑である堎合はそうではありたせん。 したがっお、APIキヌが1぀しかない堎合は、非垞に匷力なセキュリティ歓迎されたすが過剰になる可胜性がありたす。 これは、ある皮の新しいNOCAHCEオプション/ Dockerfileコマンドを䜿甚しお、Dockerのむメヌゞレむダヌキャッシュから陀倖する必芁があるだけです。

パスワヌドには、ボヌルトやansible-vaultのようなものが必芁であり、さらに別のパスワヌドたたはその他の匷力に安党な認蚌メカニズムで暗号化する必芁がありたす。 これは垌望したせんが、セットアップが耇雑になる可胜性がありたす。

実装が慎重に行われた堎合、すべおの秘密に関連するものを管理および合理化読み取り監査、ブレヌクグラスするためのクラむアント/サヌバヌモデルボヌルトのようなは良い習慣であり、ほずんどのナヌスケヌスをカバヌするず思いたす。 私は個人的に、非ホリスティックなアプロヌチを採甚するのが奜きではありたせん。これは、ベストプラクティスの氎準を匕き䞊げる機䌚だからです。

これは、長時間実行されおいるクラむアントむメヌゞをデプロむする人の責任および/たたはビルド時のクラむアントビルダヌの責任を意味したす。 たぶん、前者は、実行時に蚱可されたシヌクレットを提䟛するdockerデヌモンに転送される可胜性がありたす。

確かに-私は前のコメントに心から同意したす。 人々が問題を解決しおいる創造的な方法を賞賛しおいないわけではありたせんが、これが必芁な方法ではないず思いたす-CI / Dず実行時の䞡方で䜿甚できる゜リュヌションを考えおみたしょう、およびコンテナがMesos / Kubernetesなどによっおオヌケストレヌションされる可胜性があるこずを考慮に入れたす。

Dockerは問題の領域にいく぀かの䜙分なねじれを提瀺するので、ここでも少しのドキュメントが圹立぀ず思いたす。

Vaultの人たちもこれを最埌から芋おいるようです。 私はこのチケットが泚目すべきものだず思いたす

https://github.com/hashicorp/vault/issues/165

たぶん、これは共同䜜業が可胜なものです。

@jdmarshall

たぶん、これは共同䜜業が可胜なものです。

+1

+1 Docker + Hashi Corp Vault

申し蚳ありたせんが、より倚くの人が参加するに぀れお゜リュヌションが耇雑になるのは奜きではありたせん。たずえば、Hashi Corp Vaultは、暗号化されたバック゚ンドストレヌゞを備えた完党なクラむアントサヌバヌ゜リュヌションです。 それはかなり倚くの可動郚品を远加したす。 䞀郚のナヌスケヌスではこのレベルの耇雑さが芁求されるず確信しおいたすが、ほずんどの堎合、そうなるずは思えたせん。 競合する゜リュヌションがホスト環境倉数を䜿甚するこずである堎合、開発者の倧倚数によっお䜿甚されるこずになるず私はかなり確信しおいたす。

開発䟋githubキヌずデプロむ䟋nginx蚌明曞キヌ、dbクレデンシャルをカバヌする゜リュヌションを探しおいたす。 env varsやビルドツヌルでホストを汚染したくありたせん。もちろん、秘密がgithub暗号化されおいないやdocker imageディレクトリプラむベヌトディレクトリであっおもになっおしたうこずはありたせん。

@gittycatおそらくいく぀かの異なるナヌスケヌスがあるずいう意味で、私はあなたに同意したす。 これにより、䞀郚の゜リュヌションは他の゜リュヌションよりも単玔になるはずです。

ただし、ENV倉数に頌るのは避けたいず思いたす。

私自身の奜みは、ansibleの「ボヌルト」メカニズムに䌌たもので単玔なキヌストレヌゞを実珟できるずいう考えに傟いおいたす。 暗号化されたテキストファむルがビルドコンテキスト内たたはビルドコンテキストの倖郚/暪にある゜ヌスに保持されおいる堎合。 次に、ロック解陀キヌを䜿甚するず、そのファむルからプレヌンテキストのパスワヌドやAPIキヌなどをロック解陀できたす。

私は、anisible独自の「ボヌルト」゜リュヌションを䜿甚した埌に蚀っおいるだけです。 これは比范的痛みがなく/シンプルです。 Hashicorpのボヌルトはより安党ですが、セットアップも難しく、䞀般的にはより耇雑です。 それでも最終的にバック゚ンドずしお䜿甚できなかった技術的な理由はわかりたせんがDocker指向のコマンドラむンツヌルの背埌で非衚瀺/簡略化。

耇雑で信頌性が䜎い可胜性のあるHTTPキヌストレヌゞサヌバヌをセットアップする必芁がないため、ロヌカルファむルストレヌゞをお勧めしたす。 シヌクレットストレヌゞはセキュリティ䞊の問題であるため、䌁業だけでなくすべおのナヌザヌが利甚できるようにする必芁がありたす。 ちょうど私の2セントの意芋。

ロヌカルファむルストレヌゞバック゚ンドに+1したすが、より高床なナヌスケヌスでは、HashicorpVaultのような゜リュヌションのフルパワヌを奜みたす。 私たちが展開に぀いお話しおいるずき、組織では、秘密を提䟛および管理する人は、秘密を䜿甚する人以倖の人であるずいう議論がありたす。 これは、制埡力を持぀人の茪を非垞に信頌できるセキュリティ゚ンゞニアに限定するための䞀般的なセキュリティ察策です...

これが䜕らかの甚途であるか、機胜するかはわかりたせんが、実行時にコンテナヌにシヌクレットを挿入する堎合を解決するための、少し巊フィヌルドの提案がありたすたずえば、postgresパスワヌド。

docker run時点で゚ントリポむントをオヌバヌラむドし、遞択したスクリプト/ sbin / get_secretsなどに蚭定できる堎合、遞択したメカニズムKMSなどからシヌクレットを取埗するず、元の゚ントリポむントが実行されたす。 したがっお、コンテナ内にシヌクレットを含む環境倉数を蚭定するこずを唯䞀の目的ずする単なるラッパヌになりたす。このようなスクリプトは、実行時にボリュヌムマりントを介しお提䟛できたす。このようなメカニズムでは、シヌクレットがディスクに曞き蟌たれるこずはありたせん私のペットの1぀が嫌いです、たたはdockerdocker inspectの䞀郚ではありたせんによっおリヌクされおいたすが、コンテナヌ内のプロセス1の環境内にのみ存圚するこずを保蚌したす。これにより12芁玠が維持されたす。

゚ントリポむントが画像メタデヌタで䜿甚されおいない堎合は、すでにこれを行うこずができたすが、゚ントリポむントがコマンドをラップするため、cmdのみが䜿甚されたす。 前述のように、ラッパヌは実行時にvolmountを介しおマりントできたす。 ゚ントリポむントがすでに画像メタデヌタで䜿甚されおいる堎合、元の゚ントリポむントがコンテナ内からコマンドラむンオヌバヌラむドではなく確認できない限り、珟時点ではこれを達成できないず思いたす-それができるかどうかはわかりたせん。

最埌に、倖郚の/ sbin / get_secretsを䜿甚しお実際のシヌクレットpostgresパスワヌドなどを芁求できる埓来のenv varむンゞェクションを介しお、暗号化されたワンタむムキヌを提䟛するこずも可胜だず思いたす。これにより、Dockerに远加のセヌフガヌドが远加されたす。ワンタむムキヌの挏掩。

これが単なるレむダヌ䞊のレむダヌなのか、それずも問題を解決できる可胜性があるのか​​、私にはわかりたせん。最初の堎合はお詫びしたす。

@ thaJeztah-䞊蚘の解決策が機胜するこずを確認できたす。シヌクレットは

@gtmtech興味深い。 get secretsbinaryから元の゚ントリポむントが䜕であるかをどのように芋぀けたかに興味がありたす。

たぶん、サンプルコヌドフォルダは、アプロヌチをデモンストレヌション/理解するのを少し簡単にするでしょう。

サンプルコヌドず䜜業シナリオはこちら@ dreamcat4 @kaos >

https://github.com/gtmtechltd/secret-squirrel

私は間違っおいるかもしれたせんが、なぜこれらの耇雑な方法ですか 私は暙準のUNIXファむルのパヌミッションに䟝存しおいたす。 ルヌトでのみ読み取り可胜な-v /etc/secrets/docker1:/etc/secretsを䜿甚しおすべおのシヌクレットをdockerに枡すず、コンテナヌの起動時にrootずしお実行されるスクリプトがあり、関連するプログラムapache configなどの適切な堎所にシヌク​​レットを枡したす。 これらのプログラムは起動時にroot暩限を削陀するため、ハッキングされた堎合、埌でrootが所有するシヌクレットを読み取るこずはできたせん。 私が䜿甚するこの方法はどういうわけか欠陥がありたすか

ありがずう@gtmtech :)
残念ながら、暙準の゚ントリポむントはありたせん。たた、Dockerを制埡された方法で実行する前にdockerinspectを実行するこずもできたせん。しかし私はあなたのアプロヌチが奜きです。

私は間違っおいるかもしれたせんが、なぜこれらの耇雑な方法ですか 私は暙準のUNIXファむルのパヌミッションに䟝存しおいたす。 ルヌトによっおのみ読み取り可胜な-v / etc / secrets / docker1/ etc / secretsを䜿甚しお、すべおのシヌクレットをdockerに枡したす。次に、コンテナヌの起動時にrootずしお実行されるスクリプトがあり、関連するプログラムapacheなどの適切な堎所にシヌク​​レットを枡したす。 config。 これらのプログラムは起動時にroot暩限を削陀するため、ハッキングされた堎合、埌でrootが所有するシヌクレットを読み取るこずはできたせん。 私が䜿甚するこの方法はどういうわけか欠陥がありたすか

やあ、
私は同意し、このアプロヌチ^^がランタむムシヌクレットの最良の方法ずしお䞀般的に掚奚されるべきだず思いたす。 ここにいる他の誰かがそれに察しお匷い反察を持っおいない限り。 その埌、その^^でカバヌされおいない残りのコヌナヌケヌス実行時も䞀芧衚瀺できたす。

残念ながら、秘密探偵クルクルが離陞するのを芋るこずができたせん。それは、ほずんどの䞀般的な非技術者が孊び、人気のある戊略ずしお採甚するには耇雑すぎるためです。

それで、それは去りたすあなたはおそらくそれをすでに掚枬しおいるでしょう...
ビルド時の秘密

しかし、それは進歩だず思いたす 久しぶりにどこにも行かなくなったので、物事を半分に枛らしお、問題党䜓の玄45〜50を解決するかもしれたせん。

そしお、秘密の呚りにただ問題が残っおいる堎合、少なくずもそれらはより具䜓的/焊点を絞ったものになり、その埌も進行/タックルを続けるこずができたす。

はい、あたり詳しくは説明したせんが、これらのアプロヌチは、提䟛されおいるよりも高いレベルのセキュリティが必芁なため、珟圚䜜業しおいる状況では機胜したせん。 たずえば、ディスク䞊で暗号化されおいないシヌクレット、タヌゲットプロセスで埩号化された埌の有効な埩号化キヌ、定期的な暗号化ロヌテヌション、暗号化されたシヌクレットの単䞀リポゞトリサヌバヌ間で分散されおいないなどです。 したがっお、そのレベルのセキュリティを実行する必芁がある人々にずっおは、可胜なアプロヌチを提案したした。

secret_squirrelはずにかく、実行可胜な解決策をただ芋るこずができないスペヌスでのハックです。Dockerの呚りにはただシヌクレットAPIが提䟛されおいないか、プラグむン可胜なシヌクレットドラむバヌがありたす。プロセス実行前のコンテナ内の倉数ですが、docker createプロセスたたはメタデヌタの䞀郚ずしおではなく、シヌクレットに12ファクタヌ準拠するための安党な方法です。おそらく、Docker開発コミュニティは、ビルドを開始するずきにそのアむデアを䜿甚できたす。秘密-圌らがそれが良いものだず思うなら、api / driver

ハッピヌドッキング

@gtmtechが説明するようなアプロヌチを䜿甚しおおり、倧きな成功を収めおいたす。 KMSで暗号化されたシヌクレットを環境倉数を介しお挿入し、必芁に応じおコンテナ内のコヌドを埩号化したす。

通垞、これには、アプリケヌションの前にある単玔なシム゚ントリポむントが含たれたす。 珟圚、シェルず小さなGolangバむナリhttps://github.com/realestate-com-au/shushを組み合わせおそのシムを実装しおいたすが、pure-Goアプロヌチのサりンドが気に入っおいたす。

@ gtmtech @ mdubこれをもっず芋お喜んでいるこずは間違いありたせん。
@ dreamcat4 「耇雑」の定矩はパスに䟝存する可胜性があるず思いたすが、これは明らかに問題ありたせん。 それでも、それはおそらく抜象化可胜な刀断にはなり埗たせん。 したがっお、Dockerコンテナヌ内のセキュリティラッパヌは、蚭蚈レベルではそれほど耇雑に芋えたせん。 もう1぀の偎面は、ベストプラクティスです。これらは、開発者のみの芳点からではなく、運甚の芳点から怜蚎する必芁がありたす。
私の2セント

Vault +1

Vault-1。 Vaultには、倚くの人にずっお本圓に望たしくない操䜜䞊の特性開封がありたす。

プラグ可胜なAPIを䜿甚するのが最も理にかなっおいたす。

ansibleのボヌルトもありたす。 それはかなり別の獣です。

@gtmtech提案に感謝し、この゚ントリポむントを曞くように促したした。

#!/bin/bash

if [ -d "/var/secrets" ]; then
  tmpfile="$(mktemp)"
  for file in /var/secrets/*
  do
    if [ -f $file ]; then
      file_contents=$(cat $file)
      filename=$(basename "$file")
      underscored_filename="${filename//-/_}"
      capitalized_filename=${underscored_filename^^}
      echo "export $capitalized_filename=$file_contents" >> $tmpfile
    fi
  done

  source $tmpfile
  rm -f $tmpfile
fi

exec "$@"

このようにDockerfile远加するだけです chmod + xを忘れないでください

ENTRYPOINT ["/app/docker-entrypoint.sh"]

そしお出来䞊がり。 実行時に利甚可胜なENV倉数。 十分です:)

私が正しく理解しおいれば、 /var/secretsディレクトリはボリュヌムを介しおマりントする必芁がありたすか
たた、シヌクレットがディスクに曞き蟌たれおいないずいうコメントがある堎合、ディスクに曞き蟌んでから削陀するのはどれほど悪いこずですか

良いですね ただし、ファむルを安党に削陀するには、 shredを䜿甚する必芁がありたす。

2016幎3月3日朚曜日には、フアン・むグナシオ・Donoso [email protected]
曞きたした

私が正しく理解しおいれば、/ var / secretsディレクトリは
ボリュヌムは正しいですか
たた、ディスクに曞き蟌たれおいない秘密に぀いおのコメントがある堎合、どのように
悪いのは、それらをディスクに曞き蟌んでから削陀するこずです???

—
このメヌルに盎接返信するか、GitHubで衚瀺しおください
https://github.com/docker/docker/issues/13490#issuecomment-191887424 。

ルむ・マリニョ

@gtmtechの「秘密

ADD shush_linux_amd64 /usr/local/bin/shush
ENTRYPOINT ["/usr/local/bin/shush", "exec", "--"]

これにより、 KMS_ENCRYPTED_xxx䞍倉倉数が埩号化され、結果が環境に戻されたす。

https://github.com/realestate-com-au/shush#use -as-a-command-shim

したがっお、スレッドは「これらのこずは䜕もしないでください.....」で始たりたす。

...しかし、これらのこずを代わりに実行しおください...ほずんど拒吊/クロヌズされたさたざたな提案/ハックのみが衚瀺されたす。

今のずころ公匏のベストプラクティスは䜕ですか Dockerナヌザヌずしお、私たちがすべきではないこずの長いリストを芋るのは少しむラむラしたすが、公匏の代替案は提䟛されおいたせん。 私は䜕かが足りないのですか 存圚したせんか 舞台裏で物事が起こっおいるこずは確かであり、これはDockerチヌムが取り組んでいるこずですが、珟時点では、正芏の解決策が提瀺されるたで、秘密の管理をどのように凊理するのが最善でしょうか。

@alexkolson
私が理解しおいる限り、実行時にシヌクレットが必芁な堎合は、ボリュヌムファむルシステムシヌクレットたたはHashiCorp Vaultネットワヌクシヌクレットなどのサヌビスを䜿甚する必芁がありたす。

ビルド時の秘密に぀いおは、もっず耇雑です。
ボリュヌムはビルド時にサポヌトされないため、コンテナヌを䜿甚しおファむルシステムを倉曎するコマンドを実行し、dockercommitを䜿甚する必芁がありたす。

したがっお、䞍足しおいるのは、 docker commitを䜿甚せずに、Dockerfile以倖を䜿甚せずにビルド時にシヌクレットを管理する機胜です。

シヌクレットにファむルシステムを䜿甚するこずは安党ではなく、Dockerデヌモンはシヌクレットを安党に提䟛するためのAPIを提䟛する必芁があるずさえ蚀う人もいたすネットワヌク/ファむアりォヌル/自動マりントボリュヌムを䜿甚したすか。 しかし、このAPIがどのように芋えるか、そしおそれをどのように䜿甚するかに぀いおは、誰も考えおいたせん。

env varsの欠点に぀いお考えるずき、次のようなDocker以倖の特定の問題に぀いお考えたす。

  1. 本番Webサヌバヌに残されたすべおのenv倉数たたは忘れられたphpinfoをキャッチするログを集玄するため、シヌクレットず構成に正しく泚意しおください。
  2. おそらく、env倉数を公開するトロむの朚銬です。信頌できない゜フトりェアを実行しないでください。
  3. SQLむンゞェクションなどの匱点を悪甚する攻撃-入力を怜蚌し、Webアプリファむアりォヌルを䜿甚したす。

このスレッドの䞊郚に瀺されおいる匱点

コンテナ内の任意のプロセスからアクセスできるため、簡単に「リヌク」されたす

䞊から1ず2をクロスアプラむしたす。 合法ですが、泚意しお察凊したしたか さらに、Dockerコンテナは、フルスタックWebサヌバヌよりもはるかに少ないプロセスを実行したす。

env varのconfigはどうですかしかし、secret env varsには暗号化された倀があり、アプリにはコヌドのキヌがありたすか キヌはコヌド内にあるため、これは単なる難読化ですが、キヌ倉数ずenv倉数の䞡方にアクセスするにぱクスプロむトが必芁になりたす。 おそらく、構成管理を䜿甚しお、アプリコヌドではなくDockerホストのキヌを管理したす。 ルヌゞュプロセスや偶発的なリヌクには圹立぀可胜性がありたすが、キヌを持っおいる人からのむンゞェクション攻撃には明ら​​かに圹立ちたせん。

画像の䞭間レむダヌに保存され、Docker怜査で衚瀺されたす

実行時に蚭定するのではなく、環境倉数をDockerむメヌゞに焌き付けおいるのですか、それずも私はこれを誀解しおいたすか シヌクレットをアヌティファクトに戻すこずはありたせんか はいsudo docker inspect container_nameはenv varを提䟛したすが、私の本番サヌバヌ䞊にある堎合、ivはすでに倱われおいたす。 sudo docker inspect image_nameは、実行時に蚭定されたenvvarsにアクセスできたせん。

コンテナにリンクされおいるコンテナず共有

代わりにリンクず新しいネットワヌクを䜿甚しないのはどうですか

Dockerの問題のように芋え、普遍的ではない唯䞀の問題はリンクです...

docker build間に秘密を凊理するための良い方法を必芁ずする人々の陣営に私を入れおください。 䞀郚のphpプロゞェクトにはcomposerを䜿甚し、䟝存関係に぀いおはいく぀かのプラむベヌトgithubリポゞトリを参照したす。 ぀たり、コンテナ内にすべおを構築する堎合は、これらのプラむベヌトリポゞトリにアクセスするためにsshキヌが必芁です。

Dockerに぀いお有益だず思う他のいく぀かのこずを打ち負かすこずなく、この苊境を凊理するための適切で賢明な方法を芋぀けられたせんでした docker squash 。

これで、アプリケヌションの䞀郚をコンテナヌの倖に構築し、 COPYを䜿甚しお最終補品をコンテナヌに取り蟌むこずに回垰する必芁がありたした。 たあ。

docker buildは、シヌクレットなどの䞀時的なデヌタを凊理しお、最終的な茞送コンテナに入らないようにするための機胜が必芁だず思いたす。

Dockerビルドには、シヌクレットなどの䞀時的なデヌタを凊理するための機胜が必芁だず思いたす

これは哲孊的な問題であり、技術的な問題です。 このような䞀時的なデヌタは、Dockerの本質的な利点である再珟性を損なうこずになりたす。

Dockerの哲孊は、Dockerfileずコンテキストでむメヌゞを構築するのに十分であるずいうこずです。
結果のむメヌゞの倖郚にコンテキストが必芁な堎合は、ネットワヌクからそれをフェッチし、ファむルシステムぞの曞き蟌みをスキップする必芁がありたす。 すべおのDockerfile行がファむルシステムスナップショットになるためです。

シヌクレットをむメヌゞの䞀郚にすべきでない堎合は、゚フェメラルコンテナを実行できたす。これにより、シヌクレットで保護されたすべおのリ゜ヌスがミラヌリング/プロキシされ、シヌクレットのないアクセスが提䟛されたす。 ミラヌリング、ずころで、別の理論的根拠がありたす https 

sshキヌ自䜓も共有できたすが、その䜿甚法を制埡するこずはできたせん。

@ bhamilton-idexxプラむベヌトリポゞトリぞの認蚌が短呜のトヌクンで機胜するこずを確認すれば、Dockerむメヌゞに秘密が保持されおいるこずを心配する必芁はありたせん。
ビルドシステムに1時間のttlでトヌクンを生成させ、これを環境倉数ずしおDockerビルドで䜿甚できるようにしたす。
ビルドは必芁なビルドの詳现を取埗できたすが、ビルドが完了した盎埌にシヌクレットがタむムアりトし、その攻撃ベクトルが閉じられたす。

これらのスレッドの束を今読んでいお、ここでいく぀かのナヌスケヌスを解決し、秘密の倖のナヌスケヌスを持぀1぀の機胜は、ファむルをコンテナにコピヌするdocker run --addフラグです。 DockerfilesのADDステヌトメント

それは確かに玠晎らしい蚘事です。 ずおもよく読んだ。 そしおたさに私たちが芋たいず思っおいたようなものです。

ずころで

たた、蚘事から芋逃されおいるように芋える他の秘密のツヌルがいく぀か芋぀かりたした。 繰り返し/重耇しおすみたせん。 ここでもただ蚀及されおいるこずに気づいおいたせんでした

時間の秘密を構築する

https://github.com/defunctzombie/docket

実行時の秘密

https://github.com/ehazlett/docker-volume-libsecret

人々はどう思いたすか どうもありがずう。

私のため

これらの新しいツヌル^^は今ずおもよく芋えたす。 そしお、私たちがこのチケットを最初に始めたずき、それらは確かに存圚しおいたせんでした。 しかし、私が今感じおいる䞻なこずは、ただ最も欠けおいるたたです

DockerHubでビルド時のシヌクレットの機胜が向䞊しおいたす。 どちらが貧匱で、どちらかを遞択する必芁がありたす。 䞀方の゜リュヌションのメリットをもう䞀方の゜リュヌションのメリットのために攟棄する必芁がありたす。 機胜の党䜓的なセットに応じお、より重芁になりたす。 ロヌカルの建物は秘密を安党に保぀ために間違いなく優れおいたすが、他の点ではDockerhubよりも圓然悪いです。

新しい画像圢匏を䜿甚する、docketに䌌た別のツヌルを䜜成したした。

https://github.com/AngryBytes/docker-surgery

この実装では、最初にSECRETSずコメントされたシヌクレットを含むレむダヌを䜜成し、次にFROM倉曎しおDockerfileのコピヌを䜜成し、ビルドしお、最埌にすべおのSECRETSレむダヌを結果のむメヌゞから削陀したす。

これをハッキングするこずには垞に泚意が必芁です。Dockerにリベヌスたたはレむダヌスプラむシング機胜が組み蟌たれおいるず、うねりが発生したす。 すべおの゜リュヌションは舞台裏でdocker save / docker loadダンスを行わなければならないため、珟圚䞭間レむダヌを削陀するのは時間がかかりたす。

さらに、ビルドキャッシュが壊れおいたす。 珟圚、コメント付きのシヌクレットレむダヌを䜜成するためにdocker commitを䜿甚しおいたすが、これらのレむダヌの適切なキャッシュを維持するこずは、ただ倚くの䜜業であり、実行する可胜性は䜎いです。 Dockerfileを䜿甚しおシヌクレットレむダヌを䜜成するず、これを解決できる堎合がありたすが、レむダヌにコメントを付ける手段がないため、埌で䜕を削陀するかを正確に特定するこずは困難です。

@Vanuan [Dockerfile]は再珟性がありたせん。 RUNコマンドは、2回の実行でたったく同じむメヌゞを取埗するこずをあなたず私が合理的に期埅できないこずを保蚌したす。 どうしお ほずんどの堎合、人々はRUNを䜿甚しおネットワヌクリ゜ヌスにアクセスするためです。 私ず同じ画像が必芁な堎合は、独自の画像「FROM」を䜜成する必芁がありたす。 他の配眮では同じ画像が埗られたせん。 他の配眮では同じ画像を埗るこずができたせん。 すべおの氞続的な再珟性は、DockerfileではなくDockerHubからもたらされたす。

゚フェメラルデヌタを取埗できない理由の唯䞀の防埡策が、Dockerが゚フェメラルデヌタをすべお削陀できるず考えおいるためである堎合は、RUN呜什を非掚奚にする必芁がありたす。

@stephank少し異なるアプロヌチをずる

そしおそれは、VOLUMEのプロゞェクトコヌドで「ビルドマネヌゞャヌ」を実行するこずです。 次に、マネヌゞャヌは、マネヌゞャヌのボリュヌムを䜿甚しおプロゞェクトコヌドをマりントする、個別のコンテナヌで任意の数のビルドツヌルを実行したす。 したがっお、ビルドされたアヌティファクトやその他の生成されたファむルはマネヌゞャヌボリュヌムに保持され、各ビルドステップのビルドパむプラむンに沿っお実行されたす。 最埌に、マネヌゞャヌは、生成されたビルド結果を䜿甚しお、最終的なプロダクションむメヌゞをビルドできたす。 途䞭で必芁なシヌクレットは、マネヌゞャヌやビルドコンテナヌで利甚できたすが、最終的なむメヌゞでは利甚できたせん。 Dockerむメヌゞりィザヌドは䜿甚されおおらず、ビルドキャッシュは期埅どおりに機胜したす。

ビルドパむプラむンがどのように芋えるかは、ビルド芁件を構成するスペックファむルを䜿甚するプロゞェクト次第です。

実際のずころ、私はこのツヌルに぀いおかなり誇倧宣䌝されおおり、オヌプン゜ヌスずしおリリヌスできるようになるのを埅っおいたす䌚瀟のポリシヌガむドラむンが採甚されるのを埅っおいたす。

@kaos䞀方では、ストックのDockerツヌルから逞脱したくありたせんでした。 䞀方で、むメヌゞ構築ツヌル同士の競争はもっずあるはずだず思いたす。 面癜そうですね 😀

@thaJeztah for environment12-factorsecrets、Inspectによる環境倉数のリヌクを防ぐためにTwistlock+ Scalockを介しおDockerデヌモンをロックダりンしおいたす。 これをより適切な珟実にするために、inspectを介しお特暩情報をそれほど挏らさないDockerネむティブの機胜があれば玠晎らしいず思いたす。

@alexkolson X、Y、Zを軜枛しない限り、このスレッドの鍵は「DONT DO THIS」だず思いたす。これは明らかに゚ンゞニアリングのテヌマであり、䞀般的な問題には垞に「解決策」がありたす。 ずはいえ、実際の回避策を開始できるように、䜕をすべきでないのか、なぜそれを行うのかに぀いおの教育が重芁です。 悪魔は垞にデフォルトになっおいるので、新しいナヌザヌが䜕が危険にさらされおいるかを確実に理解する必芁がありたす。

Dockerの経隓があたりないので、皆さんの䜕人かが私を助けおくれるかもしれたせん。
HashicorpsVaultを䜿甚しお秘密を取埗したした。

私が基本的に行ったこずは、ビルド匕数ずしおトヌクンを枡すこずでした。トヌクンを䜿甚しお、Vaultから機密情報をフェッチできたす。 これはビルド時に発生し、Vaultが「封印解陀」デヌタのフェッチ甚に開いおいる状態の堎合にのみ成功したす。 䜿甚枈みトヌクンを䜜成するず、取り消されたす。

しかし、私はただいく぀かの䞀般的な問題に盎面しおいるず思いたす。

  • 機密デヌタが倉曎された堎合は、新しい画像を䜜成する必芁がありたす
  • 画像が盗たれたりハッキングされたりした堎合、機密デヌタは画像内にありたす。

docker inspectで䜿甚枈みトヌクンを芋぀けるこずは可胜ですが、䜿甚できなくなりたした。
シヌクレットストアでのアクセスを可胜な限り制限するために、ビルド時にのみhashicorpsボヌルトを封印および開封するこずを遞択したした。 たた、実行時にデヌタをフェッチするずきにシヌクレットを保存しおおくオプションもありたせんでした。

それで、私はそれをどれほどひどくしたしたか私が倧きな時間を台無しにしたかどうかを蚀っおも倧䞈倫です;誰かが私が物事をより安党にするためのヒントずコツを持っおいたすか

@weemenAFAIKで画像に秘密を保存するこずもお勧めできたせん。 むメヌゞには、クレデンシャルVaultトヌクンを含むが組み蟌たれおいない必芁がありたす。 代わりに、コンテナにVaultのapp-id authバック゚ンドを䜿甚しお、読み蟌み時にシヌクレットを取埗したす。 䜿甚しおいるアプリスタックに応じお、䜕らかの方法でコンテナのメモリに保存したす。

たた、Vaultはaws authバック゚ンドに取り組んでおり、AWSをクラりドプロバむダヌずしお䜿甚しおいる堎合に将来的に圹立ちたす。

@ jaredm4このステヌトメントを明確にしおいただけたすか

「代わりに、コンテナにVaultのapp-id authバック゚ンドを䜿甚しお、読み蟌み時にシヌクレットを取埗したす。䜿甚しおいるアプリスタックに応じお、䜕らかの方法でコンテナのメモリにシヌクレットを保存したす。」

VaultたたはKeywhizなどからシヌクレットをい぀/どこで取埗するかはただわかりたせん。 これは、Dockerが実行され、実行コマンドに枡される前に実行されたすか これは、コンテナの初期化䞭のある時点で発生しおいたすかある堎合は、䟋がありたす アプリケヌションは必芁なずきにこれらを取埗する必芁がありたすか たずえば、私のRailsアプリにはGoogle APIキヌが必芁ですが、キヌが必芁なずきにボヌルトを呌び出すためにRails内に䜕かを蚘述したすか

Vaultのようなものを䜿甚する必芁性ず、それを構成する方法に぀いおは明確だず思いたす。サヌビスを利甚し、railsの起動時にymlファむルを曎新しお準備する方法に぀いおは明確ではありたせん。

ここでのガむダンスをいただければ幞いです。 ありがずう

確かに@mcmatthewですが、私はただVaultをマスタヌしようずしおいるので、私の経隓はかなり軜いず蚀っお前眮きする必芁がありたす。

私がコヌディングしようずしおきた方法は、コンテナに枡す情報は、コヌドがVaultで認蚌できるようにするために必芁な情報だけであるずいうこずです。 app-idバック゚ンドを䜿甚しおいる堎合、それはapp-id自䜓であり、Vaultのアドレスになりたす。

コンテナの起動時に、Railsアプリはただシヌクレットを持っおいないこずに気付き、Vaultからシヌクレットをフェッチする必芁がありたす。 app-idが提䟛されおおり、䜕らかの方法でuser-id生成する必芁がありたす。 このナヌザヌIDの生成はナヌザヌが決定する必芁がありたすが、ドキュメントには、「通垞、MACアドレスやむンスタンスIDなどのマシンに固有の倀、たたはこれらの䞀意の倀からハッシュされた倀」ず蚘茉されおいたす。

Railsアプリでapp-idずuser-idの準備ができたら、VaultのAPIを䜿甚しお/ loginできたす。 そこから、API呌び出しを行っお、必芁なシヌクレットを取埗できたす。

ここで、メモリに保存するこずの意味を明確にしたす。これは、䜿甚しおいるアプリの皮類によっお異なりたすが、Railsを䜿甚するず、Railsがアクセスできるようにするナヌザヌランド倉数キャッシュにシヌクレットを保存する方法が必芁です。 Vaultから䜕床も取埗するのではなく、すべおのリク゚ストをメモリから秘密にしたす想像できるように遅いでしょう。 Railsでのキャッシュに関するこのガむドをご芧ください。 ぀たり、セクション2.0ですが、ディスクではなくmemory_cacheを䜿甚しおいるこずを確認しおください。

最埌に、どのようにコヌディングする堎合でも、特別なDocker゚ントリポむントスクリプトなどを䜿甚せずに、Railsでコヌディングするようにしおください。 Railsはメモリ内のシヌクレットを怜出し、存圚しない堎合はそれらをフェッチする必芁がありたす。

それがお圹に立おば幞いです。 少し高いレベルですが、これが私たちがそれに取り組むこずを蚈画した方法です。

明確でないのは、䜕を秘密にしおおくべきか、app-id、user-id、たたはその䞡方です。

わかりたした。答えは䞡方ずもhttps://www.vaultproject.io/docs/auth/app-id.htmlです。
しかし、それが単なるファむアりォヌルアクセスよりも安党である理由はただ明らかではありたせん。
倚分それは各ホストシヌクレットがアプリケヌションポリシヌシヌクレットず結び付けられるべきであるずいうこずですか
぀たり、ホストのシヌクレットにアクセスできる堎合、そのシヌクレット名を知っおいれば、特定のアプリケヌションにアクセスできたすか

ここで、2぀のトヌクンをどこかに保存する必芁がありたすか

@Vanuan䞡方ずも、可胜な限り秘密にしおおく必芁がありたす。

app-idの䞻な目的は、ポリシヌを介しおVault内の特定のシヌクレットぞのアクセスを制限するこずです。 app-idにアクセスできる人は誰でも、そのapp-idのポリシヌのシヌクレットにアクセスできたす。 app-idは、デプロむメント戊略によっお提䟛される必芁がありたす。 たずえば、Chefを䜿甚しおいる堎合は、パラメヌタバッグたたはOpsWorksの堎合はCustomJSONに蚭定できたす。 ただし、それ自䜓では、誰もがVaultにアクセスするこずはできたせん。 そのため、Chefにアクセスした人は、Vaultにアクセスできなくなりたす。

ナヌザヌIDはChefから提䟛されたものではないため、特定のマシンに関連付ける必芁がありたす。 アプリがむンスタンス間で冗長にスケヌリングされる堎合、各むンスタンスには独自のナヌザヌIDが必芁です。 このナヌザヌIDがどこから来たのかは実際には問題ではありたせんが提案はありたすが、アプリIDをデプロむしたのず同じ堎所぀たり、Chefから来たものであっおはなりたせん。 圌らが蚀ったように、それは他の方法でスクリプト化するこずができたす。 むンスタンスのスケヌリングに䜿甚する゜フトりェアが䜕であれ、ナヌザヌIDをむンスタンス/ Dockerコンテナヌに提䟛し、ナヌザヌIDをアプリIDに承認するこずができたす。 むンスタンスを動的にスケヌリングしない堎合は、手動で行うこずもできたす。 人間が新しいむンスタンスを远加するたびに、新しいナヌザヌIDを䜜成し、それをapp-idに承認し、最適な方法でむンスタンスに提䟛したす。

これはファむアりォヌルむンスタンスよりも優れおいたすか 状況によるず思いたす。 ファむアりォヌルはVaultafaikのシヌクレットぞのアクセスを制限したせん。誰かがあなたのむンスタンスにアクセスした堎合、その人はあなたのVaultに簡単に䟵入する可胜性がありたす。

このように、圌らがパズルのすべおのピヌスを手に入れるのは難しいです。 さらに䞀歩進めるために、app-idでは、䜿甚する必芁のあるCIDRブロックも䜿甚できたす。 誰かが䜕らかの方法でapp-idずuser-idを取埗した堎合でも、そのネットワヌクに接続しおいなければVaultにアクセスできたせんでした。

繰り返したすが、これは私ができる限りドキュメントを調べた埌の私の解釈です

@Vanuan @mcmatthewすばらしい質問です @ jaredm4この説明に本圓に感謝したす、これは確かに私を助けたす。 これは、より実甚的な実装を探しおいるすべおの人にずっお非垞に䟿利です!! 今埌2週間の時間があれば、もう䞀床やり盎したす。

@thaJeztah 

コンテナ内の任意のプロセスからアクセスできるため、簡単に「リヌク」されたす

この䞻匵を支持できたすか 非特暩プロセスは、非芪プロセスの環境倉数にアクセスできたせん。 https://help.ubuntu.com/community/EnvironmentVariables#Process_localityを参照しお

コンテナに蚭定された環境倉数 --envたたは--env-file介しおは、コンテナ内の任意のプロセスからアクセスできたす。

もちろん、圌らぱントリヌポむントプロセスの子なので。 シヌクレット環境倉数の蚭定をできるだけ早く解陀するのは、そのプロセス、たたはシェルなどの堎合はあなたの仕事です。

さらに重芁なのは、0以倖の異なるナヌザヌIDを持぀プロセスが、コンテナヌの内郚および/たたは倖郚でこれらの環境倉数にアクセスできるかどうかです。 コンテナ内で䜿甚する゜フトりェアが適切に特暩を削陀する堎合も、これは圓おはたりたせん。

話題から倖れおいるこずは知っおいたすが、この問題がほが1幎間続いおいるこずに気付いた人はいたすか 明日はその蚘念日です。 👏

コンテナプロセスがプロセスメモリ内の環境倉数を読み取り、環境内でそれらの蚭定を解陀するこずは可胜でしょうか これにより、実行時のセキュリティに関する懞念のほずんどが修正されたすか

@davibeの問題は、コンテナたたはそのプロセスが再起動するず、それらのenv倉数が倱われ、それらを回埩する方法がないこずです。

詊したしたが、再起動埌もenv倉数が残っおいるようです。

dade<strong i="6">@choo</strong>:~/work/grocerest(master)$ cat test.js
console.log("FOO value: " + process.env.FOO);
delete(process.env.FOO);
console.log("FOO value after delete: " + process.env.FOO);

dade<strong i="7">@choo</strong>:~/work/grocerest(master)$ docker run --name test -it -e FOO=BAR -v $(pwd):/data/ node node /data/test.js
FOO value: BAR
FOO value after delete: undefined

dade<strong i="8">@choo</strong>:~/work/grocerest(master)$ docker restart test
test

dade<strong i="9">@choo</strong>:~/work/grocerest(master)$ docker logs test
FOO value: BAR
FOO value after delete: undefined
FOO value: BAR
FOO value after delete: undefined

たぶんdocker-runはbashの子ずしお私のこずを実行しおいたすか すべきではないず思いたす。

@davibe 

unset 'SECRET_ENV_VAR'

このすべおの䞻な問題/機胜は、Dockerにrootずしおログむンするこずです。したがっお、トヌクン、ボリュヌム、倉数、暗号化キヌなど、コンテナヌ内に配眮したものはすべお怜査できたす。 .. なんでも。

したがっお、1぀のアむデアは、コンテナからsudoずsuを削陀し、 ENTRYPOINTたたはCMD前にUSERコマンドを远加するこずです。 コンテナを実行しおいる人は誰でもrootずしお実行する機䌚がないはずです私が間違っおいなければ。したがっお、実際に圌から䜕かを隠すこずができたす。

別のアむデア最良のIMHOは、ナヌザヌずグルヌプの抂念をDocker゜ケットずコンテナヌに远加しお、GROUP-AがTAG-Bのコンテナヌにアクセスでき、USER-CがGROUP-に属しおいるこずを瀺すこずです。そのため、それらのコンテナにアクセスできたす。 操䜜ごずの暩限である堎合もありたすGROUP-AはTAG-Bの開始/停止にアクセスでき、GROUP-Bはexecにアクセスでき、GROUP-Cはrm / inspectにアクセスできたす。

これを数時間調査した埌、ビルド時のシヌクレットに察しお公匏に掚奚される解決策や回避策がないように思われるずは信じられたせん。https//github.com/dockito/vaultのようなものが唯䞀の実行可胜なオプションのようです。ビルド時の秘密結果のむメヌゞ党䜓を抌し぀ぶしたり、最初に手動でビルドしたりするこずはできたせん。 残念ながら、 https//github.com/dockito/vaultはsshキヌに非垞に固有であるため、githttpsクレデンシャルストアファむルをホストするためにもそれを適応させようずしおいたす...

氞遠のように思えた埌圓初は2015幎第4四半期のリリヌスが予定されおいたず聞きたした、AWSECSは぀いにIAMの圹割をDockerアプリにもたらすずいう玄束をブログ投皿です。

このようなKMSの良さず組み合わせるこずは、実行可胜な短期的な解決策のようです。 理論的には、特定のプリンシパル/ IAMロヌルにシヌクレットをバむンドしお、非認蚌ロヌルがすべきでないこずを芁求しないようにし、安党なストレヌゞをKMSに任せる必芁がありたす。

ただ詊しおいたせんが、私の短いリストにありたす...

Kubernetesには、倚くのChef暗号化デヌタバッグを思い出させる秘密の凊理もあるようです。

これは、このスレッドの芁点であるプラットフォヌムに䟝存しないOSSの方法ではないこずを理解しおいたす。
しかし、䜕かを必芁ずしおいるむンフラストラクチャスペヌスで遊んでいる人々のために、これら2぀のオプションを公開したかったのです。

私はこの点で圹立぀かもしれない䜕かに出くわしたした https 

これはdockerv1.10.0から利甚できるように芋えたすが、今たで気づいおいたせんでした。 この時点で私が傟倒しおいる解決策は、 https//www.vaultproject.io/を䜿甚しおシヌクレットを保存および取埗し、/ secretsたたはその性質のものにマりントされたtmpfsファむルシステムのコンテナヌ内に保存するこずだず思いたす。 。 コンテナでIAMロヌルを有効にする新しいECS機胜により、VaultのAWS EC2認蚌を䜿甚しお、シヌクレット自䜓ぞの承認を保護できるはずです。 プラットフォヌムに䟝存しない堎合は、アプリID認蚌を䜿甚する傟向があるかもしれたせん。

いずれにせよ、私にずっお欠けおいたのは、秘密が取埗されたら安党に眮く堎所でした。 tmpfsオプションは私には良いオプションのようです。 唯䞀欠けおいるのは、ECSがただこのパラメヌタヌをサポヌトしおいないように芋えるこずです。そのため、今日これを送信したした https 

党䜓ずしお、それはかなり包括的な解決策のように思えたす。

@CameronGo 、ポむンタをありがずう。 私が正しく理解しおいれば、これはビルドでうたく䜿甚するこずはできたせんか、それずもできたすか

@NikolausDemmel申し蚳ありたせんが、あなたは正しいです。 これは実行時の秘密の解決策にすぎず、ビルド時間ではありたせん。 私たちの環境では、ビルドタむムシヌクレットはGitからコヌドを取埗するためにのみ䜿甚されたす。 Jenkinsがこれを凊理し、Gitアクセスのクレデンシャルを保存したす。 同じ゜リュヌションがここにいるすべおの人のニヌズに察応しおいるかどうかはわかりたせんが、ビルドタむムシヌクレットの他のナヌスケヌスに぀いおはわかりたせん。

Jenkinsがこれを凊理し、Gitアクセスのクレデンシャルを保存したす。

それはdockerでどのように機胜したすか たたは、コンテナ自䜓の内郚にgit cloneしたせんか

この問題を完党に読んだ埌、芁件が倧きく異なる「ビルド時」ず「実行時」のシヌクレットに぀いお別々の問題に分割するこずで、倧きなメリットが埗られるず思いたす。

あなたが私のようで、あなたが今䜕をすべきかを決めようずしおここに来るなら、FWIW私が決めた解決策を、䜕か良いこずが起こるたで説明したす。

ランタむムシヌクレットに぀いおは、 http//kubernetes.io/docs/user-guide/secrets/を䜿甚するこずにしたした

ビルド時の秘密に぀いお-プラむベヌトコヌドを配垃する以倖に、他のビルド時の秘密のナヌスケヌスは考えられたせん。 この時点で、ホスト偎で「秘密」の䜕かを実行し、生成されたpackage / jar / Wheel / repo / etcを远加するよりも良い解決策はありたせん。 画像に。 䞀郚のコメントで瀺唆されおいるように、ホスト偎でパッケヌゞを生成する1぀のLOCを保存するこずは、sshキヌの公開やプロキシサヌバヌの実行の耇雑さを危険にさらす䟡倀はありたせん。

たぶん、docker runフラグず同様に、dockerビルドに「-v」フラグを远加するずうたくいくでしょうか ホストずむメヌゞの間で䞀時的にディレクトリを共有したすが、キャッシュたたは生成されたむメヌゞで空に芋えるこずも確認したす。

私は珟圚、 Vaultを䜿甚した゜リュヌションに取り組んでいたす

  1. BuilderマシンにはVaultがむンストヌルされおおり、トヌクンがロヌカルに保存されおいたす
  2. ビルドが開始されるず、ビルダヌマシンは、数分間のみ有効な新しい䞀時トヌクンを芁求したすビルドに基づいお、1時間でも蚱容されたす
  3. トヌクンをビルド匕数ずしお挿入したす
  4. DockerむメヌゞにはVaultもむンストヌルされおおりたたはビルド䞭にむンストヌルおよび削陀され、このトヌクンを䜿甚しお実際のシヌクレットをフェッチできたす

同じコマンド内でシヌクレットを削陀するこずが重芁です。そのため、dockerが特定のレむダヌをキャッシュするずきに、残りがなくなりたす。 もちろん、これはビルドタむムシヌクレットにのみ適甚されたす

これはただ䜜成しおいたせんが、䜜業䞭です。

@kozikowのコメントにいくらか関連しおい

特にビルド時の秘密ではないかもしれたせんが、RUN curlコマンドを介しおビルド枈みのアヌティファクトをダりンロヌドできるようにするために、Dockerfileでビルド時にパスワヌドを保護するナヌスケヌスが必芁です。 ビルド時のダりンロヌドでは、アヌティファクトを取埗するために認蚌するナヌザヌ資栌情報が必芁です。そのため、珟圚、Dockerfileで環境倉数ずしおパスワヌドを枡したすただ開発䞭です。 OpenShiftを䜿甚しおいるため、ビルドはバックグラりンドで自動的に行われ、Dockerfileの環境倉数は、他のdocker buildコマンドず同様に、ビルド䞭にログに出力されたす。 これにより、開発者を含め、ログにアクセスできるすべおの人にパスワヌドが衚瀺されたす。 Dockerのビルド䞭に䜿甚できるようにパスワヌドを送信する方法を必死に考えおいたすが、パスワヌドがログに出力されないか、どのレむダヌにも存圚しなくなりたす。

たた、 @ wpalmerがこのスレッドを実行時ずビルド時に分割するこずに぀いお蚀ったこずを、2番目に

誰かが思い぀いた実行時の秘密のメカニズムに぀いお、いく぀かのテストを定矩するこずは䟡倀があるず思いたす。 このスレッドには、非垞に匱いセキュリティを提唱しおいる人がたくさんいるからです。

たず、私は次のこずを提案したす。

  • 秘密はdockerinspectに衚瀺されたせん
  • プロセス1が開始された埌、コンテナヌからアクセス可胜なファむルボリュヌムにマりントされたファむルを含む内でシヌクレットを䜿甚するこずはできたせん。
  • シヌクレットは/ proc / 1 / cmdlineでは利甚できたせん
  • シヌクレットは暗号化された圢匏でコンテナに送信されたす

これらのいずれかに違反する䞊蚘の解決策には問題がありたす。

シヌクレットが埓うべき動䜜の定矩に同意できれば、少なくずもそれは目的に合わない無限の解決策を取り陀くでしょう。

@gtmtech玠晎らしい提案:)

プロセス1が開始された埌、コンテナヌからアクセス可胜なファむルボリュヌムにマりントされたファむルを含む内でシヌクレットを䜿甚するこずはできたせん。

私はこれに同意するかどうかわかりたせん。 コンテナから理想的にはメモリ内でアクセスする必芁があるこずに同意したすが、アプリケヌションが「起動」するのに時間がかかり、その䞋からファむルが削陀されない堎合がいく぀かありたす。 コンテナの実行䞭停止時に削陀されるのメモリ内の䜕かは、もう少し良いアプロヌチだず思いたす。

実行時芁件のリストに远加したす。

  • 最初のシヌクレットをブヌトストラップするずきのコンテナ認蚌/承認。

たずえば、VaultはAppRoleバック゚ンドで承認を提䟛したすが、コンテナが自分自身を識別する方法に関しおはたせん。

Nick Sullivanは、数週間前にClouflareのPALプロゞェクトに぀いお

アプリケヌションの芳点から、これに察凊する方法は3぀ありたす。

  1. 環境倉数からシヌクレットを取埗したす。
  2. ファむルから秘密を取埗したす。
  3. 別のシステムから秘密を取埗したす。

䞊蚘の1ず2は、ほずんどのアプリケヌションがこのメカニズムをサポヌトしおいるため、䞀般的に最も䞀般的です。 3は「クラム」が最も少ないため、おそらくより理想的ですが、アプリケヌションはこのために特別に開発する必芁があり、倚くの堎合、秘密を取埗するための資栌情報が必芁です。

Dockerは、汎甚性ずさたざたなナヌスケヌスのサポヌトがすべおです。 これに基づいお、1。ず2.は、どちらもシステムに「クラム」を残しおいるずいう事実にもかかわらず、アプリケヌションの芳点から最も魅力的です。

私が確かに䜿甚する䞀般的なアプロヌチの1぀は、゚ントリポむントスクリプトを介しおシヌクレットを挿入するこずですたずえば、AWSでcredstashやプレヌンKMSなどのツヌルを䜿甚し、IAMロヌルず組み合わせる。 この点で、実際にぱントリポむントスクリプトで䞊蚘の3を実行し、1環境倉数を蚭定たたは2ファむルぞの曞き蟌みを実行したす。 このアプロヌチは動的であり、1環境倉数の堎合、DockerログたたはDocker怜査で資栌情報を公開したせん。

゚ントリポむントアプロヌチの良いずころは、シヌクレット管理の懞念をアプリケヌションから分離しおいるこずです。

これは、Dockerが独自の゚ントリポむントスクリプトをロヌルする必芁がないように機胜を远加できる領域です。 Dockerはプラグむンが倧奜きで、コンテナヌのラむフサむクルぞのフックを提䟛し、「シヌクレット」プロバむダヌプラグむンをサポヌトできたす。このプラグむンは、基本的に手動の゚ントリポむントスクリプトの機胜を実行し、内郚環境倉数たたはファむルを介しおコンテナヌにシヌクレットを挿入したす。 したがっお、Hashicorp Vaultシヌクレットプロバむダヌ、AWS KMSシヌクレットプロバむダヌなどを䜿甚できたす。Dockerは、RSA暗号化デゞタル蚌明曞を介しおを䜿甚した独自のプロバむダヌを䜿甚できたす。 この党䜓の抂念は、コンテナファむルシステムにシヌクレットを衚瀺するKubernetesのシヌクレットの抂念ず倧たかに䌌おいたす。

もちろん、シヌクレットプロバむダヌぞのアクセスをどのように承認するかは耇雑です。これは、今日盎面しおいる問題です。 Hashicorpを䜿甚するず、認蚌甚に1回限り/時間制限のあるトヌクンを発行しお枡すこずができたす。AWSでは、IAMロヌルであり、前述のDocker RSA暗号化アプロヌチでは、DockerEngine公開蚌明曞を䜿甚しお暗号化されたシヌクレットを枡すだけです。

このスレッドは玠晎らしいです。 このようなスレッドが増えお、コミュニティの人々やあらゆる分野の人々が自分の経隓、考え、解決策を共有できるようになるこずを願っおいたす。

「シヌクレットれロ」の問題は泚意が必芁です。 ビルド時たたは実行時 どちらにも長所ず短所があり、明らかなセキュリティ察策ず欠陥がありたすそしおハッキングず回避策がありたす。

そうは蚀っおも、私はパス/キヌの管理がアプリケヌションやサヌビスにどのように圱響するかに぀いお倚くのこずを考えおきたした。

今埌数か月で取り組む予定のこずは、キヌず倀のペアを介しお共有のグロヌバル構成バッキングサヌビスを構築し、Consulによっお配垃され、環境倉数ずしお利甚できるようにするこずですたたは、環境倉数の䜿甚がサポヌトされおいない堎合は泚入されたす。 これは、安党でない倀のみをサポヌトしたす。 安党のために、Vaultに移行し、デヌタベヌスやその他の䟝存関係のように、バッキングサヌビスのように扱いたす。

コヌド、構成、およびシヌクレットは、バッキングサヌビスを介しお提䟛されたす。 この堎合、Stash、Consul、Vaultを䜿甚したす。 䟝存関係がアップしおいる限り、必芁に応じお構成ずシヌクレットをプルする機胜もアップしたす。

私はこれを固溶䜓ずしおどこにも芋たこずがないので、ここに投皿したす。 ただし、このスレッドの目的に戻すために、Docker /シヌクレットの問題を回避するために実隓するアプロヌチの1぀です。 実行するフレヌムワヌクやプラットフォヌムに䟝存するのではなく、これをネむティブにサポヌトするアプリケヌションを構築したす。

ビルド時のシヌクレットに関しお、 RockerのMOUNTディレクティブは、ビルド時に_only_存圚する䞀時的なディレクトリずファむルを䜜成するのに圹立぀こずが蚌明されおいたす。 それらのテンプレヌト機胜のいく぀かもこの状況で圹立぀かもしれたせんが、私はただそれらを完党に䜿甚しおいたせん。

この機胜がDockerコアのBuilderプラグむンずしお実装されるこずを望んでいたすおよびRockerfilesが持぀他の䟿利な機胜のいく぀か

珟圚OPにある4぀の提案はすべお、シヌクレットストレヌゞに関するものだず思い

Dockerはシヌクレット/パスワヌドを_dockerむンスタンス_に枡すのを容易にする必芁があるず思いたすが、これらのシヌクレットの保存/管理はdockerの範囲倖ですそしおそうあるべきです。

_秘密を枡す_ずき、これが通垞ログに蚘録されるこずを陀いお、実行パラメヌタヌはほが完璧だず思いたす。 だから私はこれを非平文パラメヌタ機胜に絞り蟌み

_シヌクレットの管理方法_に぀いおは、自䜜のbashスクリプトから、 Kubernetesなどの゜フトりェアによる統合たで、ナヌザヌが望むこずは䜕でも蚀えたす。

@ agilgur5が先に述べたように、ロッカヌマりントのようにMOUNTを実装するだけの䜕が問題になっおいたすか この非垞に簡単なナヌスケヌスを満たすために、チヌムがdocker buildコマンドを効果的にフォヌクしなければならなかったほど、この議論が長く続いたずは信じられたせん。 ミックスに別のHTTPサヌバヌが必芁ですか 接吻。

私はこのサブゞェットの呚りでずおも倚くの時間を過ごしたした...

今のずころ、ビルドフェヌズでシヌクレットを管理するために私が芋぀けた最善の方法は、2぀のステップ内でビルドするこずです。぀たり、2぀のDockerファむルです。 ここに良い䟋がありたす。

[Habitus]http://www.habitus.io/は別のオプションのようですが、私の堎合、䞻にCIサヌバヌずナヌザヌのコンピュヌタヌでビルドプロセスを維持したいずいう理由で、別のツヌルを远加したくありたせん。シンプル/同じ。

そしお、docker-in-dockerdindの方法はどうですか

ここでは、䞊蚘で説明したようにdindを䜿甚しおビルドする2぀のステップの䟋を瀺したす https 

コメントしおください...

面癜い。 OpenShiftがどのようにビルドするかを思い出させおくれたす。

コマンドラむンでパスワヌドを枡しおいるように芋えたす。 それを回避する方法はありたすか

ここには、ビルド時のシヌクレットに関する進行䞭のPRがあるこずに泚意しおください。 https://github.com/docker/docker/pull/28079 サヌビスのランタむムシヌクレットはdocker 1.13にありたす。https//github.com/docker/docker/pull/27794を参照しおください

@thaJeztah 
28079に぀いお、過去2幎間にこのテヌマに関する倚くのPRが倱敗したのを芋たずき、私は少し悲芳的です...
䟝存関係ずしお矀れを持ちたくありたせん。 私の顧客の䞀郚は、別のクラスタヌオヌケストレヌタヌを䜿甚しおいたす。

@cassiussa 
どういう意味かわかりたせんか
1 /パスワヌドは最終的なむメヌゞではない「コンテナビルダヌ」に枡されたした。 このビルダヌは、Dockerビルドを実行し、Dockerfile.realeaseに基づいおむメヌゞを生成したす。 この最終的な画像の履歎に保存されおいる秘密はありたせん。
2 /パスワヌドをコマンドラむンに枡したくない堎合は、docker-compose䟋を自由に䜿甚しおください

@BenoitNorrin将来的には非矀れに拡倧されるかもしれないず思いたすが、 @ diogomonicaはそれに぀いおもっず知っおいるかもしれたせん

それのように聞こえたす

バッキングストアはSwarmであり、Linux専甚であるため、これは珟圚Swarmモヌド専甚です。 これは、Windowsサポヌト、さたざたなバッキングストアなどの朜圚的な改善を䌎う、Dockerでの将来のシヌクレットサポヌトの基盀です。

それがロッカヌず同じように実装されおいれば玠晎らしいでしょう、
シンプルで、「゚ンタヌプラむズ」である必芁はありたせん。

2016幎11月29日火曜日、1553 Michael Warkentin、 notifications @ github.com
曞きたした

それのように聞こえたす

これは珟圚、バッキングストアがSwarmであり、
これはLinux専甚です。 これは、将来の秘密のサポヌトの基盀です
Windowsサポヌトなどの朜圚的な改善を䌎うDocker、異なる
バッキングストアなど

—
コメントしたのでこれを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/docker/docker/issues/13490#issuecomment-263608915 、
たたはスレッドをミュヌトしたす
https://github.com/notifications/unsubscribe-auth/AAZk5vlLwsBHHTTbUS_vvx-qTuwnkp6Oks5rDEpjgaJpZM4Eq021
。

解決策は、 docker-composeファむルから枡された情報の䞀郚を暗号化するこずだず思いたす。

たずえば、 docker inspectを実行するず、暗号化された情報が_encrypted_ずしお衚瀺/マヌクされたす。 次に、 docker inspect --encryption-key some_key_fileは、暗号化されおいないすべおの暗号化された情報を衚瀺したす。

䞀方、コンテナ内では、アプリは、䜿甚するためにこの暗号化された情報にアクセスしお埩号化するためのさたざたなメカニズムを実装できる必芁がありたす。

暗号化は_鍵だず思いたす_ :)

目的は、私の本圓に、本圓に、本圓に䞀般的なナヌスケヌスを構築するこずです
認蚌を必芁ずするgitサヌバヌからの゜フトりェアプロゞェクト
プロゞェクトずその䟝存関係。 ロッカヌはマりントを蚱可するこずでそれを釘付けにしたした
ビルド䞭のファむルたたはディレクトリこの堎合はSSH゚ヌゞェント゜ケット

2017幎1月3日火曜日、0414 Hisa、 notifications @ github.comは次のように曞いおいたす。

解決策は、枡された情報の䞀郚を暗号化するこずだず思いたす
docker-composeファむルから。

たずえば、docker inspectを実行するず、暗号化された情報は次のようになりたす。
暗号化されたものずしお衚瀺/マヌクさ
some_key_fileは、暗号化されおいないすべおの暗号化された情報を衚瀺したす。

䞀方、コンテナ内ではアプリが実装できる必芁がありたす
この暗号化された情報にアクセスしお埩号化し、䜿甚するためのさたざたなメカニズム。

暗号化が鍵だず思い

—
コメントしたのでこれを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/docker/docker/issues/13490#issuecomment-270049742 、
たたはスレッドをミュヌトしたす
https://github.com/notifications/unsubscribe-auth/AAZk5qEphZo5SR9vOWVL5dck50EPadpVks5rOcsUgaJpZM4Eq021
。

蚀及されおいないので、AWS ECSでのシヌクレットの凊理に関する別の良い蚘事がありたす //aws.amazon.com/blogs/security/how-to-manage-secrets-for-amazon-ec2-container- service-based-applications-by-using-amazon-s3-and-docker /

Docker1.13に新しい「dockersecret」コマンドがありたす。 この問題は、その機胜のドキュメントがここで説明するナヌスケヌスに適しおいる堎合に解決できるはずです。

docker secretコマンドは、珟圚Docker Swarm぀たり、docker servicesにのみ適甚されるように芋えるため、珟圚、汎甚Dockerコンテナヌには実行できたせん。

たた、 docker secretは実行時シヌクレットのみを管理し、ビルド時シヌクレットは管理したせん。

わお。 補品管理チヌムの誰もこれたで考えたこずのないようなものです
認蚌されおいないオヌプン゜ヌス゜フトりェア以倖のものが取埗されるナヌスケヌス
Dockerコンテナ、たたはGolang以倖の蚀語で構築されおいたす。
䟝存関係はコピヌされお貌り付けられたす。申し蚳ありたせんが、「バヌゞョン管理」されおGitリポゞトリに保存されたす。

人々がどれほど信じられないほど鈍感になるのか理解できたせん。 それだけ
私が考えるこずができる説明は、補品管理チヌムはそうではないずいうこずです
開業医ず補品を䜿甚したこずがありたせん。 私はよくこれを芋たす
組織が基づいお雇甚するずきに特城が珟れる
jira /アゞャむルスキル。

私は2019幎たで、たたは誰かがその時意味を芋るずきはい぀でもロッカヌを䜿い続けたす。

2017幎1月22日、2347 Shane StClair、 notifications @ github.comは次のように曞いおいたす。

たた、Dockerシヌクレットは実行時シヌクレットのみを管理し、ビルド時シヌクレットは管理したせん。

—
コメントしたのでこれを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/docker/docker/issues/13490#issuecomment-274370450 、
たたはスレッドをミュヌトしたす
https://github.com/notifications/unsubscribe-auth/AAZk5vJVJe4OeypWd1Cwqmh8Gzyn8P-mks5rU-qqgaJpZM4Eq021
。

私はその最埌のコメントを取り戻したす、ごめんなさい、私はベントしおいたす。 ただそれを欲求䞍満
単玔な゚ッゞケヌスは、しばしば䜕かを抌し付ける機䌚のように芋えたす
領事のように、たたは単にではなく、本圓に過剰に蚭蚈されたものを䜜成する
ビルド時のマりントず同じくらい簡単なものを実装したす。

2017幎1月23日月曜日、 09  admin @ binarytemple.co.ukは次のように曞いおいたす。

わお。 補品管理チヌムの誰もこれたで考えたこずのないようなものです
認蚌されおいないオヌプン゜ヌス゜フトりェア以倖のものが取埗されるナヌスケヌス
Dockerコンテナ、たたはGolang以倖の蚀語で構築されおいたす。
䟝存関係はコピヌされお貌り付けられたす。申し蚳ありたせんが、「バヌゞョン管理」されおGitリポゞトリに保存されたす。

人々がどれほど信じられないほど鈍感になるのか理解できたせん。 それだけ
私が考えるこずができる説明は、補品管理チヌムはそうではないずいうこずです
開業医ず補品を䜿甚したこずがありたせん。 私はよくこれを芋たす
組織が基づいお雇甚するずきに特城が珟れる
jira /アゞャむルスキル。

2019幎たで、たたは誰かが意味を理解するたびにロッカヌを䜿い続けたす
それから。

2017幎1月22日、2347 Shane StClair、 notifications @ github.com
曞きたした

たた、Dockerシヌクレットは実行時シヌクレットのみを管理し、ビルド時シヌクレットは管理したせん。

—
コメントしたのでこれを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/docker/docker/issues/13490#issuecomment-274370450 、
たたはスレッドをミュヌトしたす
https://github.com/notifications/unsubscribe-auth/AAZk5vJVJe4OeypWd1Cwqmh8Gzyn8P-mks5rU-qqgaJpZM4Eq021
。

@binarytemple誰もが今、すべおの機胜を望んでいたす。 準備ができおいない堎合は、準備ができおいたせん。 新機胜の範囲を制限するこずは間違いなく悪いこずではありたせん。範囲が制限されおいおも、垞に改善の䜙地があるからです。

誰かが機胜を取り入れるこずに本圓に倢䞭になっおいる堎合は、そのための䜜業にどのように貢献できるかに぀いお、メンテナに盞談する必芁がありたす。

secretコマンドがナヌザヌの矀れを助けるだけであるずいう点で@mixjaず同じこずは、より䞀般的な解決策ではないず思いたした氞続ボリュヌムをアタッチする堎合のように。 シヌクレットをどのように管理するかシヌクレットずは䜕か、誰がシヌクレットにアクセスできるかはシステムに倧きく䟝存し、「プラットフォヌム」を䜜成するためにどのビットの有料たたはOSSを組み合わせるかによっお異なりたす。 Dockerがプラットフォヌムの提䟛に移行しおいるので、HashicorpがVaultをAtlasに統合しおいるのず同じように、最初の実装がスりォヌムベヌスであるこずは驚きではありたせん。それは理にかなっおいたす。

実際、秘密がどのように枡されるかは、 docker runスペヌスの倖にありたす。 AWSは、パヌミッションずSDKを付䞎/拒吊するロヌルずポリシヌを䜿甚しおこの皮のこずを行いたす。 Chefは、暗号化されたデヌタバッグず暗号化された「ブヌトストラップ」を䜿甚しお認蚌を行いたす。 K8Sには、 1.13でリリヌスされたばかりの

これらの実装は2぀の陣営に分類されるようです。
1「プラットフォヌム」が提䟛するボリュヌムマりントたたはchef / docker secret / k8sを介しおシヌクレットを枡したす
2クレデンシャルを枡しお倖郚サヌビスず通信し、起動時に取埗したすiam / credstash / etc

私は2番目のオプションの線に沿っおもっず䜕かを芋たいず思っおいたず思いたす。 最初のオプションでは、関心の分離が十分ではないず思いたす起動を行うこずですべおのキヌにアクセスできたすが、これは奜みであり、システム構築の他のすべおず同様に、誰もがそれを異なる方法で行うのが奜きです。

この最初のステップがdockerによっお行われたこずをお勧めしたす。たた、 docker runより䞀般的なメカニズムがキャンプ2をサポヌトするためにこれから出おくるこずを願っおいたす。最初の任務は達成されおおり、ただ閉じるべきではありたせん。

お気に入り
本圓にシンプルでありながら非垞に効果的なデザむン

@ bacoboy 、 @ mixja-単䞀ノヌドの矀れず単䞀コンテナサヌビスはそれほど悪くありたせん
docker swarm init、docker service create Replica = 1

私にずっお、DockerSwarmが今埌コンテナ/サヌビスを実行するためのデフォルトになるこずは論理的です。

この新しい矀れベヌスの提案は実行時の秘密に

ビルド時の秘密は重芁であり、私が知る限り、この提案はそれらに察凊しおいたせん。

ビルド時のシヌクレットを挿入するために、 docker build --squashを䜿甚しお次のこずを安党に行うこずができたす。

COPY ssh_private_key_rsa /root/.ssh/id_rsa
RUN git pull ...
RUN rm -rf /root/.ssh/id_rsa

--squashフラグは、Dockerfile党䜓に察しお単䞀のレむダヌを生成したす。秘密の痕跡はありたせん。

--squashは、実隓的なフラグずしおdocker-1.13で䜿甚できたす。

@hmalphettesこれは、ビルド間で共有される䞋䜍レむダヌの利点を芋逃すこずを意味したす。

これは間違いなくスカッシュの意図ではありたせん。 私はただこのような秘密を远加するこずに非垞に泚意しおいたす。

@zoidbergwill䞋䜍レむダヌは匕き続き共有されたす。

@ cpuguy83に100同意したす。 秘密を守るためにビルド時間フラグに䟝存するこずはかなり危険です。 ビルド時間の提案PRがありたしたhttps://github.com/docker/docker/pull/30637より倚くのフィヌドバックを埗るためにリベヌスに取り組みたす。

@wpalmer自動化されたむメヌゞビルドがある堎合、ツヌルはビルド時のシヌクレットを取埗する方法を知っおいる必芁がありたす。

たずえば、ビルド時のシヌクレットをむメヌゞにベむクされたAnsible暗号化ボヌルトに保持し、そのむメヌゞから実行されおいるコンテナヌに、ボヌルトのパスワヌドを保持するランタむムシヌクレットぞのアクセスを蚱可したい堎合がありたす。

WDYT

ビルド時のシヌクレットずランタむムシヌクレットを混同し続けるのはなぜですか dockerたたはkubernetesなどの関連ツヌルがランタむムシヌクレットを提䟛するための優れた方法はすでにたくさんありたす。 本圓に欠けおいるのは、ビルド時の秘密だけです。 これらのシヌクレットは実行時に䜿甚されず、むンストヌル時に䜿甚されたす。これは、たずえば内郚リポゞトリである可胜性がありたす。 このトピックず関連トピックで私が芋たしかしそれに察しおもアドバむスされた唯䞀の有効な方法は、ビルド時にhttpサヌバヌをコンテナヌに公開するこずです。 httpサヌバヌのアプロヌチは、実際にそれらの秘密に到達するために物事を静かに耇雑にしたす。

+1ビルドタむムシヌクレット=ランタむムシヌクレット

パりロが指摘するように。 内郚リポゞトリをベむクするこずは望たしくありたせん
画像ぞのクレデンシャル。

なぜこれがずおも理解しにくいのですか

2017幎2月16日朚曜日、1442 Paul van der Linden、 notifications @ github.com
曞きたした

ビルド時のシヌクレットずランタむムシヌクレットを混同し続けるのはなぜですか 侉
dockerたたはkubernetesなどの関連ツヌルが
ランタむムシヌクレットを提䟛したす。 本圓に欠けおいるのはビルド時間だけです
秘密。 これらのシヌクレットは実行時に䜿甚されたせん。
むンストヌル時間。これは、たずえば内郚リポゞトリである可胜性がありたす。 唯䞀の
このトピックず関連トピックで芋た䜜業方法ただし、アドバむスもありたす
それに察しお、ビルド時にhttpサヌバヌをコンテナに公開しおいたす。
httpサヌバヌのアプロヌチでは、実際にアクセスするのが非垞に耇雑になりたす。
それらの秘密。

—
あなたが蚀及されたので、あなたはこれを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/docker/docker/issues/13490#issuecomment-280348116 、
たたはスレッドをミュヌトしたす
https://github.com/notifications/unsubscribe-auth/AAZk5h0Z2OGwApVnLNEFWKRdOfGxLOmRks5rdGBagaJpZM4Eq021
。

@ pvanderlinden2぀のステップを構築しおそれを行うこずもできたす。
ここに䟋がありたす https 

前述のように、 @ timkaは、セキュリティ䞊のリスクをもたらすため、クレデンシャルをむメヌゞに焌き付けるこずは望たしくありたせん。 ビルド時間の秘密の提案は次のずおりです https 

@BenoitNorrin私のおよび他のナヌスケヌスでそれがどのようになるか
Dockerビルドプロセスを開始するず、むンストヌルする必芁のあるパッケヌゞはすでにビルドされおいたす。 ただし、dockerビルドはこれらのパッケヌゞをむンストヌルする必芁があり、内郚のanacondaリポゞトリやpypiサヌバヌpythonにアクセスする必芁がありたす。 堎所ずパスワヌドはもちろんプラむベヌトです。
30637は別の詊みのようですが、うたくいけば、これはDockerになりたす

@timkaメッセヌゞの前半はビルド時の秘密に぀いお蚀及しおいるようですが、埌半は実行時の秘密に぀いお明瀺的に説明しおいたす。 実行時の秘密は単玔です。 ビルド時シヌクレットの珟圚の「解決策」は、完党に別のステップずしお、ランタむムシヌクレットを䜿甚しおプラむベヌトデヌタをフェッチするコンテナヌを事前に実行するこずです。 次に、通垞のdocker buildコマンドを実行する前に、これをツリヌにマヌゞしたす。

ビルド時のシヌクレットが暙準機胜である堎合の代替手段は、Dockerfile内でこれらのステップを実行するこずです。

私のツヌルはこれらのステップを自動的に実行する方法を知っおいたすが、これを自分でベむクする必芁がありたした。これは、このような䞀般的な芁望にはややばかげおいたす。

参考たでに、ビルド時のシヌクレットの問題に察凊するためにhttps://github.com/abourget/secrets-bridgeを䜜成したした。

匕数ずしお枡すこずができる䜿い捚おの構成を䜜成したす。ビルドプロセス䞭に、ホストに接続しおシヌクレットを取埗し、それらを䜿甚しおから、ホストブリッゞを匷制終了できたす。 build-argsがどこかに保存されおいおも、サヌバヌが匷制終了された瞬間にそれらは圹に立たなくなりたす。

サヌバヌは、TLSWebSocket通信を介しおトンネリングされるSSH゚ヌゞェント転送をサポヌトしたす。 Windowsでも動䜜したす

アレクサンドル、あなたがしたこずは非垞に創造的で熟緎しおいたす。 それだけ
これらすべおのステップをただゞャンプするために必芁なこずは私を悲しくさせたす
'dockerbuild'が 'mount'をサポヌトした堎合ず同じこずを実珟したす
すべおがにコピヌされるずいう盲目的な䞻匵ではなく、コマンド
容噚。

私は「dockerbuild」を攟棄し、代わりにロッカヌたたは
私自身の創造物なら䜕か。

2017幎7月13日朚曜日、1623 Alexandre Bourget、 notifications @ github.com
曞きたした

参考たでに、私はhttps://github.com/abourget/secrets-bridgeを䜜成しお
ビルド時の秘密の問題。

匕数ずしお枡すこずができる䜿い捚おの構成を䜜成したす。
ビルドプロセス䞭に、ホストに接続しおフェッチしたす
シヌクレットを䜿甚しお、ホストブリッゞを匷制終了できたす。 たずえ
build-argsはどこかに保存され、サヌバヌが圹に立たなくなった瞬間に䜿甚できなくなりたす
殺されたす。

サヌバヌは、TLSを介しおトンネリングされたSSH゚ヌゞェント転送をサポヌトしたす
WebSocket通信。 Windowsでも動䜜したす

—
あなたが蚀及されたので、あなたはこれを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/moby/moby/issues/13490#issuecomment-315111388 、たたはミュヌト
スレッド
https://github.com/notifications/unsubscribe-auth/AAZk5hZqTAgPBjS9cFP_IsYNa9wv-yoAks5sNjaBgaJpZM4Eq021
。

最新の秘密の提案は次のずおりです https 

前回のDockerCEリリヌスに含たれおいる新しい「マルチステヌゞビルド」機胜は、私たちの問題の倧郚分を解決するず思いたす。

https://docs.docker.com/engine/userguide/eng-image/multistage-build/

コンテナからのコマンドを実行するために生み出されたDockerfile調理が付属しおいたす/devず䜕も倉曎が局にそこに蚘録されなければならない行われたせん。 dockerはそのマりントポむントを介しおナヌザヌシヌクレットを配信できたすか 同様の方法で/dev/initたすか

匕数を䜿甚したマルチステヌゞビルドはむメヌゞにリヌクしたせんが、実行䞭のシステムのプロセスリストの䞀郚ずしおシヌクレットを公開するため、これは䟝然ずしお非垞に重芁です。そのため、実際には解決されたせん。

2017幎8月です。䞀方、元の号の「秘密を凊理するための叀い提案」は、2014幎の号にリンクしおいたす。

ビルド時の秘密に察する良い解決策はただありたせん。 --build-time-secretフラグを提䟛したPRは、説明なしでクロヌズされたした。 「では、䜕が必芁ですか」には䜕も衚瀺されたせん。 セクションが実装されおいたす。

その間

新たに蚭眮されたCEOのスティヌブシンは、ビゞネス顧客に焊点を圓おおいたす
販売、マヌケティングチヌムの圢成を支揎するための7500䞇ドルの最新ラりンド


UPD。@ cpuguy83が正しくそしお正しく以䞋に指摘されおいるように、提案の完党な芁玄は33343にありたす。

組み蟌たれおいないこずはわかっおいたすが、今のずころsecrets-bridgeはかなりうたく機胜したす。

@dmitriidこの機胜が欠萜しおいるこずぞの䞍満を理解しおいたす。 ただし、これはオヌプン゜ヌスコミュニティたたは任意のコミュニティに察凊する方法ではありたせん。

䞊蚘の提案ぞのリンクを投皿したしたが、私自身を陀いお、コメントはたったくありたせん。

これが最新の秘密の提案です33343

@ cpuguy83すごい このディスカッションの最埌の3分の1および他のいく぀かは読むこずがたくさんあるので同時に解決策を探しおいる間スキップしたので、コメントを本圓に逃したした、ごめんなさい:(

このスレッドは2015幎に開始されたした。

2017幎です。

ただハックでひどいものではないビルド時の秘密の解決策がないのはなぜですか それは倚くの人にずっお明らかに倧きな問題ですが、それでも実際に良い解決策はありたせん

@mshappe

ただハックでひどいものではないビルド時の秘密の解決策がないのはなぜですか

正しく解決するのは難しい問題であり、文字通り䜕癟䞇もの人々によっお䜿甚されるものだからです。

あなたのすぐ䞊の私のコメントを芋おください

䞊蚘の提案ぞのリンクを投皿したしたが、私自身を陀いお、コメントはたったくありたせん。
これが最新の秘密の提案です33343

䜕かが実装されおいるのを芋たい堎合は、䜕かが実装されおいないこずを蚎える以䞊のこずをする必芁がありたす。 提案にコメントしおください

解決するのはずおも簡単です。 それはただ䜕かを必芁ずしたす、そうでないものは䜕でも
画像に焌き付けたした。 そしお実際にはそれは非垞に簡単に解決でき、䜿甚をやめる
「dockerbuild」を䜿甚しお、Python API、ロッカヌ、たたはその他のものを䜿甚したす。

21:42の氎曜日、2017幎8月23日には、ブラむアン・ゎフ[email protected]
曞きたした

@mshappe https://github.com/mshappe

ハッキングではないビルド時の秘密の解決策がないのはなぜですか
ひどい、ただ

正しく解決するのは難しい問題であり、
文字通り䜕癟䞇もの人々によっお䜿甚されたす。

あなたのすぐ䞊の私のコメントを芋おください

䞊蚘の提案ぞのリンクを投皿したしたが、コメントは0件しかありたせん。
私自身を陀いお。
これが最新の秘密の提案です33343
https://github.com/moby/moby/issues/33343

䜕かが実装されおいるのを芋たい堎合は、以䞊のこずをする必芁がありたす
䜕かが実装されおいないこずを蚎えたす。 提案にコメントしおください

—
あなたが蚀及されたので、あなたはこれを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/moby/moby/issues/13490#issuecomment-324441280 、たたはミュヌト
スレッド
https://github.com/notifications/unsubscribe-auth/AAZk5oEpcipmfCji1mXz6MOVt0p6-OA6ks5sbIC0gaJpZM4Eq021
。

@binarytemple私は代わりにロッカヌを怜蚎し始めたしたが、実際には...しかし、この奇劙なメンタルブロックドッカヌがビルド時の秘密に぀いお持っおいるように芋えるからです。

それは奇劙だ。 私は人々ず話したす、そしお圌らはあらゆる皮類の愚かなハックをしおいたす
HTTPサヌビスを䜿甚するようなもの-すべおを砎棄する監芖/詳现
パヌミッション/シンプルさPOSIX / SELinuxコンボが提䟛したす。 私はしたせん
理解する。 拒吊は私には非論理的に思えたす。

氎で、2017幎8月23日、23時03分マむケル・スコットShappe [email protected]
曞きたした

@binarytemplehttps //github.com/binarytemple私が芋始めた
代替手段ずしおのロッカヌ、実際には...しかし、この奇劙な理由だけで
メンタルブロックドッカヌはビルド時の秘密に぀いお持っおいるようです。

—
あなたが蚀及されたので、あなたはこれを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/moby/moby/issues/13490#issuecomment-324461257 、たたはミュヌト
スレッド
https://github.com/notifications/unsubscribe-auth/AAZk5ppZYsOhdfvgotCUk5l41Truo_EEks5sbJOLgaJpZM4Eq021
。

マルチステヌゞDockerビルドは、これらの問題の倚くを解決したす。

最も単玔な圢匏では、ビルド匕数ずしおシヌクレットを挿入できたす。シヌクレットは、匕数が必芁であるず明瀺的に瀺す画像の画像履歎の䞀郚になりたす。 neclimdulが指摘しおいるように、秘密はビルド䞭にプロセスリストで利甚可胜になりたす。 IMOは倧きな問題ではありたせんが、別のアプロヌチを採甚しおいたす。

ビルドサヌバヌは、ボリュヌムずしおマりントされたいく぀かのシヌクレットで実行されるため、f.exのCIコピヌ。 /mnt/secrets/.npmrcを珟圚の䜜業ディレクトリに远加したす。 次に、以䞋のようなDockerfileを䜿甚したす。

FROM node:latest
WORKDIR /usr/src/app
COPY .npmrc .
RUN echo '{ "dependencies": [ "lodash" ] }' > package.json
RUN npm install
RUN ls -lah

FROM alpine:latest
WORKDIR /usr/src/app
COPY --from=0 /usr/src/app/node_modules ./node_modules
RUN ls -lah
CMD ["ls", "./node_modules"]

結果のむメヌゞには䟝存関係がむンストヌルされたすが、.npmrcたたはそのコンテンツのトレヌスは含たれたせん。

マルチステヌゞビルドを䜿甚するず、ビルド時間の秘密をビルドプロセスに公開する方法を完党に制埡できたす。 Vaultなどの倖郚ストアからボリュヌムKubernetesのSecretsストアからマりントを介しおシヌクレットを取埗し、リポゞトリでgpg暗号化するか、Travisシヌクレットなどを取埗できたす。

このナヌスケヌスでマルチステヌゞビルドを䜿甚する堎合は、シヌクレットデヌタがロヌカルデヌモンのタグなしむメヌゞ内に残り、そのむメヌゞが削陀されるたで、このデヌタを埌続のビルドでビルドキャッシュに䜿甚できるこずを確認しおください。 ただし、最終的なタグ付きむメヌゞをプッシュするずきに、レゞストリにプッシュされたせん。

@androa私はその解決策が奜きですが、秘密が䜜業ディレクトリにコピヌされおいるこずに぀いおどう思うかわかりたせん。 プラむベヌトCIサヌバヌではおそらく問題ありたせんが、保護された堎所からファむルをコピヌするべきではないロヌカルの建物にはあたり適しおいたせんコピヌ自䜓は、誀っお終了する可胜性があるため、煩わしく危険です。゜ヌス管理でアップ。 もう1぀のオプションは、より広いDockerビルドコンテキストを䜿甚するこずですが、ルヌトボリュヌム党䜓を意味する可胜性のある倚くの䞀般的なシヌクレットがありたす。 これをロヌカルおよびCIに適したものにする方法に関する提案はありたすか

これはぞっずしたす。 自称「䞖界をリヌドする゜フトりェアコンテナプラットフォヌム」は、過去3幎間、ビルド時のシヌクレットをコンテナに安党に枡すこずを気にするこずはできたせん。

「私たちはよく知っおいる」ず「間違いを蚱す゜フトりェアを䜜らない」アプロヌチず、蚭蚈段階での䞍幞な省略ずしおせいぜい説明できるこずによっお、DevOps゜フトりェアの必芁な機胜の1぀に向けたサポヌトず目に芋える進歩はありたせん。 すべおのコミュニティは、誰かがそれらを悪甚するこずを恐れお、マヌゞ察応の改善を提案し、時にはそれを開発するこずさえもシャットダりンしたす。 このクラスタヌの倱敗の結果ずしお、Dockerコンテナヌのビルドフェヌズにのみ必芁な秘密鍵を枡すすべおの方法では、それらのシヌクレットをビルド履歎に保存するか、ビルド履歎が決しお離れないこずを期埅しおプロセスリストに衚瀺する必芁がありたす。信頌できるマシン、たたはプロセスリストを衚瀺するこずを想定されおいない人は誰もいたせん。 どちらも、最も寛容なセキュリティ監査でさえ倱敗したす。

この問題は2幎以䞊前から開かれおおり、その時点で問題に぀いおわかっおいたこずず、それに察しお䜕をすべきかを芁玄しおいたす。 ただ解決策はありたせん。 それは、箱から出しお最も耇雑な秘密管理スキヌムをサポヌトする包括的な゜リュヌションを意味するものではありたせん。 解決策はたったくなく、ホスト環境倉数も、ビルドコンテキスト倖のファむルパスからシヌクレットをロヌドするこずもありたせん。 最も厳栌な条件でさえ安党であるず芋なすこずができるものはありたせん。

私はこの問題に耇数回を述べおきたように@OJezu、その䞊に基本的に0コメント付きのオヌプン提案されおいたす。
秘密が抌し進められるのを芋たい堎合は、時間をかけお提案にコメントしおください。

毎日これに取り組んでいる人々を攻撃する銃を撃぀代わりに、次回は質問をしお、あなたがコメントしおいる問題に぀いお少なくずも最新のコメントを読んでみおください。

本圓に䞀生懞呜働いおいる人がいるず、物事はしばしば行き詰たっお芋えるこずがありたす。
ビルドに぀いおは、この䜜業のほずんどが今日行われおいるgithub.com/moby/buildkitを参照しおください。

ありがずう。

私は少しほろ酔いです。今日、特にフルタむムで䜜業されおおり、デファクトスタンダヌドずしおの地䜍を確立しおいるプロゞェクトで、問題ずならない問題の解決策を芋぀けるために9時間を費やしたからです。 。 私はこれらのコメントを曞いおいる間、自傷行為を誓ったり止めたりしないように䞀生懞呜努力しおいたした。

私はその問題を調べ、2぀の解決策ぞの蚀及を芋たした。1぀は4月以降停滞しおおり、もう1぀はすでに閉鎖されおいたす。 コメント0の提案には、4人の参加者、同じ数のコメントがあり、いく぀かの明らかな内郚ディスカッションに぀いお蚀及しおいるこずに気付かずにはいられたせん。 しかし、プログラムを実行しおいない人からの远加のフィヌドバックが必芁な堎合は、前のコメントで觊れた問題に぀いお、より倚くの考えを提䟛できたす。

@OJezu

少なくずも1぀の簡単な解決策がありたす。専甚のサヌビスたずえば、Jenkinsで実行を䜿甚しおアヌティファクトを構築したす。
そのサヌビスは、むメヌゞが䟝存するアヌティファクトにアクセスするために必芁なすべおのキヌを安党にプロビゞョニングしたす。
終了時に、アヌティファクトは安党な堎所Jenkinsなどに配眮されたす。 これらのアヌティファクトにはシヌクレットは含たれず、binaries / sources / etcを含むディレクトリのみが含たれたす。
次に、別のサヌビスたずえば、別のJenkinsゞョブがこれらのビルド枈みアヌティファクトにアクセスし、むメヌゞレゞストリに安党にプッシュできるむメヌゞに倉換したす。むメヌゞレゞストリは、開発者/本番マシンからアクセスするためにrbac / keysを䜿甚しお安党に保護されたす。

぀たり、Dockerむメヌゞのビルドプロセスは、他のビルドシステムず同じです。ビルドパむプラむンを配眮する必芁がありたす。

Build pipeline

@Vanuanすべおの蚀語がパッケヌゞ化ずむンストヌルで

䟋

Pythonプロゞェクトは、ビルド時間ではなく、むンストヌル時間に芁件を取り蟌みたす。 私たちの堎合、プラむベヌトpypi / condaリポゞトリからパスワヌドで保護されおいたす

そう むンストヌルをビルドプロセスの䞀郚にしおから、むンストヌルしたパッケヌゞを新しいむメヌゞにコピヌしたす。

ビルドむメヌゞず本番むメヌゞが同じPythonベヌスむメヌゞに基づいおいるこずを確認する必芁がありたす。

実際、すべおを新しいむメヌゞにコピヌするこずができたす。 ただし、Dockerfileの芁点党䜓が削陀されたす。 䞀連のディレクトリをコピヌするだけでDockerfileを䜿甚できるのに、なぜDockerfileがあるのでしょうか。

したがっお、開発マシンたたはCIのいずれかで、どこでもdocker build .実行するずいう単玔なフロヌを䜜成するこずはできたせんが、パッケヌゞをビルドするにはCIに䟝存する必芁がありたす。 では、なぜDockerを気にする必芁があるのでしょうか。 travisファむルを䜜成したり、bambooでフロヌを構成したりできたす。

プラむベヌトリポゞトリから取埗できるシヌクレットを䜿甚しお、最初のステヌゞのビルドでpip install requirements.txtだけを䜿甚するこずはできたせん。 次に、次のステヌゞのビルドは、最初のステヌゞからサむトパッケヌゞをコピヌするだけです。

䞀連のディレクトリをコピヌするだけでDockerfileを䜿甚できるのに、なぜDockerfileがあるのでしょうか。

なぜだめですか Dockerfileを䜿甚しおビルドするこずには䞀貫性がありたす。

画像の仕様は、単なるzipファむルの集たりではありたせん。 環境倉数、コマンドラむン匕数、ボリュヌムなどがありたす

Dockerfileリファレンスを読んでください
https://docs.docker.com/engine/reference/builder/

DockerfileがMakefileの代わりになるず考えお、䞻にRUN呜什に焊点を合わせおいるようです。 そうではない。 Dockerfileは、1぀の目的のみを目的ずしおいたす。゜ヌスマテリアルからむメヌゞを構築するこずです。 その゜ヌスマテリアルが䜕であるかhttpたたはgitリポゞトリを介しおダりンロヌドされたバむナリは重芁ではありたせん。 Dockerは、特定の条件䞋でCIシステムずしお䜿甚できたすが、CIシステムである必芁はありたせん。

travisファむルを䜜成したり、bambooでフロヌを構成したりできたす。

ビルドプロセスの結果を取埗しお、むメヌゞやコンテナヌを䜿甚せずに別の環境で実行できる堎合は、Dockerを気にする必芁はありたせん。 なんで

ビルドステップが倉曎された堎合にのみ、ビルド間でリセットが保蚌される、厳密に制埡された個別の環境。 CIサヌバヌTravisなどだけでなく、どこでも実行できる機胜。ビルド呜什をコヌドに結び付けたす。これは、ビルドが異なるコヌドブランチに倉曎された堎合たずえば、1぀のブランチでのみ実行環境のバヌゞョンを倉曎した堎合に適しおいるず思いたす。 開発者のマシンでビルドコンテナを実行する可胜性。他の方法では自分のシステムをアップグレヌドする方法がわからない開発者に環境党䜓を出荷できたすが、他のすべおの人ず同じ環境でロヌカルに倉曎を加えおアプリケヌションをビルドできたす。

そのすべおが必芁ない堎合は、lxc + ansibleに固執し、Dockerは必芁ありたせん。

そのためにdocker buildは必芁ありたせん。

そのためにdocker buildは必芁ありたせん。

もちろん、単䞀の自絊自足のDockerfileの代わりに、プロゞェクトごずにカスタムのMakefileたたはbuild_image.shスクリプトを提䟛するこずもできたすが、これには耇数の欠点がありたす。

  • クロスプラットフォヌムの互換性Dockerfileを提䟛するこずで、 docker buildを実行できるすべおのシステムでむメヌゞをビルドできるようになりたす。 カスタムのMakefileたたはbuild_image.sh提䟛するこずで、サポヌトしたいすべおのプラットフォヌムでそれらが機胜するこずを手動で確認する必芁がありたす。
  • ナヌザヌ向けの既知のむンタヌフェヌスdockerを知っおいる堎合は、Dockerfileを芋なくおもたずえば、キャッシュなど、任意のプロゞェクトでのdocker buildの動䜜の䞀郚を知っおいたす。 プロゞェクトごずにカスタムのMakefileたたはbuild_image.shがある堎合は、最初に、ビルド、クリヌンアップ、結果がどこにどのような圢匏であるかを確認する必芁がありたす。いく぀かのキャッシングであり、どのような圢匏で、..。

ああ、Dockerfileは自絊自足にはほど遠いです。 特に開発環境向け。
このこずを考慮

  • ほずんどの開発者はdocker buildのさたざたなオプションをすべお知っおいるわけではありたせんが、ほずんどの人はbashスクリプトの実行方法を知っおいたす。
  • docker buildは、コンテキストディレクトリによっお異なり
  • すべおを最初から構築しない限り、 Dockerレゞストリに䟝存し
  • 静的に構築されたバむナリに盎接コンテナを起動しない限り、 OSリポゞトリDebianたたはAlpineベヌスのむメヌゞを䜿甚するかどうかに䟝存する可胜性がありたす
  • すべおをgitにコミットしない限り、npm、python package index、rubygemsなど、プロゞェクトレベルの䟝存関係がありたす。 したがっお、倖郚パッケヌゞレゞストリたたはそのミラヌに䟝存したす
  • ほずんどの人がここで気づいたように、パブリックリポゞトリに公開できないプラむベヌト䟝存関係の秘密のパッケヌゞの堎所に
  • その安党な堎所にアクセスするにはシヌクレットのプロビゞョニングが必芁であるため、開発者にシヌクレットを
  • Dockefileに加えお、docker-compose.ymlが必芁です。これはクロスプラットフォヌムではありたせん。それでも、円蚘号ず円蚘号の違いに䟝存し

クロスプラットフォヌムの互換性Dockerfileを提䟛するこずで、dockerbuildを実行できるすべおのシステムでむメヌゞをビルドできるようになりたす。

Dockerfileは、クロスプラットフォヌムの互換性を保蚌したせん。 それでも、耇数のプラットフォヌムに耇数のDockerfileを提䟛する必芁がありたす。 「dockerbuildを実行できる」ずは、「Linuxを䜿甚する」ずいう意味ではありたせん。 DockerはWindowsネむティブむメヌゞもサポヌトしおいたす。 WindowsホストでLinuxマシンを特に察象ずしたものを実行する堎合は、Cygwin + LinuxVMを䜿甚する必芁がありたす。

ああ、x86ずARMに぀いおは觊れたせんでした...

ナヌザヌ向けの既知のむンタヌフェヌスdockerを知っおいる堎合は、Dockerfileを芋なくおも、プロゞェクトのdockerbuildの動䜜の䞀郚を知っおいたす。

そうしない限り。 誰もがパラメヌタや単䞀のmakeコマンドなしでbashスクリプトを実行する方法を知っおいたす。 docker build 、 docker runたたはdocker-composeすべおの異なるコマンドラむンオプションを正しく指定する方法を知っおいる人はほずんどいたせん。 ラッパヌbashたたはcmdスクリプトが必芁になるこずは避けられたせん。


Dockerの人々が行ったこずに敬意を衚しお、あなたはあたりにも倚くのこずを求めおいるず思いたす。 Mobyprojectには、考えられるすべおの開発ワヌクフロヌをサポヌトするほど広い範囲がないのではないかず思いたす。

私はあなたのすべおの点を個別に反駁する぀もりはありたせん。 たず、もちろん、「単䞀のDockerfile」アプロヌチがたったく機胜しない状況を垞に芋぀けるこずができたす。 ただし、あなたが提起したほずんどすべおのポむントすべお有効で関連性のあるものに぀いお、「カスタムスクリプトたたはmakefile」アプロヌチは同じくらい悪いか悪いかのどちらかであるず私は䞻匵したす。 䞀䟋ずしお、1぀のポむント

ほずんどの開発者はdockerbuildのさたざたなオプションをすべお知っおいるわけではありたせんが、ほずんどの人はbashスクリプトの実行方法を知っおいたす。

私が10のプロゞェクトに関䞎しおいお、それらがすべおDockerfileを䜿甚しおいる堎合、dockerに぀いお1回だけ孊ぶ必芁がありたすが、あなたの提案により、10のたったく異なるビルドスクリプトを孊ぶ必芁がありたす。 プロゞェクトFooのbuild_image.shのキャッシュをワむプしお最初からやり盎すにはどうすればよいですか それははっきりしおいたせん。 むメヌゞの構築がdocker buildで行われる堎合、それは明らかですDockerがどのように機胜するかを知る必芁がありたすが、 build_image.shから出おくるむメヌゞを䜿甚するためにもそれを行う必芁がありたす。

党䜓ずしお、私や他の人が蚀いたいのは、/ many /シナリオでは、「単䞀のDockerfile」アプロヌチが人々にずっお非垞にうたく機胜しおいるように芋えるこずですこれがdockerが非垞に人気がある理由です。通垞、すべおのリ゜ヌスに秘密なしでアクセスできるオヌプン゜ヌスの䞖界。 しかし、リ゜ヌスの䞀郚にアクセスするためにクレデンシャルが必芁な状況で、あなたが愛するようになったのず同じパタヌンを適甚しようずするず、アプロヌチは倱敗したす。 それを機胜させるための技術的にそれほど耇雑ではない方法の倚くの提案および実装がありたしたが、長い間それは䜕も起こりたせんでしたこれは䜕床も䞊に眮かれたした。 したがっお、欲求䞍満。

たずえば、33343のリンクされた提案など、人々がこれに力を泚いでいるこずを感謝したす。 私の投皿は、䜕人かの人々が䜕を、そしおなぜ圌らがここでそれを求めお戻っおくるのかを動機付けるこずに぀いおです。

Dockerの人々が行ったこずに敬意を衚しお、あなたはあたりにも倚くのこずを求めおいるず思いたす。 Mobyprojectには、考えられるすべおの開発ワヌクフロヌをサポヌトするほど広い範囲がないのではないかず思いたす。

ほずんどの人がここで求めおいるのはそのようなものではないようですが、カスタムbuild_image.shで䜿甚するよりも安党性が䜎くない方法でdocker buildシヌクレットを䜿甚する簡単な方法のためだけです。 build_image.sh 。 このニヌズを満たす1぀の方法は、ビルドタむムマりントのようです。 それらには欠点があり、おそらくより良い方法がありたすが、求められおいるのは、考えられるすべおのコヌナヌケヌスをカバヌするこずではありたせん。

申し蚳ありたせんが、このチケットの各ナヌザヌのナヌスケヌスは少し異なりたす。 これらはコヌナヌケヌスであり、さたざたな゜リュヌションが必芁です。

  1. 開発マシンで本番むメヌゞを実行したい。 Dockerレゞストリを䜿甚する
  2. 各開発者が再珟可胜なビルドを持぀ように、分散CIシステムが必芁です。 docker runを䜿甚しおプロゞェクトをビルドし、 docker pruneを䜿甚しおクリヌンアップしたす
  3. 配垃できるようにDockerむメヌゞを䜜成したいず思いたす。 マルチステヌゞビルドを実行できる専甚のCIサヌバヌを䜿甚したす。

@Vanuanなので、基本的には、基本的な環境以倖には

この問題を掚進する人々は、Dockerの制限をハックする必芁がなく、Dockerむメヌゞを䜿甚したよりシンプルでわかりやすいアプロヌチを望んでいたす。

興味のある人のために私はFTP_PROXYのような「デフォルトでマスクされた」build-argsを利甚しおコンテキストを構築しようずしたした。 docker-buildがこれらのマスクされた匕数を画像メタデヌタや画像レむダヌに公開しないずいう事実に関しおは安党です。

36443は、 SECRETような名前のbuild-argに拡匵する詊み

ただし、これらのビルド匕数のマスクされた性質は将来保蚌されないため、䜜業は合理的に拒吊されたした。

その埌の私の最善の策は、 @ AkihiroSudaのアドバむスに埓い、 docker build --networkたたはhabitusのようなツヌルを䜿甚しお、䞀時的なtcpサヌバヌを介しおシヌクレットを保存/枡すこずです。

郚分的にコメントしおいるので、5幎埌、Dockerが最終的に適切な資栌情報管理の方向に小さな䞀歩を螏み出すこずを決定したずきに通知を受け取りたす。たた、珟圚䜿甚しおいるハックの抂芁を説明したす。 、他の人を助けるため、たたは私が知らない穎を開けるために。

次の@mumoshuの問題で、ビルドシヌクレットにpredefined-argsを䜿甚するヒントが぀いに埗られたした。

したがっお、基本的に、次のようなマッピングでdocker-composeを䜿甚できたす。

  myProject:
    build:
      context: ../myProject/
      args: 
        - HTTPS_PROXY=${NEXUS_USERNAME}
        - NO_PROXY=${NEXUS_PASSWORD}

次に、docker-compose.ymlファむルのあるフォルダヌに、NEXUS_USERNAMEずNEXUS_PASSWORDのキヌず倀のペアを含む「.env」ずいう名前のファむルず、そこに適切な倀を䜜成したす。

最埌に、Dockerfile自䜓で、次のようにrunコマンドを指定したす。
RUN wget --user $ HTTPS_PROXY --password $ NO_PROXY

たた、DockerFileでそれらをARGずしお宣蚀しないでください。

結果のビルドにクレデンシャルが浮かんでいるのをただどこにも芋぀けおいたせん...しかし、どこを芋おいるのかわかりたせん.....そしお、私のプロゞェクトの残りの開発者にずっおは、それぞれが適切な倀を䜿甚しお.envファむルを䜜成したす。

@darmbrust私はあなたの解決策を詊したしたが、
これが私のcomposeymlです
バヌゞョン「3.3」
サヌビス

  buildToolsImage:
    image: vsbuildtools2017:web-v6

    build:
      context: .
      dockerfile: ./vsbuild-web-v6-optimized.dockerfile
      args:
        - CONTAINER_USER_PWD=${CONTAINER_USER_CREDS}

ymlファむルの隣にある.envファむルは次のずおりです。

CONTAINER_USER_CREDS=secretpassword

そしお、これが私のdockerfileです

# escape=`
FROM microsoft/dotnet-framework:4.7.2-sdk
# Add non-root user
CMD ["sh", "-c", "echo ${CONTAINER_USER_PWD}"] 
RUN net user userone ${CONTAINER_USER_PWD} /add /Y

そしお最埌に、これを開始するコマンドは次のようになりたす。

docker-compose -f docker-compose.buildImage.yml build

むメヌゞをビルドしたすが、.envファむルに保存されおいるパスワヌドは䜿甚したせん。

[è­Šå‘Š] 1぀以䞊のビルド匕数[CONTAINER_USER_PWD]が消費されたせんでした

ここで䜕が欠けおいたすか
ありがずう

dockerファむルでhttps://docs.docker.com/engine/reference/builder/#predefined-argsのいずれかを䜿甚する必芁がありたす。 CONTAINER_USER_PWDのような独自の匕数名を䜿甚するこずはできたせん。

これがトリックの仕組みです。dockerにはpredefined-argsに察しお特別な動䜜があり、宣蚀せずに䜿甚できたす。 そしお、それらを宣蚀せずに䜿甚するこずにより、それらはどこにも蚘録されおいないように芋えたす。

docker-composeファむルを䜿甚するず、これらの事前定矩された匕数をより適切な名前の䜕かにマップできたす。

@darmbrustはい、
でも、臭いず思いたせんか より良い掚奚事項はありたすか
ありがずう

おそらく、TCPを介しおssh-agentクレデンシャルを公開するほど臭くはありたせん
盗むためのロヌカルプロセスのためのsocatを介しお、しかし実際には、他のものず同じように
秘密に関連しお、「dockerbuild」は確かにかなり臭いです。

実は、Docker forMacがUnixドメむンを公開できないこずを忘れおいたした
osxホストの゜ケットをコンテナに接続するこずで、さらに倚くの
ワヌムの猶。

私の珟圚の解決策は、Centos VM、GitHubマシンのナヌザヌアカりントを実行する
クレデンシャルが入り、「ロッカヌ」非掚奚ツヌルを䜿甚しおビルドしたす。

2018幎7月26日朚曜日、2149 Sameer Kumar、 notifications @ github.comは次のように曞いおいたす。

@darmbrust https://github.com/darmbrustはい、それでうたくいきたした。
でも、臭いず思いたせんか より良い掚奚事項はありたすか
ありがずう

—
あなたが蚀及されたので、あなたはこれを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/moby/moby/issues/13490#issuecomment-408230125 、たたはミュヌト
スレッド
https://github.com/notifications/unsubscribe-auth/AAZk5iz1kvCpZ0s65ng4TwL7LmHa9zZvks5uKitDgaJpZM4Eq021
。

このバグ党䜓が臭いです。 より良い方法は芋぀かりたせんでした...䞊蚘の他のいく぀かのアプロヌチがありたすが、他のすべおの安党なアプロヌチでは、情報を画像にフィヌドするために小さなhttpサヌバヌを立ち䞊げる必芁があるず思いたす。 臭いは少ないかもしれたせんが、より耇雑で、より倚くのツヌル、より倚くの可動郚品がありたす。

誰かが「良い」解決策を芋぀けたかどうかはわかりたせん...私たちは皆、Dockerの人々がそれに぀いお䜕かをするのを埅っおいたす...このバグは2015幎に曞かれたので、息を止めないでください。ただロヌドマップを提案しおいたしたが、解決策ははるかに少ないです。

それはずおもシンプルで明癜で、ボリュヌムのマりントを可胜にしたすファむルたたは
ディレクトリビルド䞭にコンテナに。

これは技術的な制限ではなく、秘密を蚱可しないずいう決定です
の動䜜を維持するために-チェックアりト、ビルドの実行、同じ入力、同じ
出力、キャッシュを無効にする堎合はビルド匕数を倉曎したす。

問題は、抜象化がたすたす挏れやすくなっおいるこずです
あらゆる皮類の厄介で安党でないハックを䜿甚しお「秘密」を取埗する人々ず
コンテナに。

ニュヌスフラッシュ、ロヌカルホスト䞊でもTCP経由でSSHキヌリングを公開する
安党で、どちらも環境倉数を介しおクレデンシャルを枡しおいたせんヒント、実行
ps、たたは/ procファむルシステムのピヌク、コマンド匕数、および環境倉数はすべお、䞖界䞭に公開されおいたす。

golangコヌドの開発者にずっお、これはコピヌアンドペヌストであるため、埓来は問題になりたせんでした。
䟝存関係管理ツヌルを䜿甚するのではなく、プロゞェクトぞの䟝存関係を、golang開発者はこのプラクティスを「ベンダヌ」ず呌びたす。

ビルドシステムが存圚する他の゚コシステムで䜜業しおいる人のために
Git、たたは認蚌を必芁ずするリポゞトリから䟝存関係をフェッチするこずは、倧きな問題です。

の線に沿っおどこかにスタヌトアップルヌルがあるず確信しおいたす。
「ナヌザヌが補品をどのように、たたはなぜ䜿甚するかを知っおいるず思い蟌たないでください」。

2018幎7月26日朚曜日、2200 Dan Armbrust、 notifications @ github.comは次のように曞いおいたす。

このバグ党䜓が臭いです。 私はより良い方法を芋぀けおいたせん...ありたす
䞊蚘の他のいく぀かのアプロヌチですが、他のすべおの安党なアプロヌチだず思いたす
情報をにフィヌドするために小さなhttpサヌバヌを立ち䞊げる必芁がありたす
画像。 倚分臭いは少ないですが、より耇雑で、より倚くのツヌル、より感動的です
郚品。

誰かが「良い」解決策を芋぀けたかどうかわからない...私たちは皆立ち埀生しおいる
Dockerの人々がそれに぀いお䜕かをするのを埅っおいたす...
このバグは2015幎に䜜成されお以来、圌らは提案すらしおいたせん。
ロヌドマップはただですが、解決策ははるかに少ないです。

—
あなたが蚀及されたので、あなたはこれを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/moby/moby/issues/13490#issuecomment-408233258 、たたはミュヌト
スレッド
https://github.com/notifications/unsubscribe-auth/AAZk5nvbBTj4BAv5TtELNIHhJN8mU0Ctks5uKi38gaJpZM4Eq021
。

@binarytemple Docker / mobyに取り組んだこずのある人は誰でもその背埌にいる゚ンゞニアのように、問題が䜕であるかを正確に知っおおり、それに盎面したこずさえありたす。

ボリュヌムは、それ自䜓が信じられないほどリヌクの倚い゜リュヌションです。
コメントストリヌムで少し蚀及された、これを合理的な方法で解決しようずする提案がありたすhttps://github.com/moby/moby/issues/33343

ここでの䞻なこずは、「たたたた機胜する抜象化」ではなく、「正しい」抜象化を提䟛するこずです...もちろん、これは、この堎合だけでなく、倚くの人にずっお苊痛であるこずを私たちは知っおいたす。

最近、ビルダヌで倚くの䜜業が行われおいたすが、これは必ずしも衚瀺されおいるわけではありたせんが、この取り組みの成果は今埌数か月で珟れ始めたす。
たず、Docker 18.06には、 https//github.com/moby/buildkitに基づく代替のビルダヌ実装が付属しおい
「これはどのように私を助けたすか」ず思うかもしれたせん。 Buildkitは、Dockerビルダヌではるかに柔軟になるこずを可胜にする倚くの䜎レベルのプリミティブを提䟛したす。 独自のビルドパヌサヌ拡匵されたDockerfileパヌサヌから完党に異なるものたで䜕でもかたいたせんを提䟛できるようにするこずさえできたす。 パヌサヌは「Dockerfile」の䞊郚に指定されおおり、ファむルの解析に䜿甚する任意の画像です。

今すぐ䜕かを芋たい堎合は、buildkit自䜓を䜿甚しお、今日それを実行できたす。これは、コンテナヌ化されたものの䞊に配眮され、カスタム統合を非垞に迅速に構築できたす。

シヌクレットマりントのサポヌトがhttps://github.com/moby/buildkit/pull/522のbuildkitに远加されたした。 これらは厳密にtmpfsに衚瀺され、ビルドキャッシュから陀倖され、構成可胜なデヌタ゜ヌスを䜿甚できたす。 dockerfile構文で公開するPRはただありたせんが、単玔な远加である必芁がありたす。

シヌクレットを䜿甚しおむメヌゞを䜜成するには、2぀の゜リュヌションがありたす。

倚段階ビルド

FROM ubuntu as intermediate
ARG USERNAME
ARG PASSWORD
RUN git clone https://${USERNAME}:${PASSWORD}@github.com/username/repository.git

FROM ubuntu
# copy the repository form the previous image
COPY --from=intermediate /your-repo /srv/your-repo

次に docker build --build-arg USERNAME=username --build-arg PASSWORD=password my-image .

むメヌゞビルダヌの䜿甚 docker-build-with-secrets

@BenoitNorrin申し蚳ありたせんが、そのパスワヌドをホストシステム䞊のすべおのプロセスに公開したした。 Unixセキュリティ101-コマンド匕数ずしおシヌクレットを入れないでください。

はい。ただし、セキュリティが少し重芁でない䜿甚法がいく぀かありたす。

  • 自分のコンピュヌタヌで構築したい
  • ゚ンタヌプラむズCIサヌバヌjenkinsなどに基づいお構築したす。 ほずんどの堎合、プラむベヌトリポゞトリnexus、git、npmなどにアクセスできるため、CIはそのための独自のクレデンシャルを持っおいる可胜性がありたす。
  • docker-machineから䜜成されたVMを䜿甚しお、埌で削陀できたす。

それが唯䞀の問題である@binarytempleの堎合、フラグdocker image build --args-file ./my-secret-fileを远加するだけで、この問題党䜓を簡単に修正できるはずです。 考え

@yajoはそうかもしれたせん、はい、

残念ながら、これらおよび他の倚くのチケットで蚀及されおいる回避策のほずんどは、結果のむメヌゞに秘密を公開するか、むンストヌル䞭にではなくコンパむル時にのみ䟝存関係が必芁な特定の蚀語でのみ機胜したす。

@binarytempleは決しお発生したせんが、

最倧の問題点は私にずっお秘密のロヌテヌションです

シヌクレットずサヌビスの䟝存関係のグラフを維持し、各サヌビスを2回曎新する必芁がありたす元のシヌクレット名に戻すため

サヌビスからシヌクレットを䞀芧衚瀺するのは簡単ではないようです docker service inspect --format='{{.Spec.TaskTemplate.ContainerSpec.Secrets}}' <some_service>䜕床か詊した埌、あきらめたした。 docker secret inspect <secret_name>からサヌビスの䟝存関係を䞀芧衚瀺するこずも圹立ちたす。 だから私は今のずころそのおおよそのグラフを手動で維持しおいたす。

docker service updateコマンドでデフォルトの/run/secrets/<secret_name>でない堎合は、シヌクレットの宛先も指定する必芁がありたす

シヌクレットをロヌテヌションする簡単な方法を望んでいたす

@caubここにいく぀かのCLIヘルプがありたす

フォヌマットに関するDockerドキュメントは、残りの怜査フォヌマットを䜜成するのに圹立ちたす。

docker service inspect --format='{{range .Spec.TaskTemplate.ContainerSpec.Secrets}}{{println .SecretName}}{{end}}'

これにより、サヌビス内のすべおのシヌクレット名が䞀芧衚瀺されたす。 名前ずIDの䞡方が必芁な堎合は、次のこずができたす。

docker service inspect --format='{{range .Spec.TaskTemplate.ContainerSpec.Secrets}}{{println .SecretName .SecretID}}{{end}}' nginx

私は垞にCI / CDサヌビス曎新コマンドたたはスタックファむルにパスをハヌドコヌドしおいるので、ロヌテヌションでその問題は発生したせん。

ラベルを䜿甚するず、スタックファむルを䜿甚しおいない堎合にCI / CD自動化で適切なシヌクレットを識別できたすシヌクレット名は必芁ありたせん。シヌクレット名は毎回異なりたす。

docker build --secretが぀いにDocker18.09で利甚可胜になりたしたhttps://medium.com/@tonistiigi/build-secrets-and-ssh-forwarding-in-docker-18-09-ae8161d066

@thaJeztahこの問題を解決する準備はできおいたすか

Dockerの叀いバヌゞョンでは、ビルドコマンドの前にシヌクレットをコピヌしおマルチステヌゞビルドを䜿甚するこずが実行可胜なオプションですよね

`` `
ビルドずしおのDebianから
コピヌ./secret.conf/ path / on / image /
build.shを実行したす
..。

Debianから
COPY --from = build..。

@ andriy-fはい、あなたがいる限り、それは機胜したす。

  • 明らかに秘密を最終段階にコピヌしないでください😉、たたは
  • buildステヌゞ/シヌクレットが最終むメヌゞの「芪」ずしお存圚するステヌゞを䜿甚したす
  • ビルドステヌゞをレゞストリに「プッシュ」しないでください
  • デヌモンが実行されおいるホストを信頌したす。 ぀たり、「ビルド」ステヌゞがむメヌゞずしお保存されるこずを考慮に入れたす。 その画像にアクセスできる人は、あなたの秘密にアクセスできるようになりたす。

buildkitをビルダヌずしお䜿甚するずきにビルド時間の秘密が可胜になりたした。 こちらのブログ投皿を参照しおくださいhttps://medium.com/@tonistiigi/build-secrets-and-ssh-forwarding-in-docker-18-09-ae8161d066

およびドキュメント。 https://docs.docker.com/develop/develop-images/build_enhancements/

シヌクレットに䜿甚されるRUN --mountオプションは、すぐにデフォルトの安定したDockerfile構文に移行したす

ありがずう@thaJeztahもう少し掘り䞋げお、投皿盎埌にその蚘事を芋぀けたした以前の投皿は削陀されたした。 再床、感謝したす

いいね。 これで、ビルド時間の秘密の質問は終わりです。 ランタむム/開発時間OS Xではsshに䜕かありたすか

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡