関数を別の AWS アカウント と共有するには、クロスアカウントアクセス許可ステートメントを関数のリソースベースのポリシーに追加します。add-permissionprincipal
として指定します。次の例では、111122223333
エイリアスを使用して my-function
を呼び出すアクセス許可をアカウント prod
に付与します。
aws lambda add-permission \ --function-name my-function:
prod
\ --statement-id xaccount \ --action lambda:InvokeFunction \ --principal111122223333
\ --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"}
リソースベースのポリシーは、他のアカウントに対して関数へのアクセス許可を付与しますが、そのアカウントのユーザーに対してはユーザーに付与済みのアクセス許可を超える許可を付与しません。他のアカウントのユーザーが Lambda API を使用するには、対応するユーザー権限が必要です。
別のアカウントのユーザーまたはロールへのアクセスを制限するには、ID の完全な ARN をプリンシパルとして指定します。例えば、arn:aws:iam::123456789012:user/developer
と指定します。
エイリアスでは、他のアカウントが呼び出すことができるバージョンを制限します。この方法では、他のアカウントは、エイリアスを関数 ARN を含める必要があります。
aws lambda invoke \ --function-name arn:aws:lambda:us-east-2:123456789012:function:my-function:prod out
次のような出力が表示されます。
{
"StatusCode": 200,
"ExecutedVersion": "1"
}
その後、関数の所有者は、新しいバージョンを参照するようにエイリアスを更新できます。これにより、呼び出し元で関数を呼び出す方法を変更する必要がなくなります。また、他のアカウントは、新しいバージョンを使用するようにコードを変更する必要もなくなります。エイリアスに関連付けられた関数のバージョンを呼び出すアクセス許可が付与されるだけです。
既存の関数で動作するほとんどの API アクションにクロスアカウントアクセスを付与できます。例えば、アカウントによるエイリアスのリストの取得を許可する lambda:ListAliases
、または関数コードのダウンロードを許可する lambda:GetFunction
へのアクセス権を付与することができます。各アクセス許可を個別に追加するか、lambda:*
を使用して、指定された関数のすべてのアクションに対するアクセス権を付与します。
他のアカウントに複数の関数に対するアクセス許可、または関数で実行しないアクションに対するアクセス許可を付与するには、IAM ロールを使用することをお勧めします。