Penggunaan gMSA untuk EC2 Linux kontainer di Amazon ECS - Amazon Elastic Container Service

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Penggunaan gMSA untuk EC2 Linux kontainer di Amazon ECS

Amazon ECS mendukung otentikasi Active Directory untuk wadah Linux EC2 melalui jenis akun layanan khusus yang disebut grup Akun Layanan Terkelola (gMSA).

Linux aplikasi jaringan berbasis, seperti .NET Aplikasi inti, dapat menggunakan Active Directory untuk memfasilitasi otentikasi dan manajemen otorisasi antara pengguna dan layanan. Anda dapat menggunakan fitur ini dengan merancang aplikasi yang terintegrasi dengan Active Directory dan berjalan di server yang bergabung dengan domain. Tapi, karena Linux kontainer tidak dapat bergabung dengan domain, Anda perlu mengonfigurasi Linux wadah untuk dijalankan dengan gMSA.

A Linux kontainer yang berjalan dengan gMSA bergantung pada credentials-fetcher daemon yang berjalan pada instance Amazon host container. EC2 Artinya, daemon mengambil gMSA kredensil dari pengontrol domain Active Directory dan kemudian mentransfer kredensil ini ke instance container. Untuk informasi selengkapnya tentang akun layanan, lihat Membuat gMSAs untuk wadah Windows di situs web Microsoft Learn.

Pertimbangan

Pertimbangkan hal berikut sebelum Anda menggunakan gMSA untuk Linux wadah:

  • Jika kontainer Anda berjalanEC2, Anda dapat menggunakan gMSA untuk Windows wadah dan Linux wadah. Untuk informasi tentang cara menggunakan gMSA untuk wadah Linux di Fargate, lihat. Penggunaan gMSA untuk Linux kontainer di Fargate

  • Anda mungkin membutuhkan Windows komputer yang bergabung ke domain untuk menyelesaikan prasyarat. Misalnya, Anda mungkin membutuhkan Windows komputer yang bergabung dengan domain untuk membuat gMSA di Active Directory dengan PowerShell. RSAT PowerShell Alat Direktur Aktif hanya tersedia untuk Windows. Untuk informasi selengkapnya, lihat Menginstal alat administrasi Direktori Aktif.

  • Anda memilih antara domainless gMSAdan menggabungkan setiap instance ke satu domain. Dengan menggunakan domainless gMSA, instance container tidak bergabung ke domain, aplikasi lain pada instance tidak dapat menggunakan kredensional untuk mengakses domain, dan tugas yang menggabungkan domain yang berbeda dapat berjalan pada instance yang sama.

    Kemudian, pilih penyimpanan data untuk CredSpec dan opsional, untuk kredensional pengguna Active Directory untuk domainless gMSA.

    Amazon ECS menggunakan file spesifikasi kredensi Direktori Aktif (CredSpec). File ini berisi gMSA metadata yang digunakan untuk menyebarkan gMSA konteks akun ke wadah. Anda menghasilkan CredSpec file dan kemudian simpan di salah satu CredSpec opsi penyimpanan dalam tabel berikut, khusus untuk Sistem Operasi instance kontainer. Untuk menggunakan metode domainless, bagian opsional di CredSpec file dapat menentukan kredensi di salah satu domainless user credentialsopsi penyimpanan dalam tabel berikut, khusus untuk Sistem Operasi instance kontainer.

    Lokasi penyimpanan Linux Windows
    Amazon Simple Storage Service CredSpec CredSpec
    AWS Secrets Manager kredensial pengguna tanpa domain kredensial pengguna tanpa domain
    Toko Parameter Amazon EC2 Systems Manager CredSpec CredSpec, kredensi pengguna tanpa domain
    File lokal N/A CredSpec

Prasyarat

Sebelum Anda menggunakan gMSA untuk fitur wadah Linux dengan AmazonECS, pastikan untuk menyelesaikan yang berikut ini:

  • Anda menyiapkan domain Direktori Aktif dengan sumber daya yang ingin diakses oleh kontainer Anda. Amazon ECS mendukung pengaturan berikut:

    • Direktori AWS Directory Service Aktif. AWS Directory Service adalah Direktori Aktif AWS terkelola yang di-host di AmazonEC2. Untuk informasi selengkapnya, lihat Memulai dengan Microsoft AD yang AWS Dikelola di Panduan AWS Directory Service Administrasi.

    • Direktori Aktif lokal. Anda harus memastikan bahwa instans penampung Amazon ECS Linux dapat bergabung dengan domain. Untuk informasi selengkapnya, lihat AWS Direct Connect.

  • Anda memiliki yang sudah ada gMSA akun di Direktori Aktif. Untuk informasi selengkapnya, lihat Penggunaan gMSA untuk EC2 Linux kontainer di Amazon ECS.

  • Anda menginstal dan menjalankan credentials-fetcher daemon pada instance container Amazon ECS Linux. Anda juga menambahkan kumpulan kredensil awal ke credentials-fetcher daemon untuk mengautentikasi dengan Active Directory.

    catatan

    credentials-fetcherDaemon hanya tersedia untuk Amazon Linux 2023 dan Fedora 37 dan yang lebih baru. Daemon tidak tersedia untuk Amazon Linux 2. Untuk informasi selengkapnya, lihat aws/credentials-fetcher di. GitHub

  • Anda mengatur kredensyal untuk credentials-fetcher daemon untuk mengautentikasi dengan Active Directory. Kredensialnya harus menjadi anggota grup keamanan Active Directory yang memiliki akses ke gMSA akun. Ada beberapa opsi diPutuskan apakah Anda ingin menggabungkan instance ke domain, atau menggunakan domainless gMSA..

  • Anda menambahkan IAM izin yang diperlukan. Izin yang diperlukan bergantung pada metode yang Anda pilih untuk kredensyal awal dan untuk menyimpan spesifikasi kredensialnya:

    • Jika Anda menggunakan domainless gMSAuntuk kredensi awal, IAM izin untuk AWS Secrets Manager diperlukan pada peran eksekusi tugas.

    • Jika Anda menyimpan spesifikasi kredensi di SSM Parameter Store, IAM izin untuk Amazon EC2 Systems Manager Parameter Store diperlukan pada peran eksekusi tugas.

    • Jika Anda menyimpan spesifikasi kredensyal di Amazon S3IAM, izin untuk Amazon Simple Storage Service diperlukan pada peran eksekusi tugas.

Pengaturan gMSA-mampu Linux Wadah di Amazon ECS

Siapkan infrastruktur

Langkah-langkah berikut adalah pertimbangan dan pengaturan yang dilakukan sekali. Setelah menyelesaikan langkah-langkah ini, Anda dapat mengotomatiskan pembuatan instance kontainer untuk menggunakan kembali konfigurasi ini.

Putuskan bagaimana kredensyal awal disediakan dan konfigurasikan data EC2 pengguna dalam templat EC2 peluncuran yang dapat digunakan kembali untuk menginstal daemon. credentials-fetcher

  1. Putuskan apakah Anda ingin menggabungkan instance ke domain, atau menggunakan domainless gMSA.
    • Bergabunglah dengan EC2 instance ke domain Active Directory

      • Bergabunglah dengan instance berdasarkan data pengguna

        Tambahkan langkah-langkah untuk bergabung dengan domain Active Directory ke data EC2 pengguna Anda dalam template EC2 peluncuran. Beberapa grup Amazon EC2 Auto Scaling dapat menggunakan template peluncuran yang sama.

        Anda dapat menggunakan langkah-langkah ini Bergabung dengan Active Directory atau FreeIPA domain di Fedora Docs.

    • Jadikan pengguna Active Directory untuk domainless gMSA

      credentials-fetcherDaemon memiliki fitur yang disebut domainless gMSA. Fitur ini memerlukan domain, tetapi EC2 instance tidak perlu digabungkan ke domain. Dengan menggunakan domainless gMSA, instance container tidak bergabung ke domain, aplikasi lain pada instance tidak dapat menggunakan kredensional untuk mengakses domain, dan tugas yang menggabungkan domain yang berbeda dapat berjalan pada instance yang sama. Sebaliknya, Anda memberikan nama rahasia AWS Secrets Manager di dalam CredSpec berkas. Rahasianya harus berisi nama pengguna, kata sandi, dan domain untuk masuk.

      Fitur ini didukung dan dapat digunakan dengan wadah Linux dan Windows.

      Fitur ini mirip dengan gMSA support for non-domain-joined container hostsfitur. Untuk informasi selengkapnya tentang fitur Windows, lihat gMSA arsitektur dan peningkatan di situs web Microsoft Learn.

      1. Buat pengguna di domain Active Directory Anda. Pengguna di Active Directory harus memiliki izin untuk mengakses gMSA akun layanan yang Anda gunakan dalam tugas.

      2. Buat rahasia di AWS Secrets Manager, setelah Anda membuat pengguna di Active Directory. Untuk informasi selengkapnya, lihat Membuat AWS Secrets Manager rahasia.

      3. Masukkan nama pengguna, kata sandi, dan domain ke pasangan JSON nilai kunci yang disebutusername, password dandomainName, masing-masing.

        {"username":"username","password":"passw0rd", "domainName":"example.com"}
      4. Tambahkan konfigurasi ke CredSpec file untuk akun layanan. Tambahan HostAccountConfig berisi Amazon Resource Name (ARN) dari rahasia di Secrets Manager.

        Di Windows, PluginGUID harus cocok dengan cuplikan contoh berikut. GUID Di Linux, PluginGUID itu diabaikan. Ganti MySecret dengan contoh dengan Amazon Resource Name (ARN) rahasia Anda.

        "ActiveDirectoryConfig": { "HostAccountConfig": { "PortableCcgVersion": "1", "PluginGUID": "{859E1386-BDB4-49E8-85C7-3070B13920E1}", "PluginInput": { "CredentialArn": "arn:aws:secretsmanager:aws-region:111122223333:secret:MySecret" } }
      5. Domainless gMSAfitur membutuhkan izin tambahan dalam peran eksekusi tugas. Ikuti langkahnya(Opsional) tanpa domain gMSA Rahasia.

  2. Konfigurasikan instance dan instal credentials-fetcher daemon

    Anda dapat menginstal credentials-fetcher daemon dengan skrip data pengguna di Template EC2 Peluncuran Anda. Contoh berikut menunjukkan dua jenis data pengguna, cloud-config YAML atau bash naskah. Contoh-contoh ini untuk Amazon Linux 2023 (AL2023). Ganti MyCluster dengan nama ECS cluster Amazon yang Anda inginkan untuk bergabung dengan instance ini.

    • cloud-config YAML
      Content-Type: text/cloud-config package_reboot_if_required: true packages: # prerequisites - dotnet - realmd - oddjob - oddjob-mkhomedir - sssd - adcli - krb5-workstation - samba-common-tools # https://github.com/aws/credentials-fetcher gMSA credentials management for containers - credentials-fetcher write_files: # configure the ECS Agent to join your cluster. # replace MyCluster with the name of your cluster. - path: /etc/ecs/ecs.config owner: root:root permissions: '0644' content: | ECS_CLUSTER=MyCluster ECS_GMSA_SUPPORTED=true runcmd: # start the credentials-fetcher daemon and if it succeeded, make it start after every reboot - "systemctl start credentials-fetcher" - "systemctl is-active credentials-fetch && systemctl enable credentials-fetcher"
    • bash script

      Jika Anda merasa lebih nyaman dengan bash skrip dan memiliki beberapa variabel untuk menulis/etc/ecs/ecs.config, menggunakan heredoc format berikut. Format ini menulis segalanya di antara baris dimulai dengan cat dan EOF pada file konfigurasi.

      #!/usr/bin/env bash set -euxo pipefail # prerequisites timeout 30 dnf install -y dotnet realmd oddjob oddjob-mkhomedir sssd adcli krb5-workstation samba-common-tools # install https://github.com/aws/credentials-fetcher gMSA credentials management for containers timeout 30 dnf install -y credentials-fetcher # start credentials-fetcher systemctl start credentials-fetcher systemctl is-active credentials-fetch && systemctl enable credentials-fetcher cat <<'EOF' >> /etc/ecs/ecs.config ECS_CLUSTER=MyCluster ECS_GMSA_SUPPORTED=true EOF

    Ada variabel konfigurasi opsional untuk credentials-fetcher daemon yang dapat Anda atur. /etc/ecs/ecs.config Kami menyarankan Anda mengatur variabel dalam data pengguna di YAML blok atau heredoc mirip dengan contoh sebelumnya. Melakukannya mencegah masalah dengan konfigurasi sebagian yang dapat terjadi dengan mengedit file beberapa kali. Untuk informasi selengkapnya tentang konfigurasi ECS agen, lihat Amazon ECS Container Agent di GitHub.

    • Secara opsional, Anda dapat menggunakan variabel CREDENTIALS_FETCHER_HOST jika Anda mengubah konfigurasi credentials-fetcher daemon untuk memindahkan soket ke lokasi lain.

Menyiapkan izin dan rahasia

Lakukan langkah-langkah berikut sekali untuk setiap aplikasi dan setiap definisi tugas. Kami menyarankan Anda menggunakan praktik terbaik untuk memberikan hak istimewa paling sedikit dan mempersempit izin yang digunakan dalam kebijakan. Dengan cara ini, setiap tugas hanya dapat membaca rahasia yang dibutuhkannya.

  1. (Opsional) tanpa domain gMSA Rahasia

    Jika Anda menggunakan metode domainless di mana instance tidak bergabung dengan domain, ikuti langkah ini.

    Anda harus menambahkan izin berikut sebagai kebijakan inline ke peran eksekusi IAM tugas. Melakukan hal itu memberikan akses credentials-fetcher daemon ke rahasia Secrets Manager. Ganti MySecret contoh dengan Amazon Resource Name (ARN) rahasia Anda dalam Resource daftar.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue" ], "Resource": [ "arn:aws:ssm:aws-region:111122223333:secret:MySecret" ] } ] }
    catatan

    Jika Anda menggunakan KMS kunci Anda sendiri untuk mengenkripsi rahasia Anda, Anda harus menambahkan izin yang diperlukan untuk peran ini dan menambahkan peran ini ke kebijakan AWS KMS kunci.

  2. Putuskan apakah Anda menggunakan SSM Parameter Store atau S3 untuk menyimpan CredSpec

    Amazon ECS mendukung cara-cara berikut untuk mereferensikan jalur file di credentialSpecs bidang definisi tugas.

    Jika Anda menggabungkan instance ke satu domain, gunakan awalan credentialspec: di awal stringARN. Jika Anda menggunakan domainless gMSA, lalu gunakancredentialspecdomainless:.

    Untuk informasi lebih lanjut tentang CredSpec, lihat File spesifikasi kredensi.

    • Bucket Amazon S3

      Tambahkan spesifikasi kredenal ke bucket Amazon S3. Kemudian, rujuk Nama Sumber Daya Amazon (ARN) dari bucket Amazon S3 di credentialSpecs bidang definisi tugas.

      { "family": "", "executionRoleArn": "", "containerDefinitions": [ { "name": "", ... "credentialSpecs": [ "credentialspecdomainless:arn:aws:s3:::${BucketName}/${ObjectName}" ], ... } ], ... }

      Untuk memberikan akses tugas ke bucket S3, tambahkan izin berikut sebagai kebijakan inline ke peran eksekusi ECS tugas Amazon. IAM

      { "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor", "Effect": "Allow", "Action": [ "s3:Get*", "s3:List*" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket", "arn:aws:s3:::amzn-s3-demo-bucket/{object}" ] } ] }
    • Parameter Penyimpanan Parameter SSM

      Tambahkan spesifikasi kredenal ke SSM parameter Parameter Store. Kemudian, rujuk Amazon Resource Name (ARN) dari parameter Parameter Store di credentialSpecs bidang definisi tugas. SSM

      { "family": "", "executionRoleArn": "", "containerDefinitions": [ { "name": "", ... "credentialSpecs": [ "credentialspecdomainless:arn:aws:ssm:aws-region:111122223333:parameter/parameter_name" ], ... } ], ... }

      Untuk memberikan akses tugas Anda ke SSM parameter Parameter Store, tambahkan izin berikut sebagai kebijakan inline ke peran eksekusi ECS IAM tugas Amazon.

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssm:GetParameters" ], "Resource": [ "arn:aws:ssm:aws-region:111122223333:parameter/parameter_name" ] } ] }

File spesifikasi kredensi

Amazon ECS menggunakan file spesifikasi kredensi Direktori Aktif (CredSpec). File ini berisi gMSA metadata yang digunakan untuk menyebarkan gMSA konteks akun untuk Linux wadah. Anda menghasilkan CredSpec dan referensi di credentialSpecs bidang dalam definisi tugas Anda. Bagian CredSpec file tidak mengandung rahasia apa pun.

Berikut ini adalah contoh CredSpec berkas.

{ "CmsPlugins": [ "ActiveDirectory" ], "DomainJoinConfig": { "Sid": "S-1-5-21-2554468230-2647958158-2204241789", "MachineAccountName": "WebApp01", "Guid": "8665abd4-e947-4dd0-9a51-f8254943c90b", "DnsTreeName": "example.com", "DnsName": "example.com", "NetBiosName": "example" }, "ActiveDirectoryConfig": { "GroupManagedServiceAccounts": [ { "Name": "WebApp01", "Scope": "example.com" } ], "HostAccountConfig": { "PortableCcgVersion": "1", "PluginGUID": "{859E1386-BDB4-49E8-85C7-3070B13920E1}", "PluginInput": { "CredentialArn": "arn:aws:secretsmanager:aws-region:111122223333:secret:MySecret" } } } }
Membuat sebuah CredSpec

Anda membuat CredSpec dengan menggunakan CredSpec PowerShell modul pada a Windows komputer yang bergabung dengan domain. Ikuti langkah-langkah di Buat spesifikasi kredenal di Microsoft Pelajari situs web.