Skip to content

Commit 4d0082a

Browse files
authored
feat: Have an ability to configure session name (#29)
* 1. Add 'role-session-name' variable to action.yml 2. Configure roleSessionName with role-session-name from action or default value (GitHubActions) * Add description on README.md * update README.md * update dist/index.js * add test code * update context based on comments
1 parent 058322d commit 4d0082a

File tree

5 files changed

+42
-11
lines changed

5 files changed

+42
-11
lines changed

README.md

+3-1
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,8 @@ We recommend following [Amazon IAM best practices](https://docs.aws.amazon.com/I
5353
## Assuming a role
5454
If you would like to use the credentials you provide to this action to assume a role, you can do so by specifying the role ARN in `role-to-assume`.
5555
The role credentials will then be output instead of the ones you have provided.
56-
The default session duration is 6 hours, but if you would like to adjust this you can pass a duration to `role-duration-seconds`.
56+
The default session duration is 6 hours, but if you would like to adjust this you can pass a duration to `role-duration-seconds`.
57+
The default session name is GitHubActions, and you can modify it by specifying the desired name in `role-session-name`.
5758

5859
Example:
5960
```yaml
@@ -65,6 +66,7 @@ Example:
6566
aws-region: us-east-2
6667
role-to-assume: arn:aws:iam::123456789100:role/role-to-assume
6768
role-duration-seconds: 1200
69+
role-session-name: MySessionName
6870
```
6971

7072
### Session tagging

action.yml

+3
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,9 @@ inputs:
2525
role-duration-seconds:
2626
description: "Role duration in seconds (default: 6 hours)"
2727
required: false
28+
role-session-name:
29+
description: 'Role session name (default: GitHubActions)'
30+
required: false
2831
outputs:
2932
aws-account-id:
3033
description: 'The AWS account ID for the provided credentials'

dist/index.js

+7-5
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

index.js

+7-5
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,16 @@ const util = require('util');
88
const MAX_ACTION_RUNTIME = 6 * 3600;
99
const USER_AGENT = 'configure-aws-credentials-for-github-actions';
1010
const MAX_TAG_VALUE_LENGTH = 256;
11-
const SANITIZATION_CHARACTER = '_'
11+
const SANITIZATION_CHARACTER = '_';
12+
const ROLE_SESSION_NAME = 'GitHubActions';
1213

1314
async function assumeRole(params) {
1415
// Assume a role to get short-lived credentials using longer-lived credentials.
1516
const isDefined = i => !!i;
1617

17-
const {roleToAssume, roleDurationSeconds, accessKeyId, secretAccessKey, sessionToken, region} = params;
18+
const {roleToAssume, roleDurationSeconds, roleSessionName, accessKeyId, secretAccessKey, sessionToken, region} = params;
1819
assert(
19-
[roleToAssume, roleDurationSeconds, accessKeyId, secretAccessKey, region].every(isDefined),
20+
[roleToAssume, roleDurationSeconds, roleSessionName, accessKeyId, secretAccessKey, region].every(isDefined),
2021
"Missing required input when assuming a Role."
2122
);
2223

@@ -33,7 +34,7 @@ async function assumeRole(params) {
3334
});
3435
return sts.assumeRole({
3536
RoleArn: roleToAssume,
36-
RoleSessionName: 'GitHubActions',
37+
RoleSessionName: roleSessionName,
3738
DurationSeconds: roleDurationSeconds,
3839
Tags: [
3940
{Key: 'GitHub', Value: 'Actions'},
@@ -121,11 +122,12 @@ async function run() {
121122
const maskAccountId = core.getInput('mask-aws-account-id', { required: false });
122123
const roleToAssume = core.getInput('role-to-assume', {required: false});
123124
const roleDurationSeconds = core.getInput('role-duration-seconds', {required: false}) || MAX_ACTION_RUNTIME;
125+
const roleSessionName = core.getInput('role-session-name', { required: false }) || ROLE_SESSION_NAME;
124126

125127
// Get role credentials if configured to do so
126128
if (roleToAssume) {
127129
const roleCredentials = await assumeRole(
128-
{accessKeyId, secretAccessKey, sessionToken, region, roleToAssume, roleDurationSeconds}
130+
{accessKeyId, secretAccessKey, sessionToken, region, roleToAssume, roleDurationSeconds, roleSessionName}
129131
);
130132
exportCredentials(roleCredentials);
131133
} else {

index.test.js

+22
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,28 @@ describe('Configure AWS Credentials', () => {
238238
})
239239
});
240240

241+
test('role assumption session name provided', async () => {
242+
core.getInput = jest
243+
.fn()
244+
.mockImplementation(mockGetInput({...ASSUME_ROLE_INPUTS, 'role-session-name': 'MySessionName'}));
245+
246+
await run();
247+
expect(mockStsAssumeRole).toHaveBeenCalledWith({
248+
RoleArn: ROLE_NAME,
249+
RoleSessionName: 'MySessionName',
250+
DurationSeconds: 6 * 3600,
251+
Tags: [
252+
{Key: 'GitHub', Value: 'Actions'},
253+
{Key: 'Repository', Value: ENVIRONMENT_VARIABLE_OVERRIDES.GITHUB_REPOSITORY},
254+
{Key: 'Workflow', Value: ENVIRONMENT_VARIABLE_OVERRIDES.GITHUB_WORKFLOW},
255+
{Key: 'Action', Value: ENVIRONMENT_VARIABLE_OVERRIDES.GITHUB_ACTION},
256+
{Key: 'Actor', Value: GITHUB_ACTOR_SANITIZED},
257+
{Key: 'Branch', Value: ENVIRONMENT_VARIABLE_OVERRIDES.GITHUB_REF},
258+
{Key: 'Commit', Value: ENVIRONMENT_VARIABLE_OVERRIDES.GITHUB_SHA},
259+
]
260+
})
261+
});
262+
241263
test('workflow name sanitized in role assumption tags', async () => {
242264
core.getInput = jest
243265
.fn()

0 commit comments

Comments
 (0)