

# Lambda 関数へのアクセス権を他のアカウントに付与する
<a name="permissions-function-cross-account"></a>

関数を別の AWS アカウント と共有するには、クロスアカウントアクセス許可ステートメントを関数の[リソースベースのポリシー](access-control-resource-based.md)に追加します。[add-permission](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/add-permission.html) コマンドを実行し、アカウント ID を `principal` として指定します。次の例では、`111122223333` エイリアスを使用して `my-function` を呼び出すアクセス許可をアカウント `prod` に付与します。

```
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"}
```

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

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

[エイリアス](configuration-aliases.md)では、他のアカウントが呼び出すことができるバージョンを制限します。この方法では、他のアカウントは、エイリアスを関数 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 ロール](access-control-identity-based.md)を使用することをお勧めします。