AWS CloudFormation メカニズムによる権限の管理 - AWS Serverless Application Model

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

AWS CloudFormation メカニズムによる権限の管理

AWS Serverless Application Model (AWS SAM) は、AWS リソースへのアクセスを制御するために、AWS CloudFormation と同じメカニズムを使用します。詳細については、AWS CloudFormation ユーザーガイドの「Controlling access with AWS Identity and Access Management」を参照してください。

サーバーレスアプリケーションを管理するためのユーザー権限の付与には、3 つの主なオプションがあります。各オプションは、ユーザーに異なるレベルのアクセスコントロールを提供します。

  • 管理者権限を付与する。

  • 必要な AWS 管理ポリシーをアタッチする。

  • 特定の AWS Identity and Access Management (IAM) 許可を付与する。

選択するオプションに応じて、ユーザーは、アクセス許可を持つ AWS リソースが含まれたサーバーレスアプリケーションのみを管理できます。

以下のセクションでは、各オプションがより詳しく説明されています。

管理者権限を付与する

ユーザーに管理者権限を付与すると、ユーザーは、任意の組み合わせの AWS リソースが含まれたサーバーレスアプリケーションを管理できます。これは最もシンプルなオプションですが、ユーザーに最も広範な許可のセットを付与するため、最も大きな影響を与えるアクションの実行が可能になります。

ユーザーへの管理者権限の付与に関する詳細については、IAM ユーザーガイドの「最初の IAM 管理者ユーザーおよびユーザーグループの作成」を参照してください。

必要な AWS 管理ポリシーをアタッチする

ユーザーに完全な管理者権限を付与するのではなく、AWS 管理ポリシーを使用して権限のサブセットを付与することができます。このオプションを使用する場合は、ユーザーが管理するサーバーレスアプリケーションに必要なすべてのアクションとリソースが、AWS 管理ポリシーセットの対象範囲内であることを確認してください。

例えば、以下の AWS 管理ポリシーは、サンプル Hello World アプリケーションをデプロイするために十分なポリシーです。

  • AWSCloudFormationFullAccess

  • IAMFullAccess

  • AWSLambda_FullAccess

  • AmazonAPIGatewayAdministrator

  • AmazonS3FullAccess

  • AmazonEC2ContainerRegistryFullAccess

IAM ユーザーへのポリシーのアタッチに関する詳細については、IAM ユーザーガイドの「IAM ユーザーのアクセス権限の変更」を参照してください。

特定の IAM 許可を付与する

最もきめ細かなレベルのアクセスコントロールには、ポリシステートメントを使用して、ユーザーに特定の IAM 許可を付与することができます。このオプションを使用する場合は、ユーザーが管理するサーバーレスアプリケーションに必要なすべてのアクションとリソースがポリシーステートメントに含まれていることを確認してください。

このオプションのベストプラクティスは、ユーザーが昇格された許可を自分自身に付与できないように、Lambda 実行ロールを含めたロールを作成するための許可をユーザーに付与しないことです。このため、管理者は、ユーザーが管理するサーバーレスアプリケーションで指定される Lambda 実行ロールを最初に作成する必要があります。Lambda 実行ロールの作成については、「IAM コンソールでの実行ロールの作成」を参照してください。

サンプル Hello World アプリケーションの実行には、AWSLambdaBasicExecutionRole で十分です。Lambda 実行ロールを作成したら、サンプル Hello World アプリケーションの AWS SAM テンプレートファイルを変更して、以下のプロパティを AWS::Serverless::Function リソースに追加します。

Role: lambda-execution-role-arn

変更された Hello World アプリケーションを使用すると、以下のポリシーステートメントが、アプリケーションをデプロイ、更新、および削除するために十分な許可をユーザーに付与します。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "CloudFormationTemplate", "Effect": "Allow", "Action": [ "cloudformation:CreateChangeSet" ], "Resource": [ "arn:aws:cloudformation:*:aws:transform/Serverless-2016-10-31" ] }, { "Sid": "CloudFormationStack", "Effect": "Allow", "Action": [ "cloudformation:CreateChangeSet", "cloudformation:CreateStack", "cloudformation:DeleteStack", "cloudformation:DescribeChangeSet", "cloudformation:DescribeStackEvents", "cloudformation:DescribeStacks", "cloudformation:ExecuteChangeSet", "cloudformation:GetTemplateSummary", "cloudformation:ListStackResources", "cloudformation:UpdateStack" ], "Resource": [ "arn:aws:cloudformation:*:111122223333:stack/*" ] }, { "Sid": "S3", "Effect": "Allow", "Action": [ "s3:CreateBucket", "s3:GetObject", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::*/*" ] }, { "Sid": "ECRRepository", "Effect": "Allow", "Action": [ "ecr:BatchCheckLayerAvailability", "ecr:BatchGetImage", "ecr:CompleteLayerUpload", "ecr:CreateRepository", "ecr:DeleteRepository", "ecr:DescribeImages", "ecr:DescribeRepositories", "ecr:GetDownloadUrlForLayer", "ecr:GetRepositoryPolicy", "ecr:InitiateLayerUpload", "ecr:ListImages", "ecr:PutImage", "ecr:SetRepositoryPolicy", "ecr:UploadLayerPart" ], "Resource": [ "arn:aws:ecr:*:111122223333:repository/*" ] }, { "Sid": "ECRAuthToken", "Effect": "Allow", "Action": [ "ecr:GetAuthorizationToken" ], "Resource": [ "*" ] }, { "Sid": "Lambda", "Effect": "Allow", "Action": [ "lambda:AddPermission", "lambda:CreateFunction", "lambda:DeleteFunction", "lambda:GetFunction", "lambda:GetFunctionConfiguration", "lambda:ListTags", "lambda:RemovePermission", "lambda:TagResource", "lambda:UntagResource", "lambda:UpdateFunctionCode", "lambda:UpdateFunctionConfiguration" ], "Resource": [ "arn:aws:lambda:*:111122223333:function:*" ] }, { "Sid": "IAM", "Effect": "Allow", "Action": [ "iam:CreateRole", "iam:AttachRolePolicy", "iam:DeleteRole", "iam:DetachRolePolicy", "iam:GetRole", "iam:TagRole" ], "Resource": [ "arn:aws:iam::111122223333:role/*" ] }, { "Sid": "IAMPassRole", "Effect": "Allow", "Action": "iam:PassRole", "Resource": "*", "Condition": { "StringEquals": { "iam:PassedToService": "lambda.amazonaws.com" } } }, { "Sid": "APIGateway", "Effect": "Allow", "Action": [ "apigateway:DELETE", "apigateway:GET", "apigateway:PATCH", "apigateway:POST", "apigateway:PUT" ], "Resource": [ "arn:aws:apigateway:*::*" ] } ] }
注記

このセクションのポリシーステートメントの例では、Hello World アプリケーションのサンプルをデプロイ、更新、および削除するための十分な権限を付与します。アプリケーションにリソースタイプを追加する場合は、ポリシーステートメントを更新して以下を含める必要があります。

  1. アプリケーションがサービスのアクションを呼び出すための権限。

  2. サービスのアクションに必要な場合は、サービスプリンシパル。

例えば、Step Functions ワークフローを追加する場合は、ここにリストされているアクションに対するアクセス許可と、states.amazonaws.com サービスプリンシパルを追加する必要があります。

IAM ポリシーの詳細については、IAM ユーザーガイドの「IAM ポリシーの管理」を参照してください。