2014-12-29 26 views
12

Tôi đã cố tạo Nhóm bảo mật bằng AWS SDK, nhưng bằng cách nào đó nó không xác thực được. Đối với Khóa truy cập và Khóa bí mật cụ thể, tôi đã cung cấp quyền Quản trị, sau đó cũng không thể xác thực. Ở phía bên kia, tôi đã thử các thông tin tương tự trên ví dụ AWS S3, nó thực thi thành công.AWS không thể xác thực thông tin xác thực truy cập được cung cấp

Bắt lỗi sau khi tạo nhóm bảo mật:

com.amazonaws.AmazonServiceException: AWS was not able to validate the provided access credentials (Service: AmazonEC2; Status Code: 401; Error Code: AuthFailure; Request ID: 1584a035-9a88-4dc7-b5e2-a8b7bde6f43c) 
    at com.amazonaws.http.AmazonHttpClient.handleErrorResponse(AmazonHttpClient.java:1077) 
    at com.amazonaws.http.AmazonHttpClient.executeOneRequest(AmazonHttpClient.java:725) 
    at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:460) 
    at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:295) 
    at com.amazonaws.services.ec2.AmazonEC2Client.invoke(AmazonEC2Client.java:9393) 
    at com.amazonaws.services.ec2.AmazonEC2Client.createSecurityGroup(AmazonEC2Client.java:1146) 
    at com.sunil.demo.ec2.SetupEC2.createSecurityGroup(SetupEC2.java:84) 
    at com.sunil.demo.ec2.SetupEC2.main(SetupEC2.java:25) 

Đây là Bộ luật Java:

public class SetupEC2 { 
    AWSCredentials credentials = null; 
    AmazonEC2Client amazonEC2Client ; 

    public static void main(String[] args) { 
     SetupEC2 setupEC2Instance = new SetupEC2(); 
     setupEC2Instance.init(); 
     setupEC2Instance.createSecurityGroup(); 
    } 

    public void init(){ 
     // Intialize AWS Credentials 
     try { 
      credentials = new BasicAWSCredentials("XXXXXXXX", "XXXXXXXXX"); 
     } catch (Exception e) { 
      throw new AmazonClientException(
        "Cannot load the credentials from the credential profiles file. " + 
          "Please make sure that your credentials file is at the  correct " + 
          "location (/home/sunil/.aws/credentials), and is in valid format.", 
          e); 
     } 

     // Initialize EC2 instance 
     try { 
      amazonEC2Client = new AmazonEC2Client(credentials); 
      amazonEC2Client.setEndpoint("ec2.ap-southeast-1.amazonaws.com"); 
      amazonEC2Client.setRegion(Region.getRegion(Regions.AP_SOUTHEAST_1)); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    public boolean createSecurityGroup(){ 
     boolean securityGroupCreated = false; 
     String groupName = "sgec2securitygroup"; 
     String sshIpRange = "0.0.0.0/0"; 
     String sshprotocol = "tcp"; 
     int sshFromPort = 22; 
     int sshToPort =22; 

     String httpIpRange = "0.0.0.0/0"; 
     String httpProtocol = "tcp"; 
     int httpFromPort = 80; 
     int httpToPort = 80; 

     String httpsIpRange = "0.0.0.0/0"; 
     String httpsProtocol = "tcp"; 
     int httpsFromPort = 443; 
     int httpsToProtocol = 443; 

     try { 
      CreateSecurityGroupRequest createSecurityGroupRequest = new CreateSecurityGroupRequest(); 
      createSecurityGroupRequest.withGroupName(groupName).withDescription("Created from AWS SDK Security Group"); 
      createSecurityGroupRequest.setRequestCredentials(credentials); 

      CreateSecurityGroupResult csgr = amazonEC2Client.createSecurityGroup(createSecurityGroupRequest); 

      String groupid = csgr.getGroupId(); 
      System.out.println("Security Group Id : " + groupid); 

      System.out.println("Create Security Group Permission"); 
      Collection<IpPermission> ips = new ArrayList<IpPermission>(); 
      // Permission for SSH only to your ip 
      IpPermission ipssh = new IpPermission(); 
     ipssh.withIpRanges(sshIpRange).withIpProtocol(sshprotocol).withFromPort(sshFromPort).withToPort(sshToPort); 
      ips.add(ipssh); 

      // Permission for HTTP, any one can access 
      IpPermission iphttp = new IpPermission(); 
     iphttp.withIpRanges(httpIpRange).withIpProtocol(httpProtocol).withFromPort(httpFromPort).withToPort(httpToPort); 
      ips.add(iphttp); 

      //Permission for HTTPS, any one can accesss 
      IpPermission iphttps = new IpPermission(); 
      iphttps.withIpRanges(httpsIpRange).withIpProtocol(httpsProtocol).withFromPort(httpsFromPort).withToPort(httpsToProtocol); 
      ips.add(iphttps); 

      System.out.println("Attach Owner to security group"); 
      // Register this security group with owner 
      AuthorizeSecurityGroupIngressRequest authorizeSecurityGroupIngressRequest = new AuthorizeSecurityGroupIngressRequest(); 
      authorizeSecurityGroupIngressRequest.withGroupName(groupName).withIpPermissions(ips); 
      amazonEC2Client.authorizeSecurityGroupIngress(authorizeSecurityGroupIngressRequest); 
     securityGroupCreated = true; 
     } catch (Exception e) { 
      // TODO: handle exception 
      e.printStackTrace(); 
      securityGroupCreated = false; 
     } 
     System.out.println("securityGroupCreated: " + securityGroupCreated); 
     return securityGroupCreated; 
    } 
} 
+0

Có sự cho phép trong S3 không có nghĩa là bạn được phép trong nhóm ec2 và bảo mật. Bạn cần kiểm tra lại chìa khóa. – BMW

+0

Có, tôi đã kiểm tra khóa và cũng đã kiểm tra trên Trình mô phỏng chính sách để có quyền truy cập. Nó cho thấy thích hợp. –

+0

thì vấn đề là cái gì đó khác. – BMW

Trả lời

17

Cố gắng cập nhật Systemtime của bạn.

Khi sự khác biệt giữa AWS-datetime và ngày giờ của bạn quá lớn, thông tin đăng nhập sẽ không được chấp nhận.

cho Người dùng Debian/Ubuntu:

khi bạn không bao giờ đặt múi giờ của bạn, bạn có thể làm điều này với

sudo dpkg-reconfigure tzdata 

Ngừng NTP-Service, vì diffrences thời gian quá lớn, không thể thay đổi bằng cách chạy dịch vụ.

sudo /etc/init.d/ntp stop 

bộ hóa thời gian và ngày của bạn (-q Đặt thời gian và bỏ/Chạy một lần duy nhất) (-G Cho phép điều chỉnh đầu tiên được Big) (-x xoay lên đến 600 giây/adjuste cũng thời gian phù thủy lớn diffrences) (-n Đừng ngã ba/quá trình sẽ không đi tới nền)

sudo ntpd -q -g -x -n 

dịch vụ Restart

sudo /etc/init.d/ntp start 

kiểm tra thực tế hệ thống datetime

sudo date 

bộ hệ thống datetime đến phần cứng-datetime bạn

sudo hwclock --systohc 

hiển thị của bạn phần cứng datetime

sudo hwclock 
+0

Có và có một lần nữa! Nếu bạn đang sử dụng AWS CLI bên trong một máy ảo, và máy chủ của bạn đi ngủ rất nhiều, hãy kiểm tra VM 'date' như là một cổng đầu tiên của cuộc gọi. Đồng hồ VM dường như trôi dạt một chút mỗi khi máy chủ ngủ và máy ảo treo, cho đến khi nó trôi qua ngưỡng chấp nhận được và đăng nhập AWS bắt đầu ném bom. – user1475135

+0

Wow !! Đây chính là nó. Tinh tế nhưng rõ ràng khi nhìn lại. – Arel

0

"Một lỗi khách hàng (AuthFailure) xảy ra khi gọi [Fill-in các khoảng trống] hoạt động: AWS không thể xác thực thông tin đăng nhập được cung cấp "

  1. Nếu bạn tự tin về tính hợp lệ của thông tin AWS, tức là khóa truy cập và khóa bí mật và tên hồ sơ tương ứng, ngày và thời gian của bạn bị tắt là một thủ phạm rất tốt.

  2. Trong trường hợp của tôi, tôi đã tự tin nhưng tôi đã sai - tôi đã sử dụng các phím sai.Không đau để kiểm tra lại.

  3. Giả sử bạn đã tạo người dùng IAM có tên "guignol". Cấu hình "Guignol" trong ~/.aws/config như sau:

    [profile guignol] region = us-east-1 aws-access-key_id = AKXXXYYY... aws-secret-key-access = ...

Cài đặt AWS cli (giao diện mức lệnh) nếu bạn chưa làm như vậy. Để kiểm tra, hãy chạy aws ec2 mô tả trường hợp --profile guignol Nếu bạn gat một thông báo lỗi mà aws không thể xác thực thông tin đăng nhập, hãy chạy cấu hình aws aws --profile guignol, nhập thông tin đăng nhập của bạn và chạy lệnh kiểm tra lần nữa.

Các vấn đề liên quan