web-dev-qa-db-fra.com

AWS n'a pas pu valider les informations d'identification d'accès fournies

J'ai essayé de créer un groupe de sécurité à l'aide du kit SDK AWS, mais il ne parvient pas à l'authentifier. Pour la clé d’accès et la clé secrète spécifiques, j’ai fourni les droits d’administrateur, mais il n’est pas valide non plus. De l'autre côté, j'ai essayé les mêmes informations d'identification sur AWS S3 Example, il s'exécute avec succès.

Obtenir l'erreur suivante lors de la création du groupe de sécurité:

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)

Voici le code 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;
    }
}
13
Sunil Gulabani

Essayez de mettre à jour votre heure système.

Lorsque la différence entre AWS-datetime et votre date/heure est trop grande, les informations d'identification ne seront pas acceptées.

Pour les utilisateurs de Debian/Ubuntu:

lorsque vous ne définissez jamais votre fuseau horaire, vous pouvez le faire avec

Sudo dpkg-reconfigure tzdata

Arrêtez le service ntp, car des différences de temps trop importantes ne peuvent pas être modifiées en cours d'exécution.

Sudo /etc/init.d/ntp stop

Syncronisez votre heure et votre date (-q Réglez l’heure et quittez/Exécuter une seule fois) (-g Permet au premier ajustement d’être grand) (-x Durée jusqu’à 600 secondes/Adjuste également en cas de grandes différences) (-n Ne pas fork/processus ne va pas au fond)

Sudo ntpd -q -g -x -n

Redémarrer le service

Sudo /etc/init.d/ntp start

vérifier la date-heure réelle du système

Sudo date

définir la date-heure du système sur votre date-heure du matériel

Sudo hwclock --systohc

montrer votre date-heure matérielle

Sudo hwclock
18
M. Röthenmund

Si vous mettez vos informations d'identification dans ~/.aws/credentials, vous n'avez pas besoin de fournir un paramètre à votre appel AmazonEC2Client. Si vous faites cela, alors sur une instance EC2, le même code fonctionnera avec les rôles Assumed STS.

Pour plus d'informations, voir: http://docs.aws.Amazon.com/AWSSdkDocsJava/latest/DeveloperGuide/credentials.html

0
ozOli

"Une erreur client (AuthFailure) s'est produite lors de l'appel de l'opération [Remplir les espaces]: AWS n'a pas pu valider les informations d'identification d'accès fournies"

  1. Si vous êtes sûr de la validité des informations d'identification AWS, c'est-à-dire de la clé d'accès et de la clé secrète, ainsi que du nom de profil correspondant, votre date et votre heure d'absence de suivi sont un très bon coupable.

  2. Dans mon cas, j'étais confiant mais j'avais tort - j'avais utilisé les mauvaises clés. Ça ne fait pas mal de vérifier.

  3. Supposons que vous ayez créé un utilisateur IAM appelé "guignol". Configurez "guignol" dans ~/.aws/config comme suit:

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

Installez l'aws cli (interface de niveau commande) si vous ne l'avez pas déjà fait. En tant que test, exécutez aws ec2 describe-instances --profile guignol Si vous recevez un message d'erreur indiquant que aws n'a pas pu valider les informations d'identification, exécutez aws configure --profile guignol , entrez vos informations d'identification et Exécutez à nouveau la commande de test.

0
Vietnhi Phuvan