Skip to content

Commit 9f5ff1d

Browse files
author
awstools
committed
feat(client-service-catalog): This release 1. adds support for Principal Name Sharing with Service Catalog portfolio sharing. 2. Introduces repo sourced products which are created and managed with existing SC APIs. These products are synced to external repos and auto create new product versions based on changes in the repo.
1 parent 59b8b63 commit 9f5ff1d

12 files changed

+1686
-791
lines changed

clients/client-service-catalog/README.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,10 @@
99

1010
AWS SDK for JavaScript ServiceCatalog Client for Node.js, Browser and React Native.
1111

12-
<fullname>AWS Service Catalog</fullname>
12+
<fullname>Service Catalog</fullname>
1313

1414
<p>
15-
<a href="https://aws.amazon.com/servicecatalog/">Service Catalog</a> enables
15+
<a href="http://aws.amazon.com/servicecatalog">Service Catalog</a> enables
1616
organizations to create and manage catalogs of IT services that are approved for Amazon Web Services. To
1717
get the most out of this documentation, you should be familiar with the terminology
1818
discussed in <a href="http://docs.aws.amazon.com/servicecatalog/latest/adminguide/what-is_concepts.html">Service Catalog

clients/client-service-catalog/src/ServiceCatalog.ts

+55-10
Original file line numberDiff line numberDiff line change
@@ -435,9 +435,9 @@ import {
435435
import { ServiceCatalogClient } from "./ServiceCatalogClient";
436436

437437
/**
438-
* <fullname>AWS Service Catalog</fullname>
438+
* <fullname>Service Catalog</fullname>
439439
* <p>
440-
* <a href="https://aws.amazon.com/servicecatalog/">Service Catalog</a> enables
440+
* <a href="http://aws.amazon.com/servicecatalog">Service Catalog</a> enables
441441
* organizations to create and manage catalogs of IT services that are approved for Amazon Web Services. To
442442
* get the most out of this documentation, you should be familiar with the terminology
443443
* discussed in <a href="http://docs.aws.amazon.com/servicecatalog/latest/adminguide/what-is_concepts.html">Service Catalog
@@ -510,6 +510,22 @@ export class ServiceCatalog extends ServiceCatalogClient {
510510

511511
/**
512512
* <p>Associates the specified principal ARN with the specified portfolio.</p>
513+
* <p>If you share the portfolio with principal name sharing enabled, the <code>PrincipalARN</code> association is
514+
* included in the share. </p>
515+
* <p>The <code>PortfolioID</code>, <code>PrincipalARN</code>, and <code>PrincipalType</code> parameters are
516+
* required. </p>
517+
* <p>You can associate a maximum of 10 Principals with a portfolio using <code>PrincipalType</code> as <code>IAM_PATTERN</code>
518+
* </p>
519+
*
520+
* <note>
521+
* <p>When you associate a principal with portfolio, a potential privilege escalation path may occur when that portfolio is
522+
* then shared with other accounts. For a user in a recipient account who is <i>not</i> an Service Catalog Admin,
523+
* but still has the ability to create Principals (Users/Groups/Roles), that user could create a role that matches a principal
524+
* name association for the portfolio. Although this user may not know which principal names are associated through
525+
* Service Catalog, they may be able to guess the user. If this potential escalation path is a concern, then
526+
* Service Catalog recommends using <code>PrincipalType</code> as <code>IAM</code>. With this configuration,
527+
* the <code>PrincipalARN</code> must already exist in the recipient account before it can be associated. </p>
528+
* </note>
513529
*/
514530
public associatePrincipalWithPortfolio(
515531
args: AssociatePrincipalWithPortfolioCommandInput,
@@ -814,7 +830,18 @@ export class ServiceCatalog extends ServiceCatalogClient {
814830
* <p>
815831
* <code>AWSOrganizationsAccess</code> must be enabled in order to create a portfolio share to an organization node.</p>
816832
* <p>You can't share a shared resource, including portfolios that contain a shared product.</p>
817-
* <p>If the portfolio share with the specified account or organization node already exists, this action will have no effect and will not return an error. To update an existing share, you must use the <code> UpdatePortfolioShare</code> API instead.</p>
833+
* <p>If the portfolio share with the specified account or organization node already exists, this action will have no effect
834+
* and will not return an error. To update an existing share, you must use the <code> UpdatePortfolioShare</code> API instead. </p>
835+
*
836+
* <note>
837+
* <p>When you associate a principal with portfolio, a potential privilege escalation path may occur when that portfolio is
838+
* then shared with other accounts. For a user in a recipient account who is <i>not</i> an Service Catalog Admin,
839+
* but still has the ability to create Principals (Users/Groups/Roles), that user could create a role that matches a principal
840+
* name association for the portfolio. Although this user may not know which principal names are associated through
841+
* Service Catalog, they may be able to guess the user. If this potential escalation path is a concern, then
842+
* Service Catalog recommends using <code>PrincipalType</code> as <code>IAM</code>. With this configuration,
843+
* the <code>PrincipalARN</code> must already exist in the recipient account before it can be associated. </p>
844+
* </note>
818845
*/
819846
public createPortfolioShare(
820847
args: CreatePortfolioShareCommandInput,
@@ -1906,6 +1933,13 @@ export class ServiceCatalog extends ServiceCatalogClient {
19061933
/**
19071934
* <p>Disassociates a previously associated principal ARN from a specified
19081935
* portfolio.</p>
1936+
* <p>The <code>PrincipalType</code> and <code>PrincipalARN</code> must match the
1937+
* <code>AssociatePrincipalWithPortfolio</code> call request details. For example,
1938+
* to disassociate an association created with a <code>PrincipalARN</code> of <code>PrincipalType</code>
1939+
* IAM you must use the <code>PrincipalType</code> IAM when calling <code>DisassociatePrincipalFromPortfolio</code>. </p>
1940+
* <p>For portfolios that have been shared with principal name sharing enabled: after disassociating a principal,
1941+
* share recipient accounts will no longer be able to provision products in this portfolio using a role matching the name
1942+
* of the associated principal. </p>
19091943
*/
19101944
public disassociatePrincipalFromPortfolio(
19111945
args: DisassociatePrincipalFromPortfolioCommandInput,
@@ -2211,17 +2245,17 @@ export class ServiceCatalog extends ServiceCatalogClient {
22112245
}
22122246

22132247
/**
2214-
* <p>Requests the import of a resource as a Amazon Web Services Service Catalog provisioned product that is
2215-
* associated to a Amazon Web Services Service Catalog product and provisioning artifact. Once imported, all
2216-
* supported Amazon Web Services Service Catalog governance actions are supported on the provisioned
2248+
* <p>Requests the import of a resource as an Service Catalog provisioned product that is
2249+
* associated to an Service Catalog product and provisioning artifact. Once imported, all
2250+
* supported Service Catalog governance actions are supported on the provisioned
22172251
* product.</p>
22182252
* <p>Resource import only supports CloudFormation stack ARNs. CloudFormation StackSets and
22192253
* non-root nested stacks are not supported.</p>
22202254
* <p>The CloudFormation stack must have one of the following statuses to be imported:
22212255
* <code>CREATE_COMPLETE</code>, <code>UPDATE_COMPLETE</code>, <code>UPDATE_ROLLBACK_COMPLETE</code>, <code>IMPORT_COMPLETE</code>,
22222256
* <code>IMPORT_ROLLBACK_COMPLETE</code>.</p>
22232257
* <p>Import of the resource requires that the CloudFormation stack template matches the
2224-
* associated Amazon Web Services Service Catalog product provisioning artifact. </p>
2258+
* associated Service Catalog product provisioning artifact. </p>
22252259
*
22262260
* <p>The user or role that performs this operation must have the <code>cloudformation:GetTemplate</code>
22272261
* and <code>cloudformation:DescribeStacks</code> IAM policy permissions. </p>
@@ -2520,7 +2554,7 @@ export class ServiceCatalog extends ServiceCatalogClient {
25202554
}
25212555

25222556
/**
2523-
* <p>Lists all principal ARNs associated with the specified portfolio.</p>
2557+
* <p>Lists all <code>PrincipalARN</code>s and corresponding <code>PrincipalType</code>s associated with the specified portfolio.</p>
25242558
*/
25252559
public listPrincipalsForPortfolio(
25262560
args: ListPrincipalsForPortfolioCommandInput,
@@ -3156,15 +3190,26 @@ export class ServiceCatalog extends ServiceCatalogClient {
31563190
}
31573191

31583192
/**
3159-
* <p>Updates the specified portfolio share. You can use this API to enable or disable TagOptions sharing for an existing portfolio share. </p>
3193+
* <p>Updates the specified portfolio share. You can use this API to enable or disable <code>TagOptions</code> sharing
3194+
* or Principal sharing for an existing portfolio share. </p>
31603195
*
3161-
* <p>The portfolio share cannot be updated if the <code> CreatePortfolioShare</code> operation is <code>IN_PROGRESS</code>, as the share is not available to recipient entities. In this case, you must wait for the portfolio share to be COMPLETED.</p>
3196+
* <p>The portfolio share cannot be updated if the <code>CreatePortfolioShare</code> operation is <code>IN_PROGRESS</code>, as the share is not available to recipient entities. In this case, you must wait for the portfolio share to be COMPLETED.</p>
31623197
*
31633198
* <p>You must provide the <code>accountId</code> or organization node in the input, but not both.</p>
31643199
*
31653200
* <p>If the portfolio is shared to both an external account and an organization node, and both shares need to be updated, you must invoke <code>UpdatePortfolioShare</code> separately for each share type. </p>
31663201
*
31673202
* <p>This API cannot be used for removing the portfolio share. You must use <code>DeletePortfolioShare</code> API for that action. </p>
3203+
*
3204+
* <note>
3205+
* <p>When you associate a principal with portfolio, a potential privilege escalation path may occur when that portfolio is
3206+
* then shared with other accounts. For a user in a recipient account who is <i>not</i> an Service Catalog Admin,
3207+
* but still has the ability to create Principals (Users/Groups/Roles), that user could create a role that matches a principal
3208+
* name association for the portfolio. Although this user may not know which principal names are associated through
3209+
* Service Catalog, they may be able to guess the user. If this potential escalation path is a concern, then
3210+
* Service Catalog recommends using <code>PrincipalType</code> as <code>IAM</code>. With this configuration,
3211+
* the <code>PrincipalARN</code> must already exist in the recipient account before it can be associated. </p>
3212+
* </note>
31683213
*/
31693214
public updatePortfolioShare(
31703215
args: UpdatePortfolioShareCommandInput,

clients/client-service-catalog/src/ServiceCatalogClient.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -656,9 +656,9 @@ type ServiceCatalogClientResolvedConfigType = __SmithyResolvedConfiguration<__Ht
656656
export interface ServiceCatalogClientResolvedConfig extends ServiceCatalogClientResolvedConfigType {}
657657

658658
/**
659-
* <fullname>AWS Service Catalog</fullname>
659+
* <fullname>Service Catalog</fullname>
660660
* <p>
661-
* <a href="https://aws.amazon.com/servicecatalog/">Service Catalog</a> enables
661+
* <a href="http://aws.amazon.com/servicecatalog">Service Catalog</a> enables
662662
* organizations to create and manage catalogs of IT services that are approved for Amazon Web Services. To
663663
* get the most out of this documentation, you should be familiar with the terminology
664664
* discussed in <a href="http://docs.aws.amazon.com/servicecatalog/latest/adminguide/what-is_concepts.html">Service Catalog

clients/client-service-catalog/src/commands/AssociatePrincipalWithPortfolioCommand.ts

+16
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,22 @@ export interface AssociatePrincipalWithPortfolioCommandOutput
3232

3333
/**
3434
* <p>Associates the specified principal ARN with the specified portfolio.</p>
35+
* <p>If you share the portfolio with principal name sharing enabled, the <code>PrincipalARN</code> association is
36+
* included in the share. </p>
37+
* <p>The <code>PortfolioID</code>, <code>PrincipalARN</code>, and <code>PrincipalType</code> parameters are
38+
* required. </p>
39+
* <p>You can associate a maximum of 10 Principals with a portfolio using <code>PrincipalType</code> as <code>IAM_PATTERN</code>
40+
* </p>
41+
*
42+
* <note>
43+
* <p>When you associate a principal with portfolio, a potential privilege escalation path may occur when that portfolio is
44+
* then shared with other accounts. For a user in a recipient account who is <i>not</i> an Service Catalog Admin,
45+
* but still has the ability to create Principals (Users/Groups/Roles), that user could create a role that matches a principal
46+
* name association for the portfolio. Although this user may not know which principal names are associated through
47+
* Service Catalog, they may be able to guess the user. If this potential escalation path is a concern, then
48+
* Service Catalog recommends using <code>PrincipalType</code> as <code>IAM</code>. With this configuration,
49+
* the <code>PrincipalARN</code> must already exist in the recipient account before it can be associated. </p>
50+
* </note>
3551
* @example
3652
* Use a bare-bones client and the command you need to make an API call.
3753
* ```javascript

clients/client-service-catalog/src/commands/CreatePortfolioShareCommand.ts

+12-1
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,18 @@ export interface CreatePortfolioShareCommandOutput extends CreatePortfolioShareO
3737
* <p>
3838
* <code>AWSOrganizationsAccess</code> must be enabled in order to create a portfolio share to an organization node.</p>
3939
* <p>You can't share a shared resource, including portfolios that contain a shared product.</p>
40-
* <p>If the portfolio share with the specified account or organization node already exists, this action will have no effect and will not return an error. To update an existing share, you must use the <code> UpdatePortfolioShare</code> API instead.</p>
40+
* <p>If the portfolio share with the specified account or organization node already exists, this action will have no effect
41+
* and will not return an error. To update an existing share, you must use the <code> UpdatePortfolioShare</code> API instead. </p>
42+
*
43+
* <note>
44+
* <p>When you associate a principal with portfolio, a potential privilege escalation path may occur when that portfolio is
45+
* then shared with other accounts. For a user in a recipient account who is <i>not</i> an Service Catalog Admin,
46+
* but still has the ability to create Principals (Users/Groups/Roles), that user could create a role that matches a principal
47+
* name association for the portfolio. Although this user may not know which principal names are associated through
48+
* Service Catalog, they may be able to guess the user. If this potential escalation path is a concern, then
49+
* Service Catalog recommends using <code>PrincipalType</code> as <code>IAM</code>. With this configuration,
50+
* the <code>PrincipalARN</code> must already exist in the recipient account before it can be associated. </p>
51+
* </note>
4152
* @example
4253
* Use a bare-bones client and the command you need to make an API call.
4354
* ```javascript

clients/client-service-catalog/src/commands/DisassociatePrincipalFromPortfolioCommand.ts

+7
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,13 @@ export interface DisassociatePrincipalFromPortfolioCommandOutput
3333
/**
3434
* <p>Disassociates a previously associated principal ARN from a specified
3535
* portfolio.</p>
36+
* <p>The <code>PrincipalType</code> and <code>PrincipalARN</code> must match the
37+
* <code>AssociatePrincipalWithPortfolio</code> call request details. For example,
38+
* to disassociate an association created with a <code>PrincipalARN</code> of <code>PrincipalType</code>
39+
* IAM you must use the <code>PrincipalType</code> IAM when calling <code>DisassociatePrincipalFromPortfolio</code>. </p>
40+
* <p>For portfolios that have been shared with principal name sharing enabled: after disassociating a principal,
41+
* share recipient accounts will no longer be able to provision products in this portfolio using a role matching the name
42+
* of the associated principal. </p>
3643
* @example
3744
* Use a bare-bones client and the command you need to make an API call.
3845
* ```javascript

clients/client-service-catalog/src/commands/ImportAsProvisionedProductCommand.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -29,17 +29,17 @@ export interface ImportAsProvisionedProductCommandInput extends ImportAsProvisio
2929
export interface ImportAsProvisionedProductCommandOutput extends ImportAsProvisionedProductOutput, __MetadataBearer {}
3030

3131
/**
32-
* <p>Requests the import of a resource as a Amazon Web Services Service Catalog provisioned product that is
33-
* associated to a Amazon Web Services Service Catalog product and provisioning artifact. Once imported, all
34-
* supported Amazon Web Services Service Catalog governance actions are supported on the provisioned
32+
* <p>Requests the import of a resource as an Service Catalog provisioned product that is
33+
* associated to an Service Catalog product and provisioning artifact. Once imported, all
34+
* supported Service Catalog governance actions are supported on the provisioned
3535
* product.</p>
3636
* <p>Resource import only supports CloudFormation stack ARNs. CloudFormation StackSets and
3737
* non-root nested stacks are not supported.</p>
3838
* <p>The CloudFormation stack must have one of the following statuses to be imported:
3939
* <code>CREATE_COMPLETE</code>, <code>UPDATE_COMPLETE</code>, <code>UPDATE_ROLLBACK_COMPLETE</code>, <code>IMPORT_COMPLETE</code>,
4040
* <code>IMPORT_ROLLBACK_COMPLETE</code>.</p>
4141
* <p>Import of the resource requires that the CloudFormation stack template matches the
42-
* associated Amazon Web Services Service Catalog product provisioning artifact. </p>
42+
* associated Service Catalog product provisioning artifact. </p>
4343
*
4444
* <p>The user or role that performs this operation must have the <code>cloudformation:GetTemplate</code>
4545
* and <code>cloudformation:DescribeStacks</code> IAM policy permissions. </p>

clients/client-service-catalog/src/commands/ListPrincipalsForPortfolioCommand.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ export interface ListPrincipalsForPortfolioCommandInput extends ListPrincipalsFo
2929
export interface ListPrincipalsForPortfolioCommandOutput extends ListPrincipalsForPortfolioOutput, __MetadataBearer {}
3030

3131
/**
32-
* <p>Lists all principal ARNs associated with the specified portfolio.</p>
32+
* <p>Lists all <code>PrincipalARN</code>s and corresponding <code>PrincipalType</code>s associated with the specified portfolio.</p>
3333
* @example
3434
* Use a bare-bones client and the command you need to make an API call.
3535
* ```javascript

0 commit comments

Comments
 (0)