質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
AWS Lambda

AWS Lambdaは、クラウド上でアプリを実行できるコンピューティングサービス。サーバーのプロビジョニングや管理を要せず複数のイベントに対してコードを実行します。カスタムロジック用いた他AWSサービスの拡張やAWSの規模やパフォーマンスを用いたバックエンドサービスを作成できます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

解決済

1回答

1069閲覧

CDKを使って作成したCFnテンプレートにパラメータを設定する方法(CDKの書き方について)

yuta1989

総合スコア65

AWS Lambda

AWS Lambdaは、クラウド上でアプリを実行できるコンピューティングサービス。サーバーのプロビジョニングや管理を要せず複数のイベントに対してコードを実行します。カスタムロジック用いた他AWSサービスの拡張やAWSの規模やパフォーマンスを用いたバックエンドサービスを作成できます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

0クリップ

投稿2022/10/04 04:59

編集2022/10/05 15:34

CDKからCFnテンプレートを作成してS3バケットにアップロードしていて、LambdaからS3のテンプレートを指定して、Cfnスタックを作成して、IAMポリシーを作成するようにします。

IAMポリシーの中で指定している{accountId}にLambdaからパラメータで渡した値を入れたいのですが、

The policy failed legacy parsing (Service: AmazonIdentityManagement; Status Code: 400; Error Code: MalformedPolicyDocument; Request ID: 4c8c12b2-2bdc-4d80-a282-03bf0cc04270; Proxy: null)

というエラーになります。
CDKをどう修正したらいいでしょうか?

CDKとCFnテンプレートとLambdaは下記になります。

CDK

Python

1from constructs import Construct 2from aws_cdk import ( 3 Duration, 4 ScopedAws, 5 Stack, 6 CfnParameter, 7 aws_iam as iam, 8) 9 10 11class SampleStack(Stack): 12 13 def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None: 14 super().__init__(scope, construct_id, **kwargs) 15 accountId = CfnParameter(self, "accountId") 16 cfn_managed_policy = iam.CfnManagedPolicy(self, "MyCfnManagedPolicy", 17 policy_document={ 18 "Version": "2012-10-17", 19 "Statement": [ 20 { 21 "Condition": { 22 "StringEquals": { 23 "iam:PermissionsBoundary": "arn:aws:iam::{accountId}:policy/iam-create" 24 } 25 }, 26 "Action": [ 27 "iam:CreateUser", 28 "iam:DeleteUserPolicy", 29 "iam:UpdateUser", 30 "iam:AttachUserPolicy", 31 "iam:DetachUserPolicy", 32 "iam:PutUserPolicy", 33 "iam:PutUserPermissionsBoundary" 34 ], 35 "Resource": "*", 36 "Effect": "Allow" 37 }, 38 { 39 "Action": [ 40 "iam:Get*", 41 "iam:List*", 42 "iam:DeleteUser", 43 "iam:*Group*", 44 "iam:CreatePolicy", 45 "iam:CreateLoginProfile", 46 "iam:CreateAccessKey", 47 "iam:DeletePolicy", 48 "iam:DeletePolicyVersion", 49 "iam:DeleteLoginProfile", 50 "iam:DeleteAccessKey", 51 "iam:SetDefaultPolicyVersion", 52 "iam:SimulatePrincipalPolicy", 53 "iam:SimulateCustomPolicy" 54 ], 55 "Resource": "*", 56 "Effect": "Allow" 57 }, 58 { 59 "Action": [ 60 "iam:CreatePolicyVersion", 61 "iam:DeletePolicy", 62 "iam:DeletePolicyVersion", 63 "iam:DeleteUserPermissionsBoundary", 64 "iam:SetDefaultPolicyVersion" 65 ], 66 "Resource": [ 67 "arn:aws:iam::{accountId}:policy/iam-create" 68 ], 69 "Effect": "Deny" 70 }, 71 { 72 "Effect": "Deny", 73 "Action": "s3:*", 74 "Resource": "*" 75 } 76 ] 77 }, 78 managed_policy_name="managedPolicyName" 79 )

Lambda

Python

1response = cfn_client.create_stack( 2 StackName=stack_name, 3 TemplateURL=template_url, 4 Parameters=[ 5 { 6 'ParameterKey': 'accountId', 7 'ParameterValue': event.get('account_id'), 8 # 'UsePreviousValue': True|False, 9 # 'ResolvedValue': 'string' 10 }, 11 ], 12 Capabilities=[ 13 'CAPABILITY_NAMED_IAM' 14 ] 15 ) 16

CFnテンプレート(一部抜粋)

YAML

1Parameters: 2 accountId: 3 Type: String 4 BootstrapVersion: 5 Type: AWS::SSM::Parameter::Value<String> 6 Default: /cdk-bootstrap/hnb659fds/version 7 Description: Version of the CDK Bootstrap resources in this environment, automatically retrieved from SSM Parameter Store. [cdk:skip] 8Resources: 9 MyCfnManagedPolicy: 10 Type: AWS::IAM::ManagedPolicy 11 Properties: 12 PolicyDocument: 13 Version: "2012-10-17" 14 Statement: 15 - Condition: 16 StringEquals: 17 iam:PermissionsBoundary: arn:aws:iam::{accountId}:policy/iam-create 18 Action: 19 - iam:CreateUser 20 - iam:DeleteUserPolicy 21 - iam:UpdateUser 22 - iam:AttachUserPolicy 23 - iam:DetachUserPolicy 24 - iam:PutUserPolicy 25 - iam:PutUserPermissionsBoundary 26 Resource: "*" 27 Effect: Allow 28 - Action: 29 - iam:Get* 30 - iam:List* 31 - iam:DeleteUser 32 - iam:*Group* 33 - iam:CreatePolicy 34 - iam:CreateLoginProfile 35 - iam:CreateAccessKey 36 - iam:DeletePolicy 37 - iam:DeletePolicyVersion 38 - iam:DeleteLoginProfile 39 - iam:DeleteAccessKey 40 - iam:SetDefaultPolicyVersion 41 - iam:SimulatePrincipalPolicy 42 - iam:SimulateCustomPolicy 43 Resource: "*" 44 Effect: Allow 45 - Action: 46 - iam:CreatePolicyVersion 47 - iam:DeletePolicy 48 - iam:DeletePolicyVersion 49 - iam:DeleteUserPermissionsBoundary 50 - iam:SetDefaultPolicyVersion 51 Resource: 52 - arn:aws:iam::{accountId}:policy/iam-create 53 54 55

追記

CFnテンプレートを下記のようにしたらうまく動作することを確認しましたが、 !Sub はどのようにCDKで書けるでしょうか?
CFnテンプレート(一部抜粋)

YAML

1Parameters: 2 accountId: 3 Type: String 4 BootstrapVersion: 5 Type: AWS::SSM::Parameter::Value<String> 6 Default: /cdk-bootstrap/hnb659fds/version 7 Description: Version of the CDK Bootstrap resources in this environment, automatically retrieved from SSM Parameter Store. [cdk:skip] 8Resources: 9 MyCfnManagedPolicy: 10 Type: AWS::IAM::ManagedPolicy 11 Properties: 12 PolicyDocument: 13 Version: "2012-10-17" 14 Statement: 15 - Condition: 16 StringEquals: 17 iam:PermissionsBoundary: !Sub arn:aws:iam::${accountId}:policy/iam-create 18 Action: 19 - iam:CreateUser 20 - iam:DeleteUserPolicy 21 - iam:UpdateUser 22 - iam:AttachUserPolicy 23 - iam:DetachUserPolicy 24 - iam:PutUserPolicy 25 - iam:PutUserPermissionsBoundary 26 Resource: "*" 27 Effect: Allow 28 - Action: 29 - iam:Get* 30 - iam:List* 31 - iam:DeleteUser 32 - iam:*Group* 33 - iam:CreatePolicy 34 - iam:CreateLoginProfile 35 - iam:CreateAccessKey 36 - iam:DeletePolicy 37 - iam:DeletePolicyVersion 38 - iam:DeleteLoginProfile 39 - iam:DeleteAccessKey 40 - iam:SetDefaultPolicyVersion 41 - iam:SimulatePrincipalPolicy 42 - iam:SimulateCustomPolicy 43 Resource: "*" 44 Effect: Allow 45 - Action: 46 - iam:CreatePolicyVersion 47 - iam:DeletePolicy 48 - iam:DeletePolicyVersion 49 - iam:DeleteUserPermissionsBoundary 50 - iam:SetDefaultPolicyVersion 51 Resource: 52 - !Sub arn:aws:iam::${accountId}:policy/iam-create 53 54 55

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

自己解決しました。

Python

1"iam:PermissionsBoundary": { 2 "Fn::Sub": "arn:aws:iam::${AccountId}:policy/managedPolicyName" 3 }

投稿2022/10/05 06:34

yuta1989

総合スコア65

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問