oktadev / okta-aws-cli-assume-role

Okta AWS CLI Assume Role Tool
Apache License 2.0
338 stars 177 forks source link

Okta AWS CLI Assume Role tool

:information_source: Disclaimer: This tool is community-supported and is maintained by members of the Okta team for developers and IT professionals. This tool is not an official Okta product and does not qualify for any Okta support. Anyone who chooses to use this tool must ensure that their implementation meets any applicable legal obligations including any Okta terms and conditions.

New to Amazon Web Services with Okta? Start with the Configuring AWS in Okta.

This tool has been verified to work on macOS Sierra, High Sierra, Windows Server 2012 R2, Windows 10, and Ubuntu 16.04 LTS, and is expected to work on other Linux systems as well.

Installation

Windows

  1. Run the following in a PowerShell console
    Set-ExecutionPolicy -Scope Process -ExecutionPolicy unrestricted -Force; Invoke-Expression ((New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/oktadev/okta-aws-cli-assume-role/master/bin/Install-OktaAwsCli.ps1')); .$profile
  2. Customize %userprofile%\.okta\config.properties and set OKTA_ORG and OKTA_AWS_APP_URL appropriately. For example,
    OKTA_ORG=acmecorp.oktapreview.com
    OKTA_AWS_APP_URL=https://acmecorp.oktapreview.com/home/amazon_aws/0oa5zrwfs815KJmVF0h7/137

macOS/Linux

  1. Run the following in a Terminal, optionally setting a custom PREFIX value (default: ~/.okta):

    PREFIX=~/.okta bash <(curl -fsSL https://raw.githubusercontent.com/oktadev/okta-aws-cli-assume-role/master/bin/install.sh) -i
  2. Customize ~/.okta/config.properties and set OKTA_ORG and OKTA_AWS_APP_URL appropriately. For example,

    OKTA_ORG=acmecorp.oktapreview.com
    OKTA_AWS_APP_URL=https://acmecorp.oktapreview.com/home/amazon_aws/0oa5zrwfs815KJmVF0h7/137
  3. Make sure /usr/local/bin (or whatever $PREFIX/bin is) is in your PATH

Docker

  1. Create ~/.okta/config.properties and set OKTA_ORG and OKTA_AWS_APP_URL appropriately. For example,

    OKTA_ORG=acmecorp.oktapreview.com
    OKTA_AWS_APP_URL=https://acmecorp.oktapreview.com/home/amazon_aws/0oa5zrwfs815KJmVF0h7/137
  2. Run this command:
    docker run -v ~/.okta/config.properties:/root/.okta/config.properties -it tomsmithokta/okta-awscli-java

Read more at @tom-smith-okta's okta-awscli-java Docker repo.

Manual install

Create a .okta directory in your home directory. For example, ~/.okta.

Download the latest release JAR and put it in .okta: https://github.com/oktadev/okta-aws-cli-assume-role/releases

Create ~/.okta/config.properties and set OKTA_ORG and OKTA_AWS_APP_URL appropriately. For example,

OKTA_ORG=acmecorp.oktapreview.com
OKTA_AWS_APP_URL=https://acmecorp.oktapreview.com/home/amazon_aws/0oa5zrwfs815KJmVF0h7/137

Create ~/.okta/logging.properties with the following content,

com.amazonaws.auth.profile.internal.BasicProfileConfigLoader = NONE

Copy scripts from .okta/bin to somewhere on your PATH.

Usage

Verify your setup with a simple command:

okta-aws test sts get-caller-identity

This will prompt for Okta credentials, log you into AWS, let you pick a role, and store a session profile called test for you.

Run the program again to see session resumption (you won't be asked for Okta credentials until the session expires):

okta-aws test sts get-caller-identity

NOTE: okta-aws is a function loaded from your shell profile, not a typical program or command stored in a file.

NOTE: On a *nix platform the withokta wrapper script will attempt to parse $https_proxy as a URI. If successful the host and port values will be passed to the JVM. User credentials in the proxy configuration are not currently used. This allows the okta-aws tool to be used in an environment where internet access for the servers is mediate via a proxy, e.g an EC2 instance inside a restricted VPC.

The proxy URI must be of the form http://host:port/. Both the host and port are mandatory.

Reference

Compiling the application

The application was built and compiled with JetBrains' IntelliJ IDEA. Note that you don't have to compile the application in order to be able to execute it, since the compiled executable (a JAR file) is available on GitHub.

Prerequisites

First of all, it goes without saying that you will need to install the Java SE 11x or the Java JDK 11x.

Then you will need Maven 2 or later to run the build.

Building on the command line

Get a single JAR with all dependencies:

Use git clone https://github.com/oktadev/okta-aws-cli-assume-role.git to clone the repository locally. Then, build with Maven:

mvn package
cp target/okta-aws-cli-*.jar ~/.okta/okta-aws-cli.jar

Configuring AWS in Okta

See for details on setting up Amazon Web Services Account Federation to allow logging into AWS through Okta and this tool.

An alternative integration can be found in Integrating the Amazon Web Services Command Line Interface Using Okta, which allows logging into AWS / Okta through the AWS CLI. The okta-aws-cli is not compatible with this integration.

Configuring the application

Here is the list of parameters that can be environment variables or settings in the ~/.okta/config.properties file:

You can specify configuration overrides for each profile by creating a ~/.okta/config.{profilename}.properties file. The base settings will be loaded first and the profile-specific settings will be loaded after, allowing you to only override specific settings that need to be different. For example, if you want the prod profile to connect to a different Okta org, create a ~/.okta/config.prod.propertiesfile and set OKTA_ORG to something different.

Note: environment variables take precedence over any config file.

Troubleshooting

I get "You have no factors enrolled"

This means that MFA is enforced, but you have no factors enrolled on your user.

You should enrol a CLI-supported factor (all except Duo as far as I know).

If you are using Duo Push, consider setting OKTA_BROWSER_AUTH=true in the configuration.

I have Duo, but I get "None of your factors are supported"

This means that MFA is enforced, but none of the factors you have enrolled are supported.

Okta's integration with Duo requires an iframe which isn't practical to interact with from a CLI context.

Getting help

Have a question or see a bug? Post a question on the Okta Dev Forums or email developers@okta.com. For feature requests, feel free to open an issue on this repo.

If you find a security vulnerability, please follow our Vulnerability Reporting Process.

License

Copyright 2017 Okta, Inc. All rights reserved.

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.