Tôi có ECG ASG trên AWS và tôi quan tâm đến việc lưu trữ tập lệnh shell được sử dụng để khởi tạo bất kỳ phiên bản nào trong thùng S3 và tải xuống và chạy khi khởi tạo, nhưng tất cả đều cảm thấy một chút ầm ĩ mặc dù tôi ' m bằng cách sử dụng một số IAM Instance Role
, chuyển qua HTTPS và mã hóa chính tập lệnh trong khi ở phần còn lại trong thùng S3
sử dụng
sử dụng KMS
S3 Server Side Encryption
(because the KMS
method was throwing an 'Unknown' error).
Có an toàn để lưu trữ các tập lệnh shell User-Data của EC2 trong một thùng S3 riêng tư không?
Setup
- Tạo một
IAM Instance Role
đó được gán cho bất kỳ trường hợp trong ASG của tôi khi instantiation, dẫn đến creds AWS tôi bị nướng vào dụ nhưENV
vars - được tải lên và đã mã hóa tập lệnh
Instance-Init.sh
mã hóa của tôi thành S3, kết quả là điểm cuối riêng tư như sau: https://s3.amazonaws.com/super-secret-bucket/Instance-Init.sh
In The User-Data
Dòng
tôi nhập sau vào trường User Data
khi tạo Launch Configuration
Tôi muốn ASG tôi để sử dụng:
#!/bin/bash
apt-get update
apt-get -y install python-pip
apt-get -y install awscli
cd /home/ubuntu
aws s3 cp s3://super-secret-bucket/Instance-Init.sh . --region us-east-1
chmod +x Instance-Init.sh
. Instance-Init.sh
shred -u -z -n 27 Instance-Init.sh
Trên đây nào sau đây:
- Cập nhật danh sách gói
- Cài đặt Python (cần thiết để chạy
aws-cli
) - Cài đặt
aws-cli
- thay đổi vào thư mục
/home/ubuntu
dùng - Sử dụng
aws-cli
để tải về các tập tinInstance-Init.sh
từS3
. Do sốIAM Role
được gán cho ví dụ của tôi, tín dụng AWS của tôi được tự động phát hiện bởiaws-cli
.IAM Role
cũng cấp cho cá thể của tôi các quyền cần thiết để giải mã tệp. - Làm cho nó thực thi
- Chạy kịch bản
- Xóa kịch bản sau khi nó được hoàn thành.
Các Instance-Init.sh
Script
Kịch bản thân sẽ làm những thứ như thiết env
vars và docker run
các container mà tôi cần phải triển khai trên ví dụ của tôi.Kinda như vậy:
#!/bin/bash
export MONGO_USER='MyMongoUserName'
export MONGO_PASS='Top-Secret-Dont-Tell-Anyone'
docker login -u <username> -p <password> -e <email>
docker run - e MONGO_USER=${MONGO_USER} -e MONGO_PASS=${MONGO_PASS} --name MyContainerName quay.io/myQuayNameSpace/MyAppName:latest
Rất Handy
Điều này tạo ra một cách rất tiện dụng để cập nhật User-Data
kịch bản mà không cần phải tạo ra một mới Launch Config
mỗi khi bạn cần phải thực hiện trẻ vị thành niên thay đổi. Và nó thực hiện một công việc tuyệt vời khi nhận được env
vars ra khỏi cơ sở mã của bạn và vào một không gian hẹp, có thể điều khiển (chính kịch bản Instance-Init.sh
).
Nhưng tất cả đều cảm thấy một chút không an toàn. Ý tưởng về việc đưa DB của tôi vào một tập tin trên S3 là đáng lo ngại khi nói ít nhất.
Các câu hỏi
- Đây có phải là một thực tế phổ biến hay tôi đang mơ lên một ý tưởng tồi đây?
- Thực tế là tệp được tải xuống và lưu trữ (mặc dù một thời gian ngắn) trên cá thể mới tạo thành một lỗ hổng ở tất cả?
- Có phương pháp nào tốt hơn để xóa tệp theo cách an toàn hơn không?
- Thậm chí liệu tệp có bị xóa sau khi chạy không? Xem xét những bí mật đang được chuyển giao cho
env
vars nó gần như có vẻ dư thừa để xóa các tập tinInstance-Init.sh
. - Có điều gì đó tôi thiếu trong những ngày đầu tiên của tôi về ops không?
Nhờ sự giúp đỡ trước.
Tôi không thuộc phạm vi chính xác của trang web nhưng điều này * có thể * phù hợp hơn trên https://security.stackexchange.com/. –
Tôi đồng ý rằng điều này nên đi đến security.stackexchange.com. Không cần phải nói, khó khăn, đặt bất kỳ thông tin đăng nhập nào vào bất kỳ tệp văn bản thô nào ở bất kỳ đâu là một nguy cơ bảo mật lớn. Không bao giờ làm điều đó. Không bao giờ. Nếu có thể, hãy yêu cầu thông tin đăng nhập từ đầu vào của người dùng thông qua thiết bị đầu cuối hoặc tìm ra cách khác để thực hiện. – nln
Nó có thể là một 'phù hợp hơn' cho InfoSec, nhưng tôi muốn nói sự phổ biến cho đến nay có nghĩa là nó nên ở lại đây. Vox Populi đã bình chọn với phiếu bầu của họ! – AJB