View a markdown version of this page

Lambda 関数へのアクセス権を他のアカウントに付与する - AWS Lambda

Lambda 関数へのアクセス権を他のアカウントに付与する

関数を別の AWS アカウント と共有するには、クロスアカウントアクセス許可ステートメントを関数のリソースベースのポリシーに追加します。完全な JSON ポリシーを作成するには put-resource-policy を使用することが推奨されます。put-resource-policy を使えば、複数のプリンシパルを指定し、条件を追加し、拒否ステートメントを作成できます。シンプルなユースケースの場合は add-permission を使用することもできます。

重要

put-resource-policy を使用すると、リソースの既存のリソースベースポリシーが置き換えられます。リソースに add-permission で定義されたアクセス許可が既にある場合、put-resource-policy はそれを上書きします。変更を行う前に既存のポリシーを取得するには get-resource-policy を使用します。

完全な JSON ポリシーを使う (推奨)

次のポリシー例では、2 つの AWS アカウントに、関数を呼び出す権限を付与し、うち 1 つで特定の IAM ロールに制限しています。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "allow-account-invoke", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::111122223333:root", "arn:aws:iam::444455556666:role/cross-account-role" ] }, "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:us-east-2:123456789012:function:my-function" } ] }

このポリシーを policy.json という名前のファイルに保存し、適用します。resource-arn は、関数、バージョン、エイリアスのいずれかを指定できます。

aws lambda put-resource-policy \ --resource-arn arn:aws:lambda:us-east-2:123456789012:function:my-function \ --policy file://policy.json

エイリアスを使用して、クロスアカウントアクセスを特定のバージョンに制限することもできます。次のポリシーは、prod エイリアス経由でのみ呼び出しアクセスを許可します。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "allow-account-prod-alias", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:root" }, "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:us-east-2:123456789012:function:my-function:prod" } ] }

このポリシーを alias-policy.json という名前のファイルに保存し、適用します。

aws lambda put-resource-policy \ --resource-arn arn:aws:lambda:us-east-2:123456789012:function:my-function:prod \ --policy file://alias-policy.json

リソースベースのポリシーは、他のアカウントに対して関数へのアクセス許可を付与しますが、そのアカウントのユーザーに対してはユーザーに付与済みのアクセス許可を超える許可を付与しません。他のアカウントのユーザーが Lambda API を使用するには、対応するユーザー権限が必要です。

既存の関数で動作するほとんどの API アクションにクロスアカウントアクセスを付与できます。例えば、アカウントによるエイリアスのリストの取得を許可する lambda:ListAliases、または関数コードのダウンロードを許可する lambda:GetFunction へのアクセス権を付与することができます。

他のアカウントに複数の関数に対するアクセス許可、または関数で実行しないアクションに対するアクセス許可を付与するには、IAM ロールを使用することをお勧めします。

add-permission を使う

シンプルなユースケースの場合、add-permission を使用して個々のステートメントを追加できます。次の例では、prod エイリアスを使用して my-function を呼び出すアクセス許可をアカウント 111122223333 に付与します。

aws lambda add-permission \ --function-name my-function:prod \ --statement-id xaccount \ --action lambda:InvokeFunction \ --principal 111122223333 \ --output text

以下の出力が表示されます。

{"Sid":"xaccount","Effect":"Allow","Principal":{"AWS":"arn:aws:iam::111122223333:root"},"Action":"lambda:InvokeFunction","Resource":"arn:aws:lambda:us-east-1:123456789012:function:my-function"}
注記

put-resource-policy の後に add-permission を呼び出すと、新しいステートメントが既存の JSON ポリシーに追加されます。

別のアカウントのユーザーまたはロールへのアクセスを制限するには、ID の完全な ARN をプリンシパルとして指定します。例えば、arn:aws:iam::123456789012:user/developer。