

# 関数へのアクセス権を組織に付与する
<a name="permissions-function-organization"></a>

[AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html) 組織内のすべてのアカウントにアクセス許可を付与するには、`put-resource-policy` を使用して、`aws:PrincipalOrgID` 条件キーを含む完全な JSON ポリシーを作成することが推奨されます。

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

## 完全な JSON ポリシーを使う (推奨)
<a name="permissions-function-organization-json"></a>

次のポリシー例では、組織 `o-a1b2c3d4e5f` 内のすべての AWS アカウントに対する呼び出しアクセスを許可します。

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "org-access",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "lambda:InvokeFunction",
            "Resource": "arn:aws:lambda:us-east-2:123456789012:function:my-function",
            "Condition": {
                "StringEquals": {
                    "aws:PrincipalOrgID": "o-a1b2c3d4e5f"
                }
            }
        }
    ]
}
```

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

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

完全な JSON ポリシーを使用すると、組織内の特定のアカウントへのアクセスを拒否することもできます。

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "allow-org",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "lambda:InvokeFunction",
            "Resource": "arn:aws:lambda:us-east-2:123456789012:function:my-function",
            "Condition": {
                "StringEquals": {
                    "aws:PrincipalOrgID": "o-a1b2c3d4e5f"
                }
            }
        },
        {
            "Sid": "deny-specific-account",
            "Effect": "Deny",
            "Principal": {
                "AWS": "arn:aws:iam::999888777666:root"
            },
            "Action": "lambda:InvokeFunction",
            "Resource": [
                "arn:aws:lambda:us-east-2:123456789012:function:my-function",
                "arn:aws:lambda:us-east-2:123456789012:function:my-function:*"
            ]
        }
    ]
}
```

## add-permission を使う
<a name="permissions-function-organization-add-permission"></a>

シンプルなユースケースの場合、`add-permission` を `principal-org-id` オプションと共に使用できます。次のコマンドを使うと、`o-a1b2c3d4e5f` 組織内のすべてのユーザーに呼び出しのアクセス許可が付与されます。

```
aws lambda add-permission \
  --function-name my-function \
  --statement-id org-access \
  --action lambda:InvokeFunction \
  --principal * \
  --principal-org-id o-a1b2c3d4e5f
```

**注記**  
このコマンドでは、`Principal` は `*` です。これにより、組織 `o-a1b2c3d4e5f` 内のすべてのユーザーが関数呼び出しアクセス許可を取得します。AWS アカウント またはロールを `Principal` として指定した場合、そのプリンシパルだけが関数呼び出しアクセス許可を取得します。ただし、それらが `o-a1b2c3d4e5f` 組織の一部である場合に限ります。

詳細については、「*IAM ユーザーガイド*」の「[aws:PrincipalOrgID](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-principalorgid)」を参照してください。