لقد قمت بإعداد مثيل AWS RDS ومثيل AWS EC2 ، وأعتقد أنني قمت بإعداد مجموعة الأمان للسماح لكل من IP الداخلي و IP العام لمثيل EC2 بالوصول إلى مثيل RDS. إذا كنت ssh إلى مثيل EC2 عبر عميل ssh ، واكتب الأمر:

mysql -u xxx -p -h AWS_RDS_endpoint.com

الاتصال ناجح. لقد قمت بإنشاء ملف php تجريبي يسمى index.php في جذر ويب مثيل EC2 ، كود مثل هذا:

<?php
  $servername = "aws_rds_endpoint.com";
  $username = "username";
  $password = "password";

  // Create connection
  $conn = new mysqli($servername, $username, $password);

  // Check connection
  if ($conn->connect_error) {
      die("Connection failed: " . $conn->connect_error);
  } 
  echo "Connected successfully";
?>

إذا قمت بكتابة "php index.php" في محطة ssh ، فستظهر "متصلة بنجاح" ، ولكن إذا حاولت في متصفح الويب http إلى مثيل EC2 مثل http://xxxx.us-east-2.computer.amazonaws.com ( وهو EC2 public DNS) ، فإنه يعرض "فشل الاتصال: تم رفض الإذن"

هل يمكن لأي شخص أن يخبرني كيف أحل هذه المشكلة؟

answer

أعتقد أنه تم الرد على هذا بالفعل في موضوع SO آخر .. ولكن كان لدي نفس المشكلة بالضبط. في حالتي ، كنت أستخدم centos 8 كمثيل EC2. المشكلة مع SELinux

sudo setebool -P httpd_can_network_connect_db = 1

إذا كان بإمكانك بالفعل الاتصال باستخدام أداة سطر أوامر mysql ؛ ثم من الواضح أنها ليست مشكلة جدار حماية أو أذونات ؛ ربما SELinux

إذا كنت تريد الاتصال بـ AWS RDS MySQL من مثيل EC2 Linux ، فأنت بحاجة إلى معرف مثيل. تأكد أيضًا من إضافة عنوان IP المواجه للجمهور إلى مجموعة أمان قاعدة البيانات التي تنتمي إلى RDS. تأكد من أن معرف المستخدم الخاص بك لديه الأذونات الصحيحة لكل من مثيل EC2 Linux و MySQL DB - تعديل / قراءة الوصول إلى موقع MySQL وقاعدة البيانات نفسها.

بعد ذلك ، تأكد من قيامك بإنشاء مجموعة أمان قاعدة بيانات للوصول الخارجي ومن تضمين المستخدم الخاص بك فيها. يمكنك تحقيق ذلك باستخدام التعليمات الواردة على الرابط التالي: http://docs.amazonwebservices.com/AmazonRDS/latest/GettingStartedGuide/AuthorizeAccess.html