2017-01-22 23 views
2

ビルドプロセスでアクセスしたいS3リポジトリがあります。私のプロジェクトの依存関係のいくつかが含まれています。私のプロジェクトは、指定された役割(Repo_dependent)を持つEC2インスタンスにデプロイされます。私はThe AWS Access Key Id you provided does not exist in our records. (Service: Amazon S3; Status Code: 403; Error Code: InvalidAccessKeyId; Request ID: 02169BFDCF7AFE10)例外を取得新しいサーバーを展開する場合GradleでのAWSロール資格情報の取得

{ 
"Version": "2012-10-17", 
"Statement": [ 
    { 
     "Sid": "Stmt1484560548000", 
     "Effect": "Allow", 
     "Action": [ 
      "s3:GetObject", 
      "s3:ListBucket", 
      "s3:GetBucketLocation" 
     ], 
     "Resource": [ 
      "arn:aws:s3:::my_bucket", 
      "arn:aws:s3:::my_bucket/*" 
     ] 
    } 
    ] 
} 

:役割は、それに接続されているAccess_Repoポリシーを持っています。

私のビルドスクリプトは私の仮定が、私は役割が定義されている方法でその役割や何かにアクセスする方法をEC2インスタンスのいずれかで何かが欠けているということである。この(簡略化のため省略)

buildscript { 
    repositories { 
    jcenter() 
    } 
    dependencies { 
    classpath 'com.amazonaws:aws-java-sdk:1.11.83' 
    } 
} 

import com.amazonaws.auth.* 

repositories { 
    jcenter() 
    maven { 
    url "s3://my_bucket.s3.amazonaws.com" 
    credentials(AwsCredentials) { 
     def providercreds = new InstanceProfileCredentialsProvider().getCredentials() 
     accessKey providercreds.getAWSAccessKeyId() 
     secretKey providercreds.getAWSSecretKey() 
    } 
    } 
} 

です。同じスクリプトをローカルに実行しようとすると、Access_Repoポリシーが添付されていて、InstanceProfileCredentialsProviderを使用する代わりにDefaultAWSCredentialsProviderChainを使用すると、ビルドは正常に実行されます。しかし、を使用してインスタンスを再デプロイすると、同じ例外が発生しました。

ご協力いただければ幸いです。

更新:

テストAWS CLIを使用してSTSAssumeRoleSessionCredentialsProviderを使用して行うには、ビルドスクリプトがDefaultAWSCredentialsProviderChainプロバイダと右の役割を使用していることを示します。ロールにAmazonS3FullAccessポリシーを追加すると、私はコードを展開するジェンキンスを使用していた結果

を変更しなかった私の次のリード多分何かが間違って

アップデート2であるということである:私はネットワークをキャプチャしようとした

どの資格情報がAWSに送信されているかを確認するために、GradleとAWS CLIによって異なる資格情報が送信されるように思われるので、Gradleが適切な役割を果たさないという私の元々の仮定に戻ります。

+0

北のバージニア州の地域では、バケツを作成したと思います。ビルドスクリプトの部分では、資格情報の定義をコメントすることができます。私の主張から、IAMの役割ではなく、EC2インスタンス(ローカルドライブ)内のアクセスキーと秘密鍵を検索します。 –

+0

私が理解しているか分からない..資格情報の部分を削除しても問題ありません。 –

+0

それは動作するはずです。コードは、awsの資格情報をローカルで検索していることを示しています。 –

答えて

1

この問題。 Gradle 3.0から3.3への移行後に修正しました。これにより、次のコードを使用することができました。

buildscript { 
    repositories { 
    jcenter() 
    } 
    dependencies { 
    } 
} 


repositories { 
    jcenter() 
    maven { 
    url "s3://my_bucket.s3.amazonaws.com" 
    authentication { 
     awsIm(AwsImAuthentication) 
    } 
    } 
} 

task wrapper(type: Wrapper) { 
    gradleVersion = '3.3' 
} 

dependencies { 
    compile 'com.amazonaws:aws-java-sdk-iam:1.11.78' 
    compile 'com.amazonaws:aws-java-sdk-ec2:1.11.78' 
} 
+0

ニースが見つかりました。次に、gradled docsの[AwsImAuthentication]オプションの例を示します(https://docs.gradle.org/current/userguide/dependency_management.html#mavenIvyS3RepositoriesAuthWithIam)。 –

+0

あなたはあなたの答えを記入する必要があります、私はこれを見つけるのに苦労してきました。ありがとうbtw –

関連する問題