3

こちらのように、SecurityAudit ロールで Assume Role 関数を使用して、サードパーティの AWS アカウントに自分の AWS アカウントへのアクセス権を付与しようとしています。この説明に従って、サードパーティのアカウントにテストという役割を割り当て、このような信頼関係を取得します (アクセスキーを使用して AWS アカウントにアクセスするため、サードパーティの IAM ユーザーも追加しました) :

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::thirdparty:root"
      },
      "Action": "sts:AssumeRole",
      "Condition": {}
    }
  ]
}

次に、次のようにここからコードをたどりました。

AWSSecurityTokenService stsClient = AWSSecurityTokenServiceClientBuilder.standard()
                                                    .withCredentials(new ProfileCredentialsProvider())
                                                    .withRegion(clientRegion)
                                                    .build();

            // Obtain credentials for the IAM role. Note that you cannot assume the role of an AWS root account;
            // Amazon S3 will deny access. You must use credentials for an IAM user or an IAM role.
            AssumeRoleRequest roleRequest = new AssumeRoleRequest()
                                                    .withRoleArn(roleARN)
                                                    .withRoleSessionName(roleSessionName);
            AssumeRoleResult roleResponse = stsClient.assumeRole(roleRequest);
            Credentials sessionCredentials = roleResponse.getCredentials();

しかし、サードパーティがコードを実行すると、次のようなエラーが発生しました。

Exception in thread "main" com.amazonaws.services.securitytoken.model.AWSSecurityTokenServiceException: User: arn:aws:iam::thirdparty:user/TestOne is not authorized to perform: sts:AssumeRole on resource: arn:aws:iam::myaccount:role/testing(Service: AWSSecurityTokenService; Status Code: 403; Error Code: AccessDenied)
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.handleErrorResponse(AmazonHttpClient.java:1632)
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeOneRequest(AmazonHttpClient.java:1304)
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeHelper(AmazonHttpClient.java:1058)
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.doExecute(AmazonHttpClient.java:743)
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeWithTimer(AmazonHttpClient.java:717)
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.execute(AmazonHttpClient.java:699)
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.access$500(AmazonHttpClient.java:667)
    at com.amazonaws.http.AmazonHttpClient$RequestExecutionBuilderImpl.execute(AmazonHttpClient.java:649)
    at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:513)
    at com.amazonaws.services.securitytoken.AWSSecurityTokenServiceClient.doInvoke(AWSSecurityTokenServiceClient.java:1307)
    at com.amazonaws.services.securitytoken.AWSSecurityTokenServiceClient.invoke(AWSSecurityTokenServiceClient.java:1283)
    at com.amazonaws.services.securitytoken.AWSSecurityTokenServiceClient.executeAssumeRole(AWSSecurityTokenServiceClient.java:466)
    at com.amazonaws.services.securitytoken.AWSSecurityTokenServiceClient.assumeRole(AWSSecurityTokenServiceClient.java:442)

では、サードパーティの AWS アカウントが自分のアクセス キーを使用して私のアカウントのセキュリティ監査を行いたい場合、どのように正しく構成すればよいでしょうか?

4

1 に答える 1

2

エラーはそれを言う

arn:aws:iam::thirdparty:user/TestOne

関心のある役割を引き受けることができません

あなたの質問でarn:aws:iam::thirdparty:rootは、役割を引き受けることを正しく許可しました。しかし、これはまだIAM ユーザーに同じことを行う権限を与えていません。 TestOne

これを修正するには、アカウントの管理者/ルートがthirdpartyIAMユーザーにアカウントへのアクセスを明示的に許可する必要があります。TestOnests:AssumeRole

したがって、アカウントは、たとえば、インライン ポリシーthirdpartyなどのアクセス許可をユーザーに追加できます。もちろん、顧客が管理するポリシーやその他の IAM メカニズムを使用して行うこともできます。しかし、インライン ポリシーは最も速く、最も簡単にテストできるようです。TestOne

于 2020-06-19T22:23:07.637 に答える