Apakah cara terbaik untuk menghantar bukti kelayakan AWS kepada bekas Docker?
P粉662361740
P粉662361740 2023-08-27 16:05:56
0
2
534
<p>Saya menjalankan bekas docker di Amazon EC2. Setakat ini saya telah menambah kelayakan AWS pada Dockerfile. Bolehkah anda memberitahu saya cara terbaik untuk melakukan ini? </p>
P粉662361740
P粉662361740

membalas semua(2)
P粉399585024

Docker telah banyak berubah sejak soalan ini ditanya, jadi inilah percubaan untuk mengemas kini jawapannya.

Pertama sekali, terutamanya untuk bukti kelayakan AWS pada bekas yang sudah berjalan di awan, menggunakan peranan IAM seperti Vor mengesyorkan benar-benar pilihan yang baik. Jika anda boleh melakukannya, tambah satu tambah satu pada jawapannya dan langkau yang lain.


Sebaik sahaja anda mula menjalankan perkara di luar awan, atau mempunyai pelbagai jenis rahsia, saya mengesyorkan agar tidak menyimpan rahsia di dua tempat penting:

  1. Pembolehubah persekitaran: Apabila pembolehubah ini ditakrifkan pada bekas, setiap proses dalam bekas boleh mengaksesnya, ia boleh dilihat melalui /proc, aplikasi boleh membuang persekitaran mereka untuk stdout dan menyimpannya dalam log, Dan yang paling penting, apabila anda memeriksa bekas, ia muncul dalam teks yang jelas.

  2. Dalam imej itu sendiri: imej sering ditolak ke pendaftaran di mana ramai pengguna mempunyai akses tarik, kadangkala tanpa sebarang bukti kelayakan yang diperlukan untuk menarik imej Walaupun anda memadamkan rahsia dari satu lapisan, imej itu boleh dibongkar dengan utiliti Linux biasa

    dan rahsia itu boleh didapati dari langkah di mana ia mula-mula ditambahkan pada imej.tar


Jadi apakah pilihan lain yang ada untuk rahsia dalam bekas Docker?

Pilihan A: Jika anda hanya memerlukan kunci ini semasa membina imej, tidak boleh menggunakannya sehingga binaan bermula dan belum mempunyai akses kepada BuildKit, maka Binaan berbilang peringkat ialah pilihan buruk terbaik. Anda boleh menambah rahsia pada peringkat awal binaan anda, gunakannya di sana, kemudian salin output peringkat itu tanpa rahsia ke peringkat keluaran anda, dan tolak hanya peringkat keluaran itu ke pelayan pendaftaran. Rahsia masih dalam cache imej pada pelayan binaan, jadi saya cenderung untuk menggunakannya sebagai pilihan terakhir.

Pilihan B: Juga semasa binaan, jika anda boleh menggunakan keluaran 18.09 BuildKit, pada masa ini terdapat ciri eksperimenyang membenarkan suntikan rahsia sebagai pelekap volum untuk satu baris larian. Lekapan tidak menulis pada lapisan imej, jadi anda boleh mengakses rahsia semasa binaan tanpa bimbang ia ditolak ke pelayan pendaftaran awam. Dockerfile yang dihasilkan kelihatan seperti ini:

# syntax = docker/dockerfile:experimental
FROM python:3
RUN pip install awscli
RUN --mount=type=secret,id=aws,target=/root/.aws/credentials aws s3 cp s3://... ...
Anda boleh membinanya menggunakan arahan dari 18.09 atau lebih tinggi, contohnya:

DOCKER_BUILDKIT=1 docker build -t your_image --secret id=aws,src=$HOME/.aws/credentials .

Pilihan C: Apabila berjalan pada satu nod, tanpa mod Swarm atau orkestrasi lain, anda boleh melekapkan bukti kelayakan sebagai volum baca sahaja. Mengakses kelayakan ini memerlukan akses yang sama seperti mengakses fail kelayakan yang sama di luar docker, jadi ia tidak lebih baik atau lebih teruk daripada keadaan tanpa docker. Intinya ialah kandungan fail ini tidak sepatutnya kelihatan apabila anda memeriksa bekas, melihat log, atau menolak imej ke pelayan pendaftaran kerana dalam setiap kes ia berada di luar kelantangan. Ini memerlukan anda menyalin bukti kelayakan pada hos docker, berasingan daripada penggunaan kontena. (Perhatikan bahawa sesiapa sahaja yang mempunyai keupayaan untuk menjalankan bekas pada hos itu boleh melihat bukti kelayakan anda, kerana akses kepada API docker adalah root pada hos dan root boleh melihat mana-mana fail pengguna. Jika anda tidak mempercayai sesiapa pun pada root hos pengguna, maka jangan berikan mereka akses API docker)

Untuk docker run, ini kelihatan seperti:

docker run -v $HOME/.aws/credentials:/home/app/.aws/credentials:ro your_image

Atau untuk mengarang dokumen yang anda perlukan:

version: '3'
services:
  app:
    image: your_image
    volumes:
    - $HOME/.aws/credentials:/home/app/.aws/credentials:ro

Pilihan D: Dengan mod Swarm dan alatan orkestra seperti Kubernetes, kami kini mempunyai sokongan yang lebih baik untuk rahsia daripada volum. Dengan mod Swarm, fail disulitkan pada sistem fail pengurus (walaupun kunci penyahsulitan biasanya juga ada, membenarkan pengurus dimulakan semula tanpa pentadbir memasukkan kunci penyahsulitan). Lebih-lebih lagi, rahsia itu hanya dihantar kepada pekerja yang memerlukan rahsia (untuk menjalankan bekas dengan rahsia itu), ia hanya disimpan dalam ingatan pekerja, bukan pada cakera, dan ia disuntik sebagai fail ke dalam bekas dengan tmpfs. Pengguna pada hos di luar kawanan tidak boleh melekapkan rahsia terus ke dalam bekas mereka sendiri, namun, dengan akses terbuka kepada API docker, mereka boleh mengekstrak rahsia daripada bekas yang sedang berjalan pada nod, sekali lagi mengehadkan orang yang mempunyai akses kepada rahsia itu. API. Dari mengarang, suntikan rahsia ini kelihatan seperti:

version: '3.7'

secrets:
  aws_creds:
    external: true

services:
  app:
    image: your_image
    secrets:
    - source: aws_creds
      target: /home/user/.aws/credentials
      uid: '1000'
      gid: '1000'
      mode: 0700

Anda menghidupkan mod swarm dengan docker swarm init for a single node, then follow the directions for adding additional nodes. You can create the secret externally with docker secret create aws_creds $HOME/.aws/credentials. And you deploy the compose file with docker stack deploy -c docker-compose.yml stack_name.

Saya sering menggunakan skrip berikut untuk versi rahsia saya: https://github.com/sudo-bmitch/docker-config-update

Pilihan E: Terdapat alat lain untuk menguruskan rahsia, kegemaran saya ialah Vault kerana keupayaannya mencipta rahsia terhad masa yang tamat tempoh secara automatik. Setiap aplikasi kemudiannya mendapat set tokennya sendiri untuk meminta rahsia, yang membolehkan mereka meminta rahsia terhad masa ini jika mereka boleh mencapai pelayan peti besi. Ini mengurangkan risiko jika rahsia dikeluarkan daripada rangkaian anda kerana ia sama ada tidak akan berfungsi atau akan tamat tempoh dengan cepat. AWS untuk ciri khusus Vault didokumenkan di https://www.vaultproject.io /docs/secrets/aws/index.html

P粉523625080

Cara terbaik ialah menggunakan peranan IAM dan tidak mengendalikan kelayakan langsung. (Lihat http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html )

Bukti kelayakan boleh diambil daripada http://169.254.169.254..... Memandangkan ini adalah alamat ip peribadi, ia hanya boleh diakses daripada kejadian EC2

Semua perpustakaan pelanggan AWS moden "tahu" cara mendapatkan, menyegarkan dan menggunakan bukti kelayakan dari sana. Jadi dalam kebanyakan kes, anda tidak perlu tahu mengenainya. Hanya jalankan ec2 dengan peranan IAM yang betul.

Sebagai pilihan anda boleh melepasinya pada masa jalan sebagai pembolehubah persekitaran (iaitu docker run -e AWS_ACCESS_KEY_ID=xyz -e AWS_SECRET_ACCESS_KEY=aaa myimage)

Anda boleh mengakses pembolehubah persekitaran ini dengan menjalankan printenv dalam terminal.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan