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

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

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

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

Python

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

AWS(Amazon Web Services)

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

解決済

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

yuta1989
jetstream

総合スコア63

AWS Lambda

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

Python

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

AWS(Amazon Web Services)

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

1回答

0リアクション

0クリップ

150閲覧

投稿2022/10/04 04:59

編集2022/10/04 05:21

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

from constructs import Construct from aws_cdk import ( Duration, ScopedAws, Stack, CfnParameter, aws_iam as iam, ) class SampleStack(Stack): def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None: super().__init__(scope, construct_id, **kwargs) accountId = CfnParameter(self, "accountId") cfn_managed_policy = iam.CfnManagedPolicy(self, "MyCfnManagedPolicy", policy_document={ "Version": "2012-10-17", "Statement": [ { "Condition": { "StringEquals": { "iam:PermissionsBoundary": "arn:aws:iam::{accountId}:policy/iam-create" } }, "Action": [ "iam:CreateUser", "iam:DeleteUserPolicy", "iam:UpdateUser", "iam:AttachUserPolicy", "iam:DetachUserPolicy", "iam:PutUserPolicy", "iam:PutUserPermissionsBoundary" ], "Resource": "*", "Effect": "Allow" }, { "Action": [ "iam:Get*", "iam:List*", "iam:DeleteUser", "iam:*Group*", "iam:CreatePolicy", "iam:CreateLoginProfile", "iam:CreateAccessKey", "iam:DeletePolicy", "iam:DeletePolicyVersion", "iam:DeleteLoginProfile", "iam:DeleteAccessKey", "iam:SetDefaultPolicyVersion", "iam:SimulatePrincipalPolicy", "iam:SimulateCustomPolicy" ], "Resource": "*", "Effect": "Allow" }, { "Action": [ "iam:CreatePolicyVersion", "iam:DeletePolicy", "iam:DeletePolicyVersion", "iam:DeleteUserPermissionsBoundary", "iam:SetDefaultPolicyVersion" ], "Resource": [ "arn:aws:iam::{accountId}:policy/iam-create" ], "Effect": "Deny" }, { "Effect": "Deny", "Action": "s3:*", "Resource": "*" } ] }, managed_policy_name="managedPolicyName" )

Lambda

Python

response = cfn_client.create_stack( StackName=stack_name, TemplateURL=template_url, Parameters=[ { 'ParameterKey': 'accountId', 'ParameterValue': event.get('account_id'), # 'UsePreviousValue': True|False, # 'ResolvedValue': 'string' }, ], Capabilities=[ 'CAPABILITY_NAMED_IAM' ] )

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

YAML

Parameters: accountId: Type: String BootstrapVersion: Type: AWS::SSM::Parameter::Value<String> Default: /cdk-bootstrap/hnb659fds/version Description: Version of the CDK Bootstrap resources in this environment, automatically retrieved from SSM Parameter Store. [cdk:skip] Resources: MyCfnManagedPolicy: Type: AWS::IAM::ManagedPolicy Properties: PolicyDocument: Version: "2012-10-17" Statement: - Condition: StringEquals: iam:PermissionsBoundary: arn:aws:iam::{accountId}:policy/iam-create Action: - iam:CreateUser - iam:DeleteUserPolicy - iam:UpdateUser - iam:AttachUserPolicy - iam:DetachUserPolicy - iam:PutUserPolicy - iam:PutUserPermissionsBoundary Resource: "*" Effect: Allow - Action: - iam:Get* - iam:List* - iam:DeleteUser - iam:*Group* - iam:CreatePolicy - iam:CreateLoginProfile - iam:CreateAccessKey - iam:DeletePolicy - iam:DeletePolicyVersion - iam:DeleteLoginProfile - iam:DeleteAccessKey - iam:SetDefaultPolicyVersion - iam:SimulatePrincipalPolicy - iam:SimulateCustomPolicy Resource: "*" Effect: Allow - Action: - iam:CreatePolicyVersion - iam:DeletePolicy - iam:DeletePolicyVersion - iam:DeleteUserPermissionsBoundary - iam:SetDefaultPolicyVersion Resource: - arn:aws:iam::{accountId}:policy/iam-create

追記

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

YAML

Parameters: accountId: Type: String BootstrapVersion: Type: AWS::SSM::Parameter::Value<String> Default: /cdk-bootstrap/hnb659fds/version Description: Version of the CDK Bootstrap resources in this environment, automatically retrieved from SSM Parameter Store. [cdk:skip] Resources: MyCfnManagedPolicy: Type: AWS::IAM::ManagedPolicy Properties: PolicyDocument: Version: "2012-10-17" Statement: - Condition: StringEquals: iam:PermissionsBoundary: !Sub arn:aws:iam::${accountId}:policy/iam-create Action: - iam:CreateUser - iam:DeleteUserPolicy - iam:UpdateUser - iam:AttachUserPolicy - iam:DetachUserPolicy - iam:PutUserPolicy - iam:PutUserPermissionsBoundary Resource: "*" Effect: Allow - Action: - iam:Get* - iam:List* - iam:DeleteUser - iam:*Group* - iam:CreatePolicy - iam:CreateLoginProfile - iam:CreateAccessKey - iam:DeletePolicy - iam:DeletePolicyVersion - iam:DeleteLoginProfile - iam:DeleteAccessKey - iam:SetDefaultPolicyVersion - iam:SimulatePrincipalPolicy - iam:SimulateCustomPolicy Resource: "*" Effect: Allow - Action: - iam:CreatePolicyVersion - iam:DeletePolicy - iam:DeletePolicyVersion - iam:DeleteUserPermissionsBoundary - iam:SetDefaultPolicyVersion Resource: - !Sub arn:aws:iam::${accountId}:policy/iam-create

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

同じタグがついた質問を見る

AWS Lambda

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

Python

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

AWS(Amazon Web Services)

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