in app/aws/Federation.scala [148:193]
def disableFederation(
account: AwsAccount,
after: Instant,
roleArn: String,
stsClient: StsClient
)(implicit mode: Mode): Unit = {
val revocationPolicyDocument = denyOlderSessionsPolicyDocument(after)
val username = mode match {
case Prod => "janus"
case _ => "janus-dev"
}
// assume role in the target account to authenticate the revocation
val creds = Federation.assumeRole(
username,
roleArn,
Policies.revokeAccessPermission(account),
stsClient,
Federation.awsMinimumSessionLength
)
val sessionCredentials = AwsSessionCredentials.create(
creds.accessKeyId,
creds.secretAccessKey,
creds.sessionToken
)
val provider = StaticCredentialsProvider.create(sessionCredentials)
val iamClient = IamClient
.builder()
.region(EU_WEST_1)
.credentialsProvider(provider)
.build()
// remove access from assumed role
val roleName = getRoleName(roleArn)
val roleRevocationPolicy = PutRolePolicyRequest
.builder()
.roleName(roleName)
.policyName("janus-role-revocation-policy")
// ^
// this name should match policy in cloudformation/federation.template.yaml
.policyDocument(revocationPolicyDocument)
.build()
iamClient.putRolePolicy(roleRevocationPolicy)
iamClient.close()
}