برنامه نویسی

AWS S3 ساده شده: خودکار کردن عملیات بدون CLI در سرور از راه دور

ایجاد یک اسکریپت کمکی برای عملیات AWS S3 در سرورهای راه دور بدون AWS CLI

در دنیایی که رایانش ابری در حال تبدیل شدن به ستون فقرات زیرساخت های مدرن است، زمان آن فرا رسیده است که دسترسی کارآمد به سرویس های AWS مانند S3 باید انجام شود. اما تصور کنید که روی سرور یونیکس راه دور کار می‌کنید که در آن AWS CLI نصب نشده است و می‌خواهید فایل‌ها را در یک سطل S3 منتشر کنید. این وبلاگ شما را با نحوه ایجاد یک اسکریپت کمکی آشنا می کند که با استفاده از IAM برای ایمن کردن دسترسی و دریافت خودکار اعتبارنامه AWS، این مشکل را حل می کند.

مشکل

شما روی یک سرور یونیکس راه دور کار می کنید که برای انجام کارهای زیر استفاده می شود:

  • فایل ها را در سطل AWS S3 منتشر کنید.
  • خواندن و نوشتن در S3. سروری که استفاده می کنید AWS CLI ندارد و مدیریت دستی اعتبارنامه ها مستعد خطا و ناکارآمد است. برای مقابله با موارد زیر به راه حل قوی تری نیاز دارید:
  • اعتبارنامه AWS را ایمن دریافت کنید.
  • آپلود یا دانلود فایل را خودکار کنید.
  • حذف وابستگی به AWS CLI.

بررسی اجمالی راه حل

راه حل شامل:

  • استفاده از یک کاربر IAM با مجوزهای S3 مناسب.
  • یک اسکریپت کمکی که شناسه کلید دسترسی و کلید دسترسی مخفی را از AWS بازیابی می کند.
  • انجام عملیات S3 با استفاده از این اعتبارنامه ها.
  • چرخش کلید را هر 30 روز به صورت خودکار انجام دهید.

پیاده سازی گام به گام

  1. پیکربندی IAM

یک کاربر یا نقش IAM با مجوزهای لازم برای دسترسی به سطل S3 خود ایجاد کنید. در زیر نمونه ای از سیاست IAM آورده شده است:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["s3:PutObject", "s3:GetObject"],
      "Resource": "arn:aws:s3:::your-bucket-name/*"
    }
  ]
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

جایگزین کنید your-bucket-name با نام سطل S3 شما.
این خط مشی را به کاربر یا نقش IAM خود پیوست کنید.

استقرار الگو:
از کنسول مدیریت AWS یا AWS CLI برای استقرار پشته CloudFormation استفاده کنید. به عنوان مثال:

aws cloudformation deploy --template-file template.yaml --stack-name S3AccessStack

بازیابی اعتبار:
پس از ایجاد پشته، می توانید خروجی های صادر شده را بازیابی کنید:

aws cloudformation describe-stacks --stack-name S3AccessStack \
--query "Stacks[0].Outputs[?ExportName=='S3AccessKeyId'].OutputValue" --output text

به طور مشابه، کلید دسترسی مخفی را بازیابی کنید:
aws cloudformation describe-stacks --stack-name S3AccessStack \
--query "Stacks[0].Outputs[?ExportName=='S3SecretAccessKey'].OutputValue" --output text

  1. نوشتن اسکریپت Helper

اسکریپت به موارد زیر دست می یابد:

  • اعتبارنامه AWS را از یک منبع امن بازیابی می کند (به عنوان مثال، AWS Secrets Manager یا یک فایل از پیش پیکربندی شده).
  • عملیات S3 مانند آپلود فایل را خودکار می کند.
  • کلیدها را هر 30 روز یکبار می چرخاند تا امنیت را افزایش دهد.
#!/bin/bash

# File containing AWS credentials
CREDENTIALS_FILE="/path/to/credentials_file"
S3_BUCKET="your-bucket-name"

# Function to load credentials from file
load_credentials() {
  if [ ! -f "$CREDENTIALS_FILE" ]; then
    echo "Credentials file not found: $CREDENTIALS_FILE"
    exit 1
  fi

  ACCESS_KEY_ID=$(grep 'AccessKeyId' $CREDENTIALS_FILE | awk -F '=' '{print $2}')
  SECRET_ACCESS_KEY=$(grep 'SecretAccessKey' $CREDENTIALS_FILE | awk -F '=' '{print $2}')
}

# Function to update credentials
update_credentials() {
  echo "Updating credentials..."
  ACCESS_KEY_ID=$(aws cloudformation describe-stacks --stack-name S3AccessStack \
    --query "Stacks[0].Outputs[?ExportName=='S3AccessKeyId'].OutputValue" --output text)

  SECRET_ACCESS_KEY=$(aws cloudformation describe-stacks --stack-name S3AccessStack \
    --query "Stacks[0].Outputs[?ExportName=='S3SecretAccessKey'].OutputValue" --output text)

  echo -e "AccessKeyId=$ACCESS_KEY_ID\nSecretAccessKey=$SECRET_ACCESS_KEY" > $CREDENTIALS_FILE
  echo "Credentials updated successfully."
}

# Function to upload file to S3
upload_to_s3() {
  local file=$1
  if [ ! -f "$file" ]; then
    echo "File does not exist: $file"
    exit 1
  fi

  # Using curl to perform PUT operation
  curl -X PUT -T "$file" \
    -H "Host: $S3_BUCKET.s3.amazonaws.com" \
    -H "Date: $(date -u '+%Y-%m-%dT%H:%M:%SZ')" \
    -H "Authorization: AWS $ACCESS_KEY_ID:$SECRET_ACCESS_KEY" \
    "https://s3.amazonaws.com/$S3_BUCKET/$(basename $file)"

  echo "File uploaded successfully: $file"
}

# Main execution
if [ "$1" == "update-credentials" ]; then
  update_credentials
  exit 0
fi

if [ -z "$1" ]; then
  echo "Usage: $0  | update-credentials"
  exit 1
fi

load_credentials
upload_to_s3 "$1"
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این اسکریپت را به عنوان aws_helper.sh ذخیره کنید و مجوزهای اجرا را بدهید
./aws_helper.sh update-credentials را هر 30 روز یک بار اجرا کنید تا کلیدها را بچرخانید و فایل اعتبارنامه را به روز کنید.

چگونه این اسکریپت کمک می کند

وابستگی AWS CLI را حذف می کند:
این اسکریپت از curl برای عملیات S3 استفاده می کند و از سازگاری با محیط هایی که AWS CLI در آن نصب نشده است اطمینان حاصل می کند.
امنیت را بهبود می بخشد:
چرخش کلید را خودکار می کند و اعتبارنامه ها را به صورت ایمن مدیریت می کند.
اتوماسیون:
عملیات بدون درز و خودکار S3 را فعال می کند و خطاهای دستی را کاهش می دهد.
قابل تنظیم:
می توان آن را گسترش داد تا شامل عملیات S3 اضافی، مانند حذف یا فهرست کردن فایل ها شود.

گسترش اسکریپت

برای اتوماسیون در مقیاس بزرگتر، این اسکریپت را با:
AWS SDK: برای منطق پیچیده تر.
AWS CloudFormation: برای مدیریت زیرساخت به عنوان کد.
AWS Secrets Manager: برای مدیریت ایمن اعتبارنامه ها.
رجوع به

اسنادی برای ایجاد و مدیریت منابع AWS خود به صورت برنامه ای.

نتیجه گیری

این اسکریپت کمکی راه حلی سبک و کارآمد برای انجام عملیات AWS S3 بر روی سرورهای راه دور بدون AWS CLI ارائه می دهد. با استفاده از IAM، خودکار کردن بازیابی اعتبار و چرخش کلیدها، امنیت و قابلیت اطمینان را افزایش می دهد. آن را امتحان کنید و آن را با نیازهای خاص خود تطبیق دهید!

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا