Не удалось принять роль для сторонней учетной записи AWS с помощью ключа доступа пользователя IAM - PullRequest
3 голосов
/ 20 июня 2020

Я пытаюсь предоставить сторонней учетной записи AWS доступ к моей учетной записи AWS, используя функцию Assume Role с ролью SecurityAudit, аналогично здесь . Я следил за объяснением от this , чтобы назначить сторонней учетной записи роль, называемую тестирование, где я получу доверительные отношения примерно так (я также добавил пользователя IAM третьей стороны, поскольку он будет получать доступ к моей AWS, используя его ключ доступа):

{
  "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();

Но когда третья сторона запускает code, он получил такую ​​ошибку:

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 хочет провести аудит безопасности моей учетной записи, используя свой ключ доступа, как ее правильно настроить?

1 Ответ

2 голосов
/ 20 июня 2020

Ошибка говорит, что

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

is is не может принять интересующую роль.

В своем вопросе вы правильно разрешили arn:aws:iam::thirdparty:root взять на себя роль. Но это все еще не дает TestOne пользователю IAM прав на то же самое.

Чтобы исправить это, admin / root учетной записи thirdparty должен явно разрешите пользователю IAM от TestOne до sts:AssumeRole в своей учетной записи.

Таким образом, учетная запись thirdparty может добавлять такие разрешения, как встроенная политика , для пользователя TestOne, например. Очевидно, это также можно сделать с помощью политик, управляемых заказчиком, или других механизмов IAM. Но встроенная политика кажется самой быстрой и легкой для тестирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...