Menggunakan gMSA untuk Linux wadah EC2 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.

Menggunakan gMSA untuk Linux wadah EC2 di Amazon ECS

Amazon ECS mendukung otentikasi Active Directory untuk container Linux di EC2 melalui jenis akun layanan khusus yang disebut grup Managed Service Account (). gMSA

LinuxAplikasi jaringan berbasis, seperti aplikasi .NET Core, 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. Tetapi, karena Linux kontainer tidak dapat digabungkan dengan domain, Anda perlu mengonfigurasi Linux wadah untuk dijalankan. gMSA

LinuxContainer yang berjalan dengan gMSA mengandalkan credentials-fetcher daemon yang berjalan pada instans Amazon EC2 host container. 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 kontainer Windows di situs web Microsoft Learn.

Pertimbangan

Pertimbangkan hal berikut sebelum Anda gunakan gMSA untuk Linux wadah:

  • Jika kontainer Anda berjalan di EC2, Anda dapat menggunakannya gMSA untuk Windows kontainer dan Linux kontainer. Untuk informasi tentang cara menggunakan gMSA untuk wadah Linux di Fargate, lihat. Menggunakan gMSA untuk Linux wadah di Fargate

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

  • Anda memilih antara domainless gMSA dan menggabungkan setiap instance ke satu domain. Dengan menggunakan domainlessgMSA, instance container tidak digabungkan ke domain, aplikasi lain pada instance tidak dapat menggunakan kredensil 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 kredensyal pengguna Active Directory untuk domainless. gMSA

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

    gMSAopsi penyimpanan data oleh Sistem Operasi
    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, kredensyal pengguna tanpa domain
    Berkas lokal N/A CredSpec

Prasyarat

Sebelum Anda menggunakan fitur gMSA untuk wadah Linux dengan Amazon ECS, 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 Amazon EC2. 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 gMSA akun yang ada di Direktori Aktif. Untuk informasi selengkapnya, lihat Menggunakan gMSA untuk Linux wadah EC2 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 akun. gMSA Ada beberapa opsi diPutuskan apakah Anda ingin menggabungkan instance ke domain, atau menggunakan gMSA domainless..

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

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

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

    • Jika Anda menyimpan spesifikasi kredensi di Amazon S3, izin IAM untuk Amazon Simple Storage Service diperlukan pada peran eksekusi tugas.

Menyiapkan Linux Kontainer gMSA berkemampuan di Amazon ECS

Siapkan infrastruktur

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

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

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

      • Bergabunglah dengan instance berdasarkan data pengguna

        Tambahkan langkah-langkah untuk bergabung dengan domain Active Directory ke data pengguna EC2 Anda dalam template peluncuran EC2. Beberapa grup Auto Scaling Amazon EC2 dapat menggunakan templat 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 instans EC2 tidak perlu digabungkan ke domain. Dengan menggunakan domainlessgMSA, instance container tidak digabungkan ke domain, aplikasi lain pada instance tidak dapat menggunakan kredensil untuk mengakses domain, dan tugas yang menggabungkan domain yang berbeda dapat berjalan pada instance yang sama. Sebagai gantinya, Anda memberikan nama rahasia di AWS Secrets Manager dalam CredSpec file. 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 gMSAarsitektur dan peningkatan di situs web Microsoft Learn.

      1. Buat pengguna di domain Active Directory Anda. Pengguna di Active Directory harus memiliki izin untuk mengakses akun gMSA 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 nilai kunci JSON yang dipanggilusername, 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.

        Pada Windows, PluginGUID harus cocok dengan GUID dalam contoh cuplikan berikut. 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. gMSAFitur tanpa domain memerlukan izin tambahan dalam peran eksekusi tugas. Ikuti langkahnya(Opsional) rahasia tanpa domain gMSA.

  2. Konfigurasikan instance dan instal credentials-fetcher daemon

    Anda dapat menginstal credentials-fetcher daemon dengan skrip data pengguna di Template Peluncuran EC2 Anda. Contoh berikut menunjukkan dua jenis data pengguna, cloud-config YAML atau bash script. Contoh-contoh ini untuk Amazon Linux 2023 (AL2023). Ganti MyCluster dengan nama cluster Amazon ECS yang Anda inginkan untuk bergabung dengan instans 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"
    • bashnaskah

      Jika Anda lebih nyaman dengan bash skrip dan memiliki beberapa variabel untuk ditulis/etc/ecs/ecs.config, gunakan 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 blok YAMM 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 agen ECS, lihat Amazon ECS Container Agent on. 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) rahasia tanpa domain gMSA

    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 IAM eksekusi tugas. Melakukan hal itu memberikan akses credentials-fetcher daemon ke rahasia Secrets Manager. Ganti MySecret contoh dengan Amazon Resource Name (ARN) rahasia Anda dalam daftar. Resource

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

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

  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 ARN dalam string. Jika Anda menggunakan domainlessgMSA, maka gunakan. credentialspecdomainless:

    Untuk informasi selengkapnya tentang CredSpec, lihat File spesifikasi kredensi.

    • Bucket Amazon S3

      Tambahkan spesifikasi kredensyal ke bucket Amazon S3. Kemudian, rujuk Nama Sumber Daya Amazon (ARN) dari bucket Amazon S3 di bidang credentialSpecs 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 IAM eksekusi tugas Amazon ECS.

      { "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor", "Effect": "Allow", "Action": [ "s3:Get*", "s3:List*" ], "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET", "arn:aws:s3:::DOC-EXAMPLE-BUCKET/{object}" ] } ] }
    • Parameter SSM Menyimpan parameter

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

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

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

      { "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 konteks gMSA akun ke wadah. Linux Anda menghasilkan CredSpec dan mereferensikannya di credentialSpecs bidang dalam definisi tugas Anda. CredSpecFile tidak mengandung rahasia apa pun.

Berikut ini adalah contoh CredSpec file.

{ "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" } } } }
MembuatCredSpec

Anda membuat CredSpec dengan menggunakan CredSpec PowerShell modul pada Windows komputer yang bergabung dengan domain. Ikuti langkah-langkah dalam Membuat spesifikasi kredenal di situs web Microsoft Belajar.