Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
AWS Secrets Manager Agen
AWS Secrets Manager Agen adalah HTTP layanan sisi klien yang dapat Anda gunakan untuk membakukan konsumsi rahasia dari Secrets Manager di seluruh lingkungan seperti Amazon Elastic Container Service, AWS Lambda Amazon Elastic Kubernetes Service, dan Amazon Elastic Compute Cloud. Secrets Manager Agent dapat mengambil dan menyimpan rahasia dalam memori sehingga aplikasi Anda dapat mengkonsumsi rahasia langsung dari cache. Itu berarti Anda dapat mengambil rahasia yang dibutuhkan aplikasi Anda dari localhost alih-alih melakukan panggilan ke Secrets Manager. Agen Secrets Manager hanya dapat membuat permintaan baca ke Secrets Manager - tidak dapat mengubah rahasia.
Secrets Manager Agent menggunakan AWS kredensyal yang Anda berikan di lingkungan Anda untuk melakukan panggilan ke Secrets Manager. Secrets Manager Agent menawarkan perlindungan terhadap Server Side Request Forgery (SSRF) untuk membantu meningkatkan keamanan rahasia. Anda dapat mengonfigurasi Secrets Manager Agent dengan mengatur jumlah maksimum koneksi, waktu untuk live (TTL), HTTP port localhost, dan ukuran cache.
Karena Secrets Manager Agent menggunakan cache dalam memori, maka akan disetel ulang saat Secrets Manager Agent dimulai ulang. Secrets Manager Agent secara berkala menyegarkan nilai rahasia yang di-cache. Penyegaran terjadi ketika Anda mencoba membaca rahasia dari Agen Secrets Manager setelah TTL kedaluwarsa. Frekuensi refresh default (TTL) adalah 300 detik, dan Anda dapat mengubahnya dengan menggunakan File konfigurasi yang Anda berikan ke Secrets Manager Agent menggunakan argumen baris --config
perintah. Secrets Manager Agent tidak menyertakan pembatalan cache. Misalnya, jika rahasia berputar sebelum entri cache kedaluwarsa, Agen Secrets Manager mungkin mengembalikan nilai rahasia basi.
Secrets Manager Agent mengembalikan nilai rahasia dalam format yang sama dengan responsGetSecretValue
. Nilai rahasia tidak dienkripsi dalam cache.
Untuk mengunduh kode sumber, lihat https://github.com/aws/aws-secretsmanager-agentdi GitHub.
Langkah 1: Bangun biner Secrets Manager Agent
Untuk membangun biner Secrets Manager Agent secara native, Anda memerlukan alat pengembangan standar dan alat Rust. Atau, Anda dapat mengkompilasi silang untuk sistem yang mendukungnya, atau Anda dapat menggunakan Rust cross untuk mengkompilasi silang.
- RPM-based systems
-
-
Pada sistem RPM berbasis seperti AL2 023, Anda dapat menginstal alat pengembangan dengan menggunakan grup Alat Pengembangan.
sudo yum -y groupinstall "Development Tools"
-
Ikuti instruksi di Install Rust dalam dokumentasi Rust.
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
. "$HOME/.cargo/env"
-
Bangun agen menggunakan perintah cargo build:
cargo build --release
Anda akan menemukan executable di bawah. target/release/aws-secrets-manager-agent
- Debian-based systems
-
-
Pada sistem berbasis Debian seperti Ubuntu, Anda dapat menginstal alat pengembang menggunakan paket build-essential.
sudo apt install build-essential
-
Ikuti instruksi di Install Rust dalam dokumentasi Rust.
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
. "$HOME/.cargo/env"
-
Bangun agen menggunakan perintah cargo build:
cargo build --release
Anda akan menemukan executable di bawah. target/release/aws-secrets-manager-agent
- Windows
-
Untuk membangun di Windows, ikuti petunjuk di Siapkan lingkungan dev Anda di Windows for Rust dalam dokumentasi Microsoft Windows.
- Cross-compile natively
-
Pada distribusi di mana paket mingw-w64 tersedia seperti Ubuntu, Anda dapat melakukan kompilasi silang secara native.
# Install the cross compile tool chain
sudo add-apt-repository universe
sudo apt install -y mingw-w64
# Install the rust build targets
rustup target add x86_64-pc-windows-gnu
# Cross compile the agent for Windows
cargo build --release --target x86_64-pc-windows-gnu
Anda akan menemukan executable di. target/x86_64-pc-windows-gnu/release/aws-secrets-manager-agent.exe
- Cross compile with Rust cross
-
Jika alat kompilasi silang tidak tersedia secara asli di sistem, Anda dapat menggunakan proyek silang Rust. Untuk informasi lebih lanjut, lihat https://github.com/cross-rs/silang.
Kami merekomendasikan ruang disk 32GB untuk lingkungan build.
# Install and start docker
sudo yum -y install docker
sudo systemctl start docker
sudo systemctl enable docker # Make docker start after reboot
# Give ourselves permission to run the docker images without sudo
sudo usermod -aG docker $USER
newgrp docker
# Install cross and cross compile the executable
cargo install cross
cross build --release --target x86_64-pc-windows-gnu
Langkah 2: Instal Agen Secrets Manager
Berdasarkan jenis komputasi, Anda memiliki beberapa opsi untuk menginstal Secrets Manager Agent.
- Amazon EKS, Amazon EC2, and Amazon ECS
-
Untuk menginstal Agen Secrets Manager
-
Gunakan install
skrip yang disediakan di repositori.
Skrip menghasilkan SSRF token acak saat startup dan menyimpannya dalam file/var/run/awssmatoken
. Token dapat dibaca oleh awssmatokenreader
grup yang dibuat oleh skrip penginstalan.
-
Untuk memungkinkan aplikasi Anda membaca file token, Anda perlu menambahkan akun pengguna yang dijalankan aplikasi Anda ke awssmatokenreader
grup. Misalnya, Anda dapat memberikan izin untuk aplikasi Anda untuk membaca file token dengan perintah usermod berikut, di mana <APP_USER>
ID pengguna tempat aplikasi Anda berjalan.
sudo usermod -aG awssmatokenreader <APP_USER>
- Docker
-
Anda dapat menjalankan Secrets Manager Agent sebagai wadah sespan bersama aplikasi Anda dengan menggunakan Docker. Kemudian aplikasi Anda dapat mengambil rahasia dari HTTP server lokal yang disediakan Agen Secrets Manager. Untuk informasi tentang Docker, lihat dokumentasi Docker.
Untuk membuat wadah sespan untuk Secrets Manager Agent dengan Docker
-
Buat Dockerfile untuk wadah sidecar Secrets Manager Agent. Contoh berikut membuat wadah Docker dengan biner Secrets Manager Agent.
# Use the latest Debian image as the base
FROM debian:latest
# Set the working directory inside the container
WORKDIR /app
# Copy the Secrets Manager Agent binary to the container
COPY secrets-manager-agent .
# Install any necessary dependencies
RUN apt-get update && apt-get install -y ca-certificates
# Set the entry point to run the Secrets Manager Agent binary
ENTRYPOINT ["./secrets-manager-agent"]
-
Buat Dockerfile untuk aplikasi klien Anda.
-
Buat file Docker Compose untuk menjalankan kedua kontainer, pastikan mereka menggunakan antarmuka jaringan yang sama. Hal ini diperlukan karena Secrets Manager Agent tidak menerima permintaan dari luar antarmuka localhost. Contoh berikut menunjukkan file Docker Compose di mana network_mode
kunci melampirkan secrets-manager-agent
wadah ke namespace jaringan client-application
wadah, yang memungkinkan mereka untuk berbagi antarmuka jaringan yang sama.
Anda harus memuat AWS kredensi dan SSRF token agar aplikasi dapat menggunakan Secrets Manager Agent. Lihat yang berikut ini:
version: '3'
services:
client-application:
container_name: client-application
build:
context: .
dockerfile: Dockerfile.client
command: tail -f /dev/null # Keep the container running
secrets-manager-agent:
container_name: secrets-manager-agent
build:
context: .
dockerfile: Dockerfile.agent
network_mode: "container:client-application" # Attach to the client-application container's network
depends_on:
- client-application
-
Salin secrets-manager-agent
biner ke direktori yang sama yang berisi file Dockerfiles dan Docker Compose Anda.
-
Bangun dan jalankan kontainer berdasarkan Dockerfiles yang disediakan dengan menggunakan perintah berikut docker-compose
.
docker-compose up --build
Dalam wadah klien Anda, Anda sekarang dapat menggunakan Secrets Manager Agent untuk mengambil rahasia. Untuk informasi selengkapnya, lihat Langkah 3: Ambil rahasia dengan Agen Secrets Manager.
- AWS Lambda
-
Anda dapat mengemas Secrets Manager Agent sebagai AWS Lambda ekstensi. Kemudian Anda dapat menambahkannya ke fungsi Lambda Anda sebagai lapisan dan memanggil Secrets Manager Agent dari fungsi Lambda Anda untuk mendapatkan rahasia.
Petunjuk berikut menunjukkan cara mendapatkan rahasia bernama MyTest
dengan menggunakan skrip secrets-manager-agent-extension.sh
contoh https://github.com/aws/aws-secretsmanager-agentuntuk menginstal Secrets Manager Agent sebagai ekstensi Lambda.
Untuk membuat ekstensi Lambda yang mengemas Agen Secrets Manager
Buat fungsi Lambda Python yang meminta untuk mendapatkan rahasia. http://localhost:2773/secretsmanager/get?secretId=MyTest
Pastikan untuk menerapkan logika coba lagi dalam kode aplikasi Anda untuk mengakomodasi penundaan inisialisasi dan pendaftaran ekstensi Lambda.
-
Dari root paket kode Agen Secrets Manager, jalankan perintah berikut untuk menguji ekstensi Lambda.
AWS_ACCOUNT_ID=<AWS_ACCOUNT_ID>
LAMBDA_ARN=<LAMBDA_ARN>
# Build the release binary
cargo build --release --target=x86_64-unknown-linux-gnu
# Copy the release binary into the `bin` folder
mkdir -p ./bin
cp ./target/x86_64-unknown-linux-gnu/release/aws_secretsmanager_agent ./bin/secrets-manager-agent
# Copy the `secrets-manager-agent-extension.sh` script into the `extensions` folder.
mkdir -p ./extensions
cp aws_secretsmanager_agent/examples/example-lambda-extension/secrets-manager-agent-extension.sh ./extensions
# Zip the extension shell script and the binary
zip secrets-manager-agent-extension.zip bin/* extensions/*
# Publish the layer version
LAYER_VERSION_ARN=$(aws lambda publish-layer-version \
--layer-name secrets-manager-agent-extension \
--zip-file "fileb://secrets-manager-agent-extension.zip" | jq -r '.LayerVersionArn')
# Attach the layer version to the Lambda function
aws lambda update-function-configuration \
--function-name $LAMBDA_ARN \
--layers "$LAYER_VERSION_ARN"
Memanggil fungsi Lambda untuk memverifikasi bahwa rahasia sedang diambil dengan benar.
Langkah 3: Ambil rahasia dengan Agen Secrets Manager
Untuk menggunakan agen, Anda memanggil titik akhir Secrets Manager Agent lokal dan menyertakan nama atau ARN rahasia sebagai parameter kueri. Secara default, Secrets Manager Agent mengambil AWSCURRENT
versi rahasia. Untuk mengambil versi yang berbeda, Anda dapat mengatur versionStage
atauversionId
.
Untuk membantu melindungi Agen Secrets Manager, Anda harus menyertakan header SSRF token sebagai bagian dari setiap permintaan: X-Aws-Parameters-Secrets-Token
Agen Secrets Manager menolak permintaan yang tidak memiliki header ini atau yang memiliki token tidak validSSRF. Anda dapat menyesuaikan nama SSRF header di fileFile konfigurasi.
Secrets Manager Agent menggunakan AWS SDK for Rust, yang menggunakan rantai penyedia kredensyal default. Identitas IAM kredensyal ini menentukan izin yang dimiliki Agen Secrets Manager untuk mengambil rahasia.
Izin yang diperlukan:
Untuk informasi selengkapnya, lihat Referensi izin.
Setelah nilai rahasia ditarik ke Agen Secrets Manager, setiap pengguna dengan akses ke lingkungan komputasi dan SSRF token dapat mengakses rahasia dari cache Agen Secrets Manager. Untuk informasi selengkapnya, lihat Pertimbangan keamanan.
- curl
-
Contoh curl berikut menunjukkan cara mendapatkan rahasia dari Secrets Manager Agent. Contohnya bergantung pada SSRF keberadaan dalam file, yang merupakan tempat ia disimpan oleh skrip instalasi.
curl -v -H \
"X-Aws-Parameters-Secrets-Token: $(</var/run/awssmatoken)" \
'http://localhost:2773/secretsmanager/get?secretId=<YOUR_SECRET_ID>
'; \
echo
- Python
-
Contoh Python berikut menunjukkan cara mendapatkan rahasia dari Secrets Manager Agent. Contohnya bergantung pada SSRF keberadaan dalam file, yang merupakan tempat ia disimpan oleh skrip instalasi.
import requests
import json
# Function that fetches the secret from Secrets Manager Agent for the provided secret id.
def get_secret():
# Construct the URL for the GET request
url = f"http://localhost:2773/secretsmanager/get?secretId=<YOUR_SECRET_ID>
"
# Get the SSRF token from the token file
with open('/var/run/awssmatoken') as fp:
token = fp.read()
headers = {
"X-Aws-Parameters-Secrets-Token": token.strip()
}
try:
# Send the GET request with headers
response = requests.get(url, headers=headers)
# Check if the request was successful
if response.status_code == 200:
# Return the secret value
return response.text
else:
# Handle error cases
raise Exception(f"Status code {response.status_code} - {response.text}")
except Exception as e:
# Handle network errors
raise Exception(f"Error: {e}")
Konfigurasikan Agen Secrets Manager
Untuk mengubah konfigurasi Agen Secrets Manager, buat file TOMLkonfigurasi, lalu panggil./aws-secrets-manager-agent --config config.toml
.
Daftar berikut menunjukkan opsi yang dapat Anda konfigurasikan untuk Agen Secrets Manager.
log_level — Tingkat detail yang dilaporkan dalam log untuk Agen Secrets Manager:DEBUG,,, INFO WARNERROR, atau. NONE Default-nya adalah INFO.
http_port — Port untuk HTTP server lokal, dalam kisaran 1024 hingga 65535. Defaultnya adalah 2773.
wilayah — AWS Wilayah yang akan digunakan untuk permintaan. Jika tidak ada Region yang ditentukan, Secrets Manager Agent menentukan Region dariSDK. Untuk informasi selengkapnya, lihat Menentukan kredensyal dan Wilayah default Anda di Panduan Pengembang AWS SDK untuk Rust.
ttl_seconds - TTL Dalam hitungan detik untuk item yang di-cache, dalam kisaran 1 hingga 3600. Angka default-nya adalah 300. Pengaturan ini tidak digunakan jika ukuran cache adalah 0.
cache_size — Jumlah maksimum rahasia yang dapat disimpan dalam cache, dalam kisaran 0 hingga 1000. 0 menunjukkan bahwa tidak ada caching. Defaultnya adalah 1000.
ssrf_headers — Daftar nama header yang diperiksa Agen Secrets Manager untuk token. SSRF Defaultnya adalah “X-Aws-Parameters-Secrets-Token,”. X-Vault-Token
ssrf_env_variables — Daftar nama variabel lingkungan yang diperiksa oleh Secrets Manager Agent untuk token. SSRF Variabel lingkungan dapat berisi token atau referensi ke file token seperti pada:AWS_TOKEN=file:///var/run/awssmatoken
. Defaultnya adalah "AWS_TOKEN, AWS_SESSION _TOKEN”.
path_prefix — URI Awalan yang digunakan untuk menentukan apakah permintaan adalah permintaan berbasis jalur. Defaultnya adalah “/v1/”.
max_conn — Jumlah maksimum koneksi dari HTTP klien yang diizinkan oleh Agen Secrets Manager, dalam kisaran 1 hingga 1000. Defaultnya adalah 800.
Pencatatan log
Secrets Manager Agent mencatat kesalahan secara lokal ke filelogs/secrets_manager_agent.log
. Ketika aplikasi Anda memanggil Agen Secrets Manager untuk mendapatkan rahasia, panggilan tersebut muncul di log lokal. Mereka tidak muncul di CloudTrail log.
Secrets Manager Agent membuat file log baru ketika file mencapai 10 MB, dan menyimpan hingga lima file log total.
Log tidak masuk ke Secrets Manager, CloudTrail, atau CloudWatch. Permintaan untuk mendapatkan rahasia dari Agen Secrets Manager tidak muncul di log tersebut. Ketika Agen Secrets Manager melakukan panggilan ke Secrets Manager untuk mendapatkan rahasia, panggilan itu direkam CloudTrail dengan string agen pengguna yang berisiaws-secrets-manager-agent
.
Anda dapat mengonfigurasi login di fileFile konfigurasi.
Pertimbangan keamanan
Untuk arsitektur agen, domain kepercayaan adalah tempat titik akhir agen dan SSRF token dapat diakses, yang biasanya merupakan seluruh host. Domain kepercayaan untuk Agen Secrets Manager harus sesuai dengan domain tempat kredensyal Secrets Manager tersedia untuk mempertahankan postur keamanan yang sama. Misalnya, di Amazon EC2 domain kepercayaan untuk Agen Secrets Manager akan sama dengan domain kredensialnya saat menggunakan peran untuk Amazon. EC2
Aplikasi sadar keamanan yang belum menggunakan solusi agen dengan kredensyal Secrets Manager yang dikunci ke aplikasi harus mempertimbangkan untuk menggunakan solusi khusus bahasa AWS SDKs atau caching. Untuk informasi selengkapnya, lihat Dapatkan rahasia dari AWS Secrets Manager.