Skip to content

Commit f31c158

Browse files
feat: Recommending using OIDC (#871)
* Recommending using OIDC * Added tests * fix test and package * update readme --------- Co-authored-by: peterwoodworth <[email protected]>
1 parent 164817a commit f31c158

File tree

5 files changed

+244
-0
lines changed

5 files changed

+244
-0
lines changed

README.md

+8
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,14 @@ calls.
99

1010
### Recent News
1111

12+
#### Long-term credentials warning (10/2/23)
13+
14+
We have added a warning when using long-term credentials to access AWS
15+
(IAM access keys and secret keys). Using long-term credentials requires you
16+
to create IAM users and properly secure the access keys to prevent their disclosure.
17+
A better approach is to use [GitHub's support for OpenID Connect](#OIDC) to authenticate
18+
using an IAM role to generate temporary security credentials.
19+
1220
#### v4 Announcement (9/11/23)
1321

1422
We have just released `v4` of Configure AWS Credentials. The only thing that

THIRD-PARTY

+204
Original file line numberDiff line numberDiff line change
@@ -3307,6 +3307,210 @@ Apache-2.0
33073307
limitations under the License.
33083308

33093309

3310+
@aws-sdk/region-config-resolver
3311+
Apache-2.0
3312+
Apache License
3313+
Version 2.0, January 2004
3314+
http://www.apache.org/licenses/
3315+
3316+
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
3317+
3318+
1. Definitions.
3319+
3320+
"License" shall mean the terms and conditions for use, reproduction,
3321+
and distribution as defined by Sections 1 through 9 of this document.
3322+
3323+
"Licensor" shall mean the copyright owner or entity authorized by
3324+
the copyright owner that is granting the License.
3325+
3326+
"Legal Entity" shall mean the union of the acting entity and all
3327+
other entities that control, are controlled by, or are under common
3328+
control with that entity. For the purposes of this definition,
3329+
"control" means (i) the power, direct or indirect, to cause the
3330+
direction or management of such entity, whether by contract or
3331+
otherwise, or (ii) ownership of fifty percent (50%) or more of the
3332+
outstanding shares, or (iii) beneficial ownership of such entity.
3333+
3334+
"You" (or "Your") shall mean an individual or Legal Entity
3335+
exercising permissions granted by this License.
3336+
3337+
"Source" form shall mean the preferred form for making modifications,
3338+
including but not limited to software source code, documentation
3339+
source, and configuration files.
3340+
3341+
"Object" form shall mean any form resulting from mechanical
3342+
transformation or translation of a Source form, including but
3343+
not limited to compiled object code, generated documentation,
3344+
and conversions to other media types.
3345+
3346+
"Work" shall mean the work of authorship, whether in Source or
3347+
Object form, made available under the License, as indicated by a
3348+
copyright notice that is included in or attached to the work
3349+
(an example is provided in the Appendix below).
3350+
3351+
"Derivative Works" shall mean any work, whether in Source or Object
3352+
form, that is based on (or derived from) the Work and for which the
3353+
editorial revisions, annotations, elaborations, or other modifications
3354+
represent, as a whole, an original work of authorship. For the purposes
3355+
of this License, Derivative Works shall not include works that remain
3356+
separable from, or merely link (or bind by name) to the interfaces of,
3357+
the Work and Derivative Works thereof.
3358+
3359+
"Contribution" shall mean any work of authorship, including
3360+
the original version of the Work and any modifications or additions
3361+
to that Work or Derivative Works thereof, that is intentionally
3362+
submitted to Licensor for inclusion in the Work by the copyright owner
3363+
or by an individual or Legal Entity authorized to submit on behalf of
3364+
the copyright owner. For the purposes of this definition, "submitted"
3365+
means any form of electronic, verbal, or written communication sent
3366+
to the Licensor or its representatives, including but not limited to
3367+
communication on electronic mailing lists, source code control systems,
3368+
and issue tracking systems that are managed by, or on behalf of, the
3369+
Licensor for the purpose of discussing and improving the Work, but
3370+
excluding communication that is conspicuously marked or otherwise
3371+
designated in writing by the copyright owner as "Not a Contribution."
3372+
3373+
"Contributor" shall mean Licensor and any individual or Legal Entity
3374+
on behalf of whom a Contribution has been received by Licensor and
3375+
subsequently incorporated within the Work.
3376+
3377+
2. Grant of Copyright License. Subject to the terms and conditions of
3378+
this License, each Contributor hereby grants to You a perpetual,
3379+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
3380+
copyright license to reproduce, prepare Derivative Works of,
3381+
publicly display, publicly perform, sublicense, and distribute the
3382+
Work and such Derivative Works in Source or Object form.
3383+
3384+
3. Grant of Patent License. Subject to the terms and conditions of
3385+
this License, each Contributor hereby grants to You a perpetual,
3386+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
3387+
(except as stated in this section) patent license to make, have made,
3388+
use, offer to sell, sell, import, and otherwise transfer the Work,
3389+
where such license applies only to those patent claims licensable
3390+
by such Contributor that are necessarily infringed by their
3391+
Contribution(s) alone or by combination of their Contribution(s)
3392+
with the Work to which such Contribution(s) was submitted. If You
3393+
institute patent litigation against any entity (including a
3394+
cross-claim or counterclaim in a lawsuit) alleging that the Work
3395+
or a Contribution incorporated within the Work constitutes direct
3396+
or contributory patent infringement, then any patent licenses
3397+
granted to You under this License for that Work shall terminate
3398+
as of the date such litigation is filed.
3399+
3400+
4. Redistribution. You may reproduce and distribute copies of the
3401+
Work or Derivative Works thereof in any medium, with or without
3402+
modifications, and in Source or Object form, provided that You
3403+
meet the following conditions:
3404+
3405+
(a) You must give any other recipients of the Work or
3406+
Derivative Works a copy of this License; and
3407+
3408+
(b) You must cause any modified files to carry prominent notices
3409+
stating that You changed the files; and
3410+
3411+
(c) You must retain, in the Source form of any Derivative Works
3412+
that You distribute, all copyright, patent, trademark, and
3413+
attribution notices from the Source form of the Work,
3414+
excluding those notices that do not pertain to any part of
3415+
the Derivative Works; and
3416+
3417+
(d) If the Work includes a "NOTICE" text file as part of its
3418+
distribution, then any Derivative Works that You distribute must
3419+
include a readable copy of the attribution notices contained
3420+
within such NOTICE file, excluding those notices that do not
3421+
pertain to any part of the Derivative Works, in at least one
3422+
of the following places: within a NOTICE text file distributed
3423+
as part of the Derivative Works; within the Source form or
3424+
documentation, if provided along with the Derivative Works; or,
3425+
within a display generated by the Derivative Works, if and
3426+
wherever such third-party notices normally appear. The contents
3427+
of the NOTICE file are for informational purposes only and
3428+
do not modify the License. You may add Your own attribution
3429+
notices within Derivative Works that You distribute, alongside
3430+
or as an addendum to the NOTICE text from the Work, provided
3431+
that such additional attribution notices cannot be construed
3432+
as modifying the License.
3433+
3434+
You may add Your own copyright statement to Your modifications and
3435+
may provide additional or different license terms and conditions
3436+
for use, reproduction, or distribution of Your modifications, or
3437+
for any such Derivative Works as a whole, provided Your use,
3438+
reproduction, and distribution of the Work otherwise complies with
3439+
the conditions stated in this License.
3440+
3441+
5. Submission of Contributions. Unless You explicitly state otherwise,
3442+
any Contribution intentionally submitted for inclusion in the Work
3443+
by You to the Licensor shall be under the terms and conditions of
3444+
this License, without any additional terms or conditions.
3445+
Notwithstanding the above, nothing herein shall supersede or modify
3446+
the terms of any separate license agreement you may have executed
3447+
with Licensor regarding such Contributions.
3448+
3449+
6. Trademarks. This License does not grant permission to use the trade
3450+
names, trademarks, service marks, or product names of the Licensor,
3451+
except as required for reasonable and customary use in describing the
3452+
origin of the Work and reproducing the content of the NOTICE file.
3453+
3454+
7. Disclaimer of Warranty. Unless required by applicable law or
3455+
agreed to in writing, Licensor provides the Work (and each
3456+
Contributor provides its Contributions) on an "AS IS" BASIS,
3457+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
3458+
implied, including, without limitation, any warranties or conditions
3459+
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
3460+
PARTICULAR PURPOSE. You are solely responsible for determining the
3461+
appropriateness of using or redistributing the Work and assume any
3462+
risks associated with Your exercise of permissions under this License.
3463+
3464+
8. Limitation of Liability. In no event and under no legal theory,
3465+
whether in tort (including negligence), contract, or otherwise,
3466+
unless required by applicable law (such as deliberate and grossly
3467+
negligent acts) or agreed to in writing, shall any Contributor be
3468+
liable to You for damages, including any direct, indirect, special,
3469+
incidental, or consequential damages of any character arising as a
3470+
result of this License or out of the use or inability to use the
3471+
Work (including but not limited to damages for loss of goodwill,
3472+
work stoppage, computer failure or malfunction, or any and all
3473+
other commercial damages or losses), even if such Contributor
3474+
has been advised of the possibility of such damages.
3475+
3476+
9. Accepting Warranty or Additional Liability. While redistributing
3477+
the Work or Derivative Works thereof, You may choose to offer,
3478+
and charge a fee for, acceptance of support, warranty, indemnity,
3479+
or other liability obligations and/or rights consistent with this
3480+
License. However, in accepting such obligations, You may act only
3481+
on Your own behalf and on Your sole responsibility, not on behalf
3482+
of any other Contributor, and only if You agree to indemnify,
3483+
defend, and hold each Contributor harmless for any liability
3484+
incurred by, or claims asserted against, such Contributor by reason
3485+
of your accepting any such warranty or additional liability.
3486+
3487+
END OF TERMS AND CONDITIONS
3488+
3489+
APPENDIX: How to apply the Apache License to your work.
3490+
3491+
To apply the Apache License to your work, attach the following
3492+
boilerplate notice, with the fields enclosed by brackets "{}"
3493+
replaced with your own identifying information. (Don't include
3494+
the brackets!) The text should be enclosed in the appropriate
3495+
comment syntax for the file format. We also recommend that a
3496+
file or class name and description of purpose be included on the
3497+
same "printed page" as the copyright notice for easier
3498+
identification within third-party archives.
3499+
3500+
Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
3501+
3502+
Licensed under the Apache License, Version 2.0 (the "License");
3503+
you may not use this file except in compliance with the License.
3504+
You may obtain a copy of the License at
3505+
3506+
http://www.apache.org/licenses/LICENSE-2.0
3507+
3508+
Unless required by applicable law or agreed to in writing, software
3509+
distributed under the License is distributed on an "AS IS" BASIS,
3510+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
3511+
See the License for the specific language governing permissions and
3512+
limitations under the License.
3513+
33103514
@aws-sdk/token-providers
33113515
Apache-2.0
33123516
Apache License

dist/index.js

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

src/assumeRole.ts

+6
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,12 @@ async function assumeRoleWithWebIdentityTokenFile(
5656

5757
async function assumeRoleWithCredentials(params: AssumeRoleCommandInput, client: STSClient) {
5858
core.info('Assuming role with user credentials');
59+
if (!process.env['AWS_SESSION_TOKEN']) {
60+
core.warning(
61+
'To avoid using long-term AWS credentials, please update your workflows to authenticate using OpenID Connect.' +
62+
' See https://s12d.com/gha-oidc-aws for more information.'
63+
);
64+
}
5965
try {
6066
const creds = await client.send(new AssumeRoleCommand({ ...params }));
6167
return creds;

test/index.test.ts

+22
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,9 @@ describe('Configure AWS Credentials', () => {
105105
jest.spyOn(core, 'info').mockImplementation((string) => {
106106
return string;
107107
});
108+
jest.spyOn(core, 'warning').mockImplementation((string) => {
109+
return string;
110+
});
108111
(fromEnv as jest.Mock)
109112
.mockImplementationOnce(() => () => ({
110113
accessKeyId: FAKE_ACCESS_KEY_ID,
@@ -868,4 +871,23 @@ describe('Configure AWS Credentials', () => {
868871

869872
expect(core.setOutput).toHaveBeenCalledTimes(4);
870873
});
874+
875+
test('prints warning for access key usage and no session token', async () => {
876+
jest.spyOn(core, 'getInput').mockImplementation(mockGetInput(ASSUME_ROLE_INPUTS));
877+
878+
await run();
879+
880+
expect(core.warning).toHaveBeenCalledWith(
881+
'To avoid using long-term AWS credentials, please update your workflows to authenticate using OpenID Connect.' +
882+
' See https://s12d.com/gha-oidc-aws for more information.'
883+
);
884+
});
885+
886+
test('skips warning for access key usage with session token', async () => {
887+
jest.spyOn(core, 'getInput').mockImplementation(mockGetInput(DEFAULT_INPUTS));
888+
889+
await run();
890+
891+
expect(core.warning).toHaveBeenCalledTimes(0);
892+
});
871893
});

0 commit comments

Comments
 (0)