AWS nicht in der Lage war zu überprüfen der bereitgestellten Anmeldeinformationen Zugriff
Habe ich versucht zu erstellen, Sicherheits-Gruppe unter Verwendung von AWS SDK, aber irgendwie scheitert es ihn zu authentifizieren. Für die spezifischen Access Key und Secret Key, ich habe die Administratorrechte, die es dann auch nicht überprüft. Auf der anderen Seite, ich habe versucht, die gleichen Anmeldeinformationen für AWS S3 Beispiel, es erfolgreich führt.
Immer folgenden Fehler beim erstellen von Sicherheits-Gruppe:
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)
Hier ist der Java Code:
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;
}
}
Über die Berechtigung S3 bedeutet nicht, dass Sie die Erlaubnis haben, in ec2-Sicherheitsgruppe. Sie müssen überprüfen Sie die Taste erneut.
Ich habe ja den Schlüssel und auch überprüft, auf dem Politik Simulator für Zugriffsrechte. Es zeigt die richtige.
dann ist das problem etwas anderes.
Ich habe ja den Schlüssel und auch überprüft, auf dem Politik Simulator für Zugriffsrechte. Es zeigt die richtige.
dann ist das problem etwas anderes.
InformationsquelleAutor Sunil Gulabani | 2014-12-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen Sie, aktualisieren Sie Ihre Systemzeit.
Wenn die Unterschiede zwischen AWS-datetime-und Ihr datetime sind zu groß, und die Anmeldeinformationen werden nicht akzeptiert.
Für Debian/Ubuntu-Benutzer:
wenn Sie nie Ihre Zeit-zone, Sie können dies tun, mit
Stoppen Sie den ntp-Dienst, weil auch die große Zeit diffrences, kann nicht geändert werden durch ausführen von service.
Syncronize Ihre Zeit und Datum (-q stellen Sie die Uhrzeit und beenden /Starten nur einmal) (-g Ermöglichen, die erste Anpassung zu Groß sein) (-x Tötete bis zu 600 Sekunden /Adjuste auch mal Hexe große diffrences) (-n kein fork /Prozess wird nicht im hintergrund)
Dienst neu starten
überprüfen tatsächlichen system-datetime -
set system-datetime, um Ihre hardware-datetime -
zeigen Sie Ihre hardware-datetime -
Wow!!!! Das war es. Subtil, aber offensichtlich im Nachhinein.
InformationsquelleAutor M. Röthenmund
Wenn Sie Ihre Anmeldeinformationen in ~/.aws/Anmeldeinformationen, dann brauchen Sie nicht, um einen parameter angeben, um Ihre AmazonEC2Client nennen. Wenn Sie dies tun, dann auf einer EC2-Instanz den gleichen code arbeiten wird davon Ausgegangen, STS Rollen.
Weitere Infos finden Sie unter: http://docs.aws.amazon.com/AWSSdkDocsJava/latest/DeveloperGuide/credentials.html
InformationsquelleAutor ozOli
"Ein client-Fehler (AuthFailure) trat ein, wenn Sie die [Fill in the blanks] operation: AWS nicht in der Lage war zu überprüfen der bereitgestellten Anmeldeinformationen Zugriff"
Wenn Sie überzeugt sind von der Wirksamkeit der AWS-Anmeldeinformationen, d.h. access key und secret key und das entsprechende Profil-Namen, die Datum und Zeit als off-track ist eine sehr gute Täter.
In meinem Fall, war ich zuversichtlich, aber ich war falsch - ich hatte die falschen Tasten. Tut nicht weh, zu überprüfen.
Lassen Sie uns sagen, dass Sie erstellt einen IAM-Benutzer namens "guignol". Konfigurieren von "guignol" in ~/.aws/config wie folgt:
[profile guignol]
region = us-east-1
aws-access-key_id = AKXXXYYY...
aws-secret-key-access = ...
Installieren Sie die aws cli (command level interface), wenn Sie nicht bereits getan haben. Als test laufen aws ec2-describe-instances --Profil guignol Wenn Sie gat eine Fehlermeldung, dass die aws nicht in der Lage war, die Anmeldedaten zu validieren, führen aws configure --Profil guignol , geben Sie Ihre Anmeldeinformationen, und führen Sie den test-Befehl wieder.
InformationsquelleAutor Vietnhi Phuvan