1

AWS EKS を使用しているときにロール チェーンの問題にぶつかりましたが、チェーンが間違っている場所を特定できません。

アカウント 1 の役割 A は、アカウント 2 の役割 B を引き受けます。

役割 A はarn:aws:sts::{ACCOUNT-ID-1}:assumed-role/{ROLE-NAME}/{SESSION-NAME}

役割 B は標準です。arn:aws:iam::{ACCOUNT-ID-2}:role/{ROLE-NAME}

ロール A は、assumed-roleEKS へのデプロイ時にロールが想定されるためです。

ロール A のポリシーは

 {
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "",
            "Effect": "Allow",
            "Action": "sts:*",
            "Resource": "*"
        }
    ]
}

B の信頼ポリシーは次のとおりです。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": "sts:AssumeRole",
      "Condition": {
        "StringEquals": {
          "aws:PrincipalOrgID": "{ORD}"
        },
        "ArnLike": {
          "aws:PrincipalArn": [
            "arn:aws:sts::{ACCOUNT-ID-1}:assumed-role/{ROLE-NAME}/{SESSION-NAME}"
          ]
        }
      }
    }
  ]
}

* aws:PrincipalOrgID は検証時に正しく一致します

役割の引き受けは SpringBoot で行われます

  @Bean
  public WebIdentityTokenCredentialsProvider getCredProvider() {
    return WebIdentityTokenCredentialsProvider.builder().roleSessionName("SESSION-NAME").build();
  }

  public AWSCredentialsProvider assumeRole() {
    AWSCredentialsProvider credentials = getCredProvider();
    AWSSecurityTokenService sts = AWSSecurityTokenServiceClientBuilder.standard()
            .withRegion("us-west-1")
            .withCredentials(credentials)
            .build();
    return new STSAssumeRoleSessionCredentialsProvider.Builder("arn:aws:iam::{ACCOUNT-ID-2}:role/{ROLE-NAME}", "role-b-session")
            .withStsClient(sts)
            .build();
  }

この役割の仮定は次のように失敗します。

com.amazonaws.services.securitytoken.model.AWSSecurityTokenServiceException: 
User: arn:aws:sts::{ACCOUNT-ID-1}:assumed-role/{ROLE-NAME}/{SESSION-NAME}
is not authorized to perform: sts:AssumeRole on resource: arn:aws:iam::{ACCOUNT-ID-2}:role/{ROLE-NAME} 
(Service: AWSSecurityTokenService; Status Code: 403; Error Code: AccessDenied;

構成された信頼ポリシーとアクセス許可ポリシー、および Java コードに基づいて、上記が AccessDenied を返す理由がわかりません。

4

0 に答える 0